Demo program of digital signal processing: Variable LPF/HPF, Vocal canceller, Pitch shifter, Reverbrator. ディジタル信号処理のデモプログラム. 遮断周波数可変 LPF/HPF,ボーカルキャンセラ,ピッチシフタ,残響生成器.

Dependencies:   Array_Matrix F446_AD_DA UIT_AQM1602 mbed

Revision:
0:fa74b1130cc3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SignalProcessing/IIR_Cascade.hpp	Sun Jan 29 09:11:30 2017 +0000
@@ -0,0 +1,66 @@
+//--------------------------------------------------------------
+// IIR filter ---- Cascade structure
+
+// 2017/01/26, Copyright (c) 2017 MIKAMI, Naoki
+//--------------------------------------------------------------
+
+#ifndef IIR_CASCADE_HPP
+#define IIR_CASCADE_HPP
+
+#include "mbed.h"
+#include "Biquad.hpp"
+#include "Array.hpp"
+using namespace Mikami;
+
+namespace Mikami
+{
+    // IIR filter -- Cascade structure
+    class IirCascade
+    {
+    public:
+        IirCascade(int order, float g0 = 1,
+                   const Biquad::Coefs ck[] = NULL)
+            : ORDER2_(order/2), hk_(order/2)
+        {
+            if (ck != NULL) SetCoefs(g0, ck);
+            else            g0_ = g0;
+        }
+
+        void SetCoefs(float g0, const Biquad::Coefs ck[])
+        {
+            g0_ = g0;
+            for (int k=0; k<ORDER2_; k++) hk_[k].SetCoefs(ck[k]);
+        }
+
+        void GetCoefs(float &g0, Biquad::Coefs ck[])
+        {
+            g0 = g0_;
+            for (int k=0; k<ORDER2_; k++) hk_[k].GetCoefs(ck[k]);
+        }
+
+        float Execute(float xn)
+        {
+            float yn = g0_*xn;
+            for (int k=0; k<ORDER2_; k++)
+                yn = hk_[k].Execute(yn);
+                
+            return yn;
+        }
+        
+        void Clear()
+        {
+            for (int k=0; k<ORDER2_; k++)
+                hk_[k].Clear();
+        }
+
+    private:
+        const int ORDER2_;
+        Array<Biquad> hk_;  // Elements of cascade structure
+        float g0_;          // gain factor
+
+        // disallow copy constructor and assignment operator
+        IirCascade(const IirCascade&);
+        IirCascade& operator=(const IirCascade&);
+    };
+}
+#endif  // IIR_CASCADE_HPP