One-Liner IIR Filters (1st order)¶
- Author or source: moc.edocseira@sirhc
- Type: IIR 1-pole
- Created: 2009-01-18 10:53:44
Here is a collection of one liner IIR filters.
Each filter has been transformed into a single C++ expression.
The filter parameter is f or g, and the state variable that needs to be kept around
between interations is s.
- Christian
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 101 Leaky Integrator
a0 = 1
b1 = 1 - f
out = s += in - f * s;
102 Basic Lowpass (all-pole)
A first order lowpass filter, by finite difference appoximation (differentials --> differences).
a0 = f
b1 = 1 - f
out = s += f * ( in - s );
103 Lowpass with inverted control
Same as above, except for different filter parameter is now inverted.
In this case, g equals the location of the pole.
a0 = g - 1
b1 = g
out = s = in + g * ( s - in );
104 Lowpass with zero at Nyquist
A first order lowpass filter, by via the conformal map of the z-plane (0..infinity --> 0..Nyquist).
a0 = f
a1 = f
b1 = 1 - 2 * f
s = temp + ( out = s + ( temp = f * ( in - s ) ) );
105 Basic Highpass (DC-blocker)
Input complement to basic lowpass, yields a finite difference highpass filter.
a0 = 1 - f
a1 = f - 1
b1 = 1 - f
out = in - ( s += f * ( in - s ) );
106 Highpass with forced unity gain at Nyquist
Input complement to filter 104, yields a conformal map highpass filter.
a0 = 1 - f
a1 = f - 1
b1 = 1 - 2 * f
out = in + temp - ( s += 2 * ( temp = f * ( in - s ) ) );
107 Basic Allpass
This corresponds to a first order allpass filter,
where g is the location of the pole in the range -1..1.
a0 = -g
a1 = 1
b1 = g
s = in + g * ( out = s - g * in );
|
Comments¶
- Date: 2016-03-31 14:21:04
- By: moc.liamg@1ydarbfmot
Great help, although could you advise as to where the parameters a0, a1 and b1 are used for the high pass filter 105?
Thanks