Function to design a 4th order BiQuad filter
Dependents: Project_EMGtosetpoint emg_calibration emg_calibration demo_with_emg ... more
BiQuad4.h@0:caa20b96f300, 2018-10-22 (annotated)
- Committer:
- Mirjam
- Date:
- Mon Oct 22 09:11:21 2018 +0000
- Revision:
- 0:caa20b96f300
Class to make a 4th order BiQuad
Who changed what in which revision?
User | Revision | Line number | New 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 |