#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: . |