iir1
State.h
1 
36 #ifndef IIR1_STATE_H
37 #define IIR1_STATE_H
38 
39 #include "Common.h"
40 #include "Biquad.h"
41 
42 #include <stdexcept>
43 
44 #define DEFAULT_STATE DirectFormII
45 
46 namespace Iir {
47 
56  class DllExport DirectFormI
57  {
58  public:
59  DirectFormI ()
60  {
61  reset();
62  }
63 
64  void reset ()
65  {
66  m_x1 = 0;
67  m_x2 = 0;
68  m_y1 = 0;
69  m_y2 = 0;
70  }
71 
72  inline double filter(const double in,
73  const Biquad& s)
74  {
75  const double out = s.m_b0*in + s.m_b1*m_x1 + s.m_b2*m_x2
76  - s.m_a1*m_y1 - s.m_a2*m_y2;
77  m_x2 = m_x1;
78  m_y2 = m_y1;
79  m_x1 = in;
80  m_y1 = out;
81 
82  return out;
83  }
84 
85  protected:
86  double m_x2 = 0; // x[n-2]
87  double m_y2 = 0; // y[n-2]
88  double m_x1 = 0; // x[n-1]
89  double m_y1 = 0; // y[n-1]
90  };
91 
92 //------------------------------------------------------------------------------
93 
103  class DllExport DirectFormII
104  {
105  public:
106  DirectFormII ()
107  {
108  reset ();
109  }
110 
111  void reset ()
112  {
113  m_v1 = 0;
114  m_v2 = 0;
115  }
116 
117  inline double filter(const double in,
118  const Biquad& s)
119  {
120  const double w = in - s.m_a1*m_v1 - s.m_a2*m_v2;
121  const double out = s.m_b0*w + s.m_b1*m_v1 + s.m_b2*m_v2;
122 
123  m_v2 = m_v1;
124  m_v1 = w;
125 
126  return out;
127  }
128 
129  private:
130  double m_v1 = 0; // v[-1]
131  double m_v2 = 0; // v[-2]
132  };
133 
134 
135 //------------------------------------------------------------------------------
136 
137  class DllExport TransposedDirectFormII
138  {
139  public:
141  {
142  reset ();
143  }
144 
145  void reset ()
146  {
147  m_s1 = 0;
148  m_s1_1 = 0;
149  m_s2 = 0;
150  m_s2_1 = 0;
151  }
152 
153  inline double filter(const double in,
154  const Biquad& s)
155  {
156  const double out = m_s1_1 + s.m_b0*in;
157  m_s1 = m_s2_1 + s.m_b1*in - s.m_a1*out;
158  m_s2 = s.m_b2*in - s.m_a2*out;
159  m_s1_1 = m_s1;
160  m_s2_1 = m_s2;
161 
162  return out;
163  }
164 
165  private:
166  double m_s1 = 0;
167  double m_s1_1 = 0;
168  double m_s2 = 0;
169  double m_s2_1 = 0;
170  };
171 
172 }
173 
174 #endif
Iir::DirectFormII
Definition: State.h:103
Iir::Biquad
Definition: Biquad.h:52
Iir::DirectFormI
Definition: State.h:56
Iir
Definition: Biquad.cpp:41
Iir::TransposedDirectFormII
Definition: State.h:137