iir1
Loading...
Searching...
No Matches
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
43namespace 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