One of the standard ways to implement a Butterworth filter is with a cascade of second-order sections, each corresponding to a pair of complex-conjugate poles. For a fourth-order filter, for example, there would be two second-order sections. If we consider how the pole locations for a lowpass filter change in the z-plane as the cutoff is designed for near 0hz to near Nyquist, the path "swept out" by each pair of poles corresponds to a pair of arcs inside the unit circle, as illustrated by the following figure [for fourth-order filters]:
Given how long these filters have been around, and given the fact these "arcs" correspond to straight lines in the s-plane, it stands to reason that someone would have developed an implementation form with a single parameter which is able to sweep the poles along the arcs at "run time" [as opposed to "design time"]. However, I haven't come across anything like that yet.
It's relatively straightforward to come up with various ways of doing this, especially within segments of the range, and with a willingness to throw a little extra computation at it. What I'm wondering is the following:
Is there some standard way of implementing a tunable [digital] Butterworth filter of a given order that 1) has optimal properties (e.g. efficiency, robustness), and 2) covers the entire range?
Or is this really just such an easy problem that nobody bothers to talk about it? If that's the case, it seems like it would show up in filter design programs next to the options for "static" designs.
I did find this: A multiple purpose Butterworth filter with variable cutoff frequency, but at first Googling there doesn't seem to be much information about what's in it.
Update (re: answers)
Just to be a little more clear:
- I'm looking for a "meta-design" with a parameter (say from [0,1]) that will automatically adjust the cutoff from DC to Nyquist (while keeping the gain normalized) for use in a time-varying system. Something like this two-pole resonator, except with Butterworth constraints. The idea is that calculating the parameter would be more efficient than going through the typical offline design procedure at runtime.
- I'm not necessarily even looking for how to design a "meta-filter" (i.e. do the math with variables instead of numbers), I'm wondering whether there are choices for standard [non-obvious] implementation forms--because, say, the straightforward approach that corresponds to the static case ends up having numerical issues in the time-varying case.
- Maybe there are no issues, and the straightforward approach is what's used in practice. That would be great. My concern is that I haven't seen this topic mentioned explicitly in any of the sources I've consulted, but maybe I just missed something really obvious, so I'm asking.
- In the process of adding more detail here, I ran across a general treatment of parametric biquad structures, which is almost what I'm looking for (and has some nice references).
I'm looking for answers like the one I put in my second comment to Jason R, as follows:
"Oh yeah, you want to use parametrization III-2b from so-and-so's thesis, in tapped state lattice form because it resolves such-and-such edge case while using the minimal number of multiplies."
Maybe nothing like that exists, but my question is whether it does, and if so, what is it, or where can I find it?
Based on a reference to "observer canonical form" given by Tim Wescott in the comp.dsp thread in Jason R's answer, I decided to assume that I might have to start digging around in the control systems literature, so I tried doing a search for butterworth "state space", and it turned up the following, very cool, treatment of designing/implementing, not only parametric Butterworth, but also Chebyshev and Elliptic filters:
Sophocles J. Orfanidis, "High-Order Digital Parametric Equalizer Design," J. Audio Eng. Soc., vol. 53, pp. 1026-1046, Nov. 2005.
- Paper: http://www.ece.rutgers.edu/~orfanidi/ece348/hpeq.pdf
- Matlab Toolbox: http://eceweb1.rutgers.edu/~orfanidi/hpeq/
It's going to take a little while to dig into, but based on what I've read so far, I'd be very surprised if it's not what I'm looking for. I'm giving this one to Jason R for the comp.dsp reference that led me to the Orfanidis paper. His answer is also a nice practical overview of designing Butterworth filters as well.