Nucleo-F446RE 内蔵の AD/DA を使うためのライブラリ.DA からの出力は,標本化周波数の4倍のレートで行う.  このライブラリを登録した際のプログラム: Demo_F446_AD_DA_Multirate. Library for built-in ADC and DAC in Nucleo-F446RE. Sampling rate for DAC is four times of that for ADC.

Dependencies:   Array_Matrix

Dependents:   F446_UpSampling_GraphicEqualizer F446_UpSampling_ReverbSystem F446_UpSampling_FrqShifter_Weaver Demo_F446_AD_DA_Multirate ... more

Revision:
7:6275fe158ae8
Parent:
2:b55ae17ffd92
--- a/IIR_Cascade.hpp	Mon Jul 09 03:48:50 2018 +0000
+++ b/IIR_Cascade.hpp	Thu Oct 11 11:42:48 2018 +0000
@@ -1,7 +1,7 @@
 //---------------------------------------------------
 //  縦続形 IIR フィルタ
 //
-//  2018/05/19, Copyright (c) 2018 MIKAMI, Naoki
+//  2018/10/11, Copyright (c) 2018 MIKAMI, Naoki
 //---------------------------------------------------
 
 #ifndef IIR_CASCADE_HPP
@@ -9,46 +9,44 @@
 
 #include "Biquad.hpp"
 #include "Array.hpp"    // Array クラスが定義されている
-using namespace Mikami;
 
-class IirCascade
+namespace Mikami
 {
-public:
-    // コンストラクタ
-    IirCascade(int order = 0, const Biquad::Coefs ck[] = NULL, float g0 = 1)
-        : order_(order), hn_((order+1)/2), g0_(g0)
+    class IirCascade
     {
-        for (int k=0; k<(order+1)/2; k++) hn_[k].SetCoefs(ck[k]);
-        Clear();
-    }
+    public:
+        // コンストラクタ
+        IirCascade(int order = 0, const Biquad hk[] = NULL, float g0 = 1)
+            : order_(order), hn_((order+1)/2, hk), g0_(g0) {}
 
-    // フィルタ処理を実行する
-    float Execute(float xn)
-    {
-        float yn = g0_*xn;
-        for (int k=0; k<(order_+1)/2; k++) yn = hn_[k].Execute(yn);
-        return yn;
-    }
+        // フィルタ処理を実行する
+        float Execute(float xn)
+        {
+            float yn = g0_*xn;
+            for (int k=0; k<(order_+1)/2; k++) yn = hn_[k].Execute(yn);
+            return yn;
+        }
 
-    // 係数の設定
-    void SetCoefs(int order, const Biquad::Coefs ck[], float g0)
-    {
-        if (order_ != order)
+        // 係数の設定
+        void SetCoefs(int order, const Biquad::Coefs ck[], float g0)
         {
-            order_ = order;
-            hn_.SetSize((order+1)/2);
+            if (order_ != order)
+            {
+                order_ = order;
+                hn_.SetSize((order+1)/2);
+            }
+            g0_ = g0;
+            for (int k=0; k<(order+1)/2; k++) hn_[k].SetCoefs(ck[k]);
         }
-        g0_ = g0;
-        for (int k=0; k<(order+1)/2; k++) hn_[k].SetCoefs(ck[k]);
-    }
-    
-    // 内部変数(遅延器)のクリア
-    void Clear()
-    {   for (int k=0; k<(order_+1)/2; k++) hn_[k].Clear(); }
+
+        // 内部変数(遅延器)のクリア
+        void Clear()
+        {   for (int k=0; k<(order_+1)/2; k++) hn_[k].Clear(); }
 
-private:
-    int order_;         // 次数
-    Array<Biquad> hn_;  // Biquad クラスのオブジェクトの配列
-    float g0_;          // 利得定数
-};
+    private:
+        int order_;         // 次数
+        Array<Biquad> hn_;  // Biquad クラスのオブジェクトの配列
+        float g0_;          // 利得定数
+    };
+}
 #endif  // IIR_CASCADE_HPP