Matched Lowpass Filter
Posted: Fri Sep 11, 2015 11:07 pm
Biquads are simple filters with 5 coefficients a1, a2, b0, b1, b2. These five coefficients determine the filter's transfer function, which can be a lowpass, bandpass, bandstop etc. Filter design methods exist to determine the coefficients for a specified filter characteristic, the most simple being the so-called bilinear transform (BLT). The famous RBJ Cookbook provides closed form expressions based on the BLT for the coefficients for some standard filter types.
One problem with the BLT is frequency warping towards the Nyquist frequency. For a lowpass filter with a resonant peak the effect is a steeper than nominal (12 dB/octave) fallof for high cutoff frequencies, and a narrowing of the resonant peak. Note that analog filters do not have this problem.
Oversampling provides remedy but at a high CPU cost. It turns out that that a very good analog-like constant-Q approximation can be obtained by choosing appropriate coefficients. There is some literature on that, however I have come up with my own solution that I am quite happy with.
I took the poles from impulse nvariant mapping of the analog filter prototype, whereas the zeros are fitted by least squares and then approximated by a suitable function. It turned out that it is sufficient to account for one zero only.
Here is the result. Besides the direct form I also implemented a complex resonator topology which is superior at low frequencies and allows fast modulation.
Have fun!
One problem with the BLT is frequency warping towards the Nyquist frequency. For a lowpass filter with a resonant peak the effect is a steeper than nominal (12 dB/octave) fallof for high cutoff frequencies, and a narrowing of the resonant peak. Note that analog filters do not have this problem.
Oversampling provides remedy but at a high CPU cost. It turns out that that a very good analog-like constant-Q approximation can be obtained by choosing appropriate coefficients. There is some literature on that, however I have come up with my own solution that I am quite happy with.
I took the poles from impulse nvariant mapping of the analog filter prototype, whereas the zeros are fitted by least squares and then approximated by a suitable function. It turned out that it is sufficient to account for one zero only.
Here is the result. Besides the direct form I also implemented a complex resonator topology which is superior at low frequencies and allows fast modulation.
Have fun!