iir1
Biquad.h
1 
36 #ifndef IIR1_BIQUAD_H
37 #define IIR1_BIQUAD_H
38 
39 #include "Common.h"
40 #include "MathSupplement.h"
41 #include "Types.h"
42 
43 namespace Iir {
44 
45  struct DllExport BiquadPoleState;
46 
47 /*
48  * Holds coefficients for a second order Infinite Impulse Response
49  * digital filter. This is the building block for all IIR filters.
50  *
51  */
52  class DllExport Biquad
53  {
54  public:
59  complex_t response (double normalizedFrequency) const;
60 
64  std::vector<PoleZeroPair> getPoleZeros () const;
65 
69  double getA0 () const { return m_a0; }
70 
74  double getA1 () const { return m_a1*m_a0; }
75 
79  double getA2 () const { return m_a2*m_a0; }
80 
84  double getB0 () const { return m_b0*m_a0; }
85 
89  double getB1 () const { return m_b1*m_a0; }
90 
94  double getB2 () const { return m_b2*m_a0; }
95 
102  template <class StateType>
103  inline double filter(double s, StateType& state) const
104  {
105  return state.filter(s, *this);
106  }
107 
108  public:
118  void setCoefficients (double a0, double a1, double a2,
119  double b0, double b1, double b2);
120 
124  void setOnePole (complex_t pole, complex_t zero);
125 
129  void setTwoPole (complex_t pole1, complex_t zero1,
130  complex_t pole2, complex_t zero2);
131 
135  void setPoleZeroPair (const PoleZeroPair& pair)
136  {
137  if (pair.isSinglePole ())
138  setOnePole (pair.poles.first, pair.zeros.first);
139  else
140  setTwoPole (pair.poles.first, pair.zeros.first,
141  pair.poles.second, pair.zeros.second);
142  }
143 
144  void setPoleZeroForm (const BiquadPoleState& bps);
145 
149  void setIdentity ();
150 
155  void applyScale (double scale);
156 
157  public:
158  double m_a0 = 1.0;
159  double m_a1 = 0.0;
160  double m_a2 = 0.0;
161  double m_b1 = 0.0;
162  double m_b2 = 0.0;
163  double m_b0 = 1.0;
164  };
165 
166 //------------------------------------------------------------------------------
167 
168 
173  struct DllExport BiquadPoleState : PoleZeroPair
174  {
175  BiquadPoleState () = default;
176 
177  explicit BiquadPoleState (const Biquad& s);
178 
179  double gain = 1.0;
180  };
181 
182 }
183 
184 #endif
Definition: Biquad.h:53
double getA2() const
Definition: Biquad.h:79
double getA1() const
Definition: Biquad.h:74
double filter(double s, StateType &state) const
Definition: Biquad.h:103
void setPoleZeroPair(const PoleZeroPair &pair)
Definition: Biquad.h:135
double getA0() const
Definition: Biquad.h:69
double getB0() const
Definition: Biquad.h:84
double getB2() const
Definition: Biquad.h:94
double getB1() const
Definition: Biquad.h:89
Definition: Biquad.cpp:40
Definition: Biquad.h:174
Definition: Types.h:98