10 _delay_element_1 = T();
11 _delay_element_2 = T();
20 T delay_element_0 = sample - _delay_element_1 * params.a1 - _delay_element_2 * params.a2;
21 T output = delay_element_0 * params.b0 + _delay_element_1 * params.b1 + _delay_element_2 * params.b2;
23 _delay_element_2 = _delay_element_1;
24 _delay_element_1 = delay_element_0;
31 _delay_element_1 = _delay_element_2 = T();
36 ret.cutoff_freq = cutoff_freq;
37 ret.sample_freq = sample_freq;
39 float fr = sample_freq/cutoff_freq;
40 float ohm = tanf(
M_PI/fr);
41 float c = 1.0f+2.0f*cosf(
M_PI/4.0
f)*ohm + ohm*ohm;
46 ret.a1 = 2.0f*(ohm*ohm-1.0f)/c;
47 ret.a2 = (1.0f-2.0f*cosf(
M_PI/4.0
f)*ohm+ohm*ohm)/c;
57 memset(&_params, 0,
sizeof(_params) );
64 set_cutoff_frequency(sample_freq, cutoff_freq);
76 return _params.cutoff_freq;
81 return _params.sample_freq;
86 return _filter.apply(sample, _params);
91 return _filter.reset();
float get_sample_freq(void) const
float get_cutoff_freq(void) const
bool is_zero(const T fVal1)
void set_cutoff_frequency(float sample_freq, float cutoff_freq)
A class to implement a second order low pass filter.
T apply(const T &sample, const struct biquad_params ¶ms)
static void compute_params(float sample_freq, float cutoff_freq, biquad_params &ret)