Function to design a 4th order BiQuad filter

Dependents:   Project_EMGtosetpoint emg_calibration emg_calibration demo_with_emg ... more

Committer:
Mirjam
Date:
Tue Nov 06 09:14:46 2018 +0000
Revision:
1:ac4bef72d6af
Parent:
0:caa20b96f300
Added comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mirjam 0:caa20b96f300 1 #ifndef BIQUAD4_BIQUAD4_H
Mirjam 0:caa20b96f300 2 #define BIQUAD4_BIQUAD4_H
Mirjam 0:caa20b96f300 3
Mirjam 0:caa20b96f300 4 #include <vector>
Mirjam 0:caa20b96f300 5 #include <complex>
Mirjam 0:caa20b96f300 6
Mirjam 0:caa20b96f300 7 /** BiQuad class implements a single filter
Mirjam 0:caa20b96f300 8 *
Mirjam 0:caa20b96f300 9 * Filters that - in the z domain - are the ratio of two fourth order functions. The general form is:
Mirjam 0:caa20b96f300 10 *
Mirjam 0:caa20b96f300 11 * b0 + b1 z^-1 + b2 z^-2 + b3 z^-3 + b4 z^-4
Mirjam 0:caa20b96f300 12 * H(z) = ------------------------------------------
Mirjam 0:caa20b96f300 13 * a0 + a1 z^-1 + a2 z^-2 + a3 z^-3 + a4 z^-4
Mirjam 0:caa20b96f300 14 * Which is often normalized by dividing all coefficients by a0.
Mirjam 0:caa20b96f300 15 */
Mirjam 0:caa20b96f300 16 class BiQuad4 {
Mirjam 0:caa20b96f300 17
Mirjam 0:caa20b96f300 18 private:
Mirjam 0:caa20b96f300 19
Mirjam 0:caa20b96f300 20 double B[5];
Mirjam 0:caa20b96f300 21 double A[4];
Mirjam 0:caa20b96f300 22 double wz[4];
Mirjam 0:caa20b96f300 23
Mirjam 0:caa20b96f300 24 bool resetStateOnGainChange;
Mirjam 0:caa20b96f300 25
Mirjam 0:caa20b96f300 26 /**
Mirjam 0:caa20b96f300 27 * Sets the gain parameters
Mirjam 0:caa20b96f300 28 */
Mirjam 0:caa20b96f300 29 void set( double b0, double b1, double b2, double b3, double b4, double a1, double a2, double a3, double a4 );
Mirjam 0:caa20b96f300 30
Mirjam 0:caa20b96f300 31 public:
Mirjam 0:caa20b96f300 32
Mirjam 0:caa20b96f300 33 /**
Mirjam 0:caa20b96f300 34 * Initialize a unity TF biquad
Mirjam 0:caa20b96f300 35 * @return BiQuad instance
Mirjam 0:caa20b96f300 36 */
Mirjam 0:caa20b96f300 37 BiQuad4( );
Mirjam 0:caa20b96f300 38
Mirjam 0:caa20b96f300 39 // Initialize a normalized biquad filter
Mirjam 0:caa20b96f300 40
Mirjam 0:caa20b96f300 41 BiQuad4( double b0, double b1, double b2, double b3, double b4, double a1, double a2, double a3, double a4 );
Mirjam 0:caa20b96f300 42
Mirjam 0:caa20b96f300 43 /**
Mirjam 0:caa20b96f300 44 * Execute one digital timestep and return the result...
Mirjam 0:caa20b96f300 45 * @param x input of the filer
Mirjam 0:caa20b96f300 46 * @return output of the filter
Mirjam 0:caa20b96f300 47 */
Mirjam 0:caa20b96f300 48 double step( double x );
Mirjam 0:caa20b96f300 49
Mirjam 0:caa20b96f300 50 void setResetStateOnGainChange( bool v );
Mirjam 0:caa20b96f300 51 };
Mirjam 0:caa20b96f300 52
Mirjam 0:caa20b96f300 53 #endif //BIQUAD_BIQUAD_H