#include <Filters.h>
Inheritance diagram for pp::Filters::ButterworthFilter


Public Methods | |
| ButterworthFilter (float a1=0.5f, float a2=0.5f, float a3=0.5f, float b1=0.5f, float b2=0.5f) | |
| void | SetNotchCoefficients (int fc, int sr, float r) |
| void | SetLowPassCoefficients (int fc, int sr) |
| void | SetBandPassCoefficients (int fc, int sr, int bw) |
But for a band-pass filter, the coefficients are: . More... | |
| void | SetFastBandpassCoefficients (int fc, int sr, float r) |
| virtual const char* | GetName () const |
| void | SetCoefficients (float a1, float a2, float a3, float b1, float b2) |
| void | GetCoefficients (float& a1, float& a2, float& a3, float& b1, float& b2) const |
| float | GetA1 () const |
| float | GetA2 () const |
| float | GetA3 () const |
| float | GetB1 () const |
| float | GetB2 () const |
| void | SetA1 (float a1) |
| void | SetA2 (float a2) |
| void | SetA3 (float a3) |
| void | SetB1 (float b1) |
| void | SetB2 (float b2) |
| T | operator() (const T& x) |
| double | FrequencyResponse (float f) |
An intriguing aspect of Butterworth filters is that merely by
changing the coefficients, you can change the behavior of the
filter from low-pass to high-pass to band-pass to band-reject.
All Butterworth filters use the following algorithm:
y(n) = a1*x(n) + a2*x(n-1) + a3*x(n-2) - b1*y(n-1) - b2*y(n-2)
As you can see, this filter has two input taps x(n-1) and x(n-2),
and two output taps y(n-1) and y(n-2). To get a low-pass filter,
the coefficients a1, a2, a3, b1, b2 are calculated thusly:
fc = cutoff frequency
sr = sample rate
C = tan(pi*fc/sr)
a1 = 1 / (1 + sqrt(2)*C + C*C)
a2 = 2*a1
a3 = a1
b1 = 2 * (1 - C*C) * a1
b2 = (1 - sqrt(2)*C + C*C) * a1
But for a band-pass filter, the coefficients are:
fc = center frequency
sr = sample rate
bw = band width
C = 1 / tan(pi*bw/sr)
D = 2 * cos(2*pi*fc/sr)
a1 = pow((1+C), -1);
a2 = 0
a3 = -a1
b1 = -C * D * a1
b2 = (C - 1) * a1
The frequency response is given by (a1*cos(2*pi*df)+a2*cos(2*2*df)+a3*cos(2*3*df))/(1-b1*cos(2*pi*f)-b2*cos(2*2*pi*f))
|
||||||||
|
But for a band-pass filter, the coefficients are: . |
1.2.3 written by Dimitri van Heesch,
© 1997-2000