縦続形 IIR フィルタ用ライブラリ. Library for cascade structure IIR filter.

Dependents:   Demo_IIR_Filter UIT2_VariableIIR_LPF UIT2_VariableIIR_LPFHPF

Revision:
1:69a8b728e8d2
Parent:
0:d2f279439aaf
diff -r d2f279439aaf -r 69a8b728e8d2 Biquad.hpp
--- a/Biquad.hpp	Thu Sep 03 00:42:10 2015 +0000
+++ b/Biquad.hpp	Fri Sep 11 07:34:10 2015 +0000
@@ -1,6 +1,7 @@
 //----------------------------------------------------------------
 //  縦続形 IIR フィルタで使う 1D タイプの 2 次のフィルタ
 //  Biquad filter of 1D type for IIR filter of cascade structure
+//      このクラスでは,係数は実行中に書き換えられることを想定している
 //
 //      u[n] = x[n] + a1*u[n-1] + a2*u[n-2]
 //      y[n] = u[n] + b1*u[n-1] + b2*u[n-2]
@@ -8,7 +9,7 @@
 //          y[n] :  output signal
 //          b0 = 1
 //
-//  2015/09/02, Copyright (c) 2015 MIKAMI, Naoki
+//  2015/09/11, Copyright (c) 2015 MIKAMI, Naoki
 //----------------------------------------------------------------
 
 #ifndef IIR_BIQUAD_HPP
@@ -18,33 +19,44 @@
 
 namespace Mikami
 {
+    // 2nd order IIR filter
     class Biquad
     {
     public:
         struct Coefs { float a1, a2, b1, b2; };
 
-        Biquad() {}     // default constructor
-
+        Biquad() {}     // Default constructore
+ 
         Biquad(const Coefs ck)
-              : a1_(ck.a1), a2_(ck.a2), b1_(ck.b1), b2_(ck.b2)
-        { Clear(); }       
+        {
+            SetCoefs(ck);
+            Clear();
+        }
+
+        void SetCoefs(const Coefs ck)
+        {
+            a1_ = ck.a1;
+            a2_ = ck.a2;
+            b1_ = ck.b1;
+            b2_ = ck.b2;
+        }
 
         float Execute(float xn)
         {
             float un = xn + a1_*un1_ + a2_*un2_;
             float yn = un + b1_*un1_ + b2_*un2_;
-    
+            
             un2_ = un1_;
             un1_ = un;
-
+            
             return yn;
         }
-
+ 
         void Clear() { un1_ = un2_ = 0; }
-
+ 
     private:
-        float a1_, a2_, b1_, b2_;   // coefficients
-        float un1_, un2_;           // buffer for delay
+        float a1_, a2_, b1_, b2_;
+        float un1_, un2_;
 
         // disallow copy constructor and assignment operator
         Biquad(const Biquad&);