AM中波放送用SDR.CICフィルタのみを使用.CQ出版社「トランジスタ技術」誌,2021年4月号に掲載

Dependencies:   mbed

Revision:
2:4bec6b2be809
Parent:
1:30d9fb51dec1
--- a/SDR_Library/FirFastSymmetry.hpp	Mon Sep 23 07:32:10 2019 +0000
+++ b/SDR_Library/FirFastSymmetry.hpp	Sat Aug 29 11:19:03 2020 +0000
@@ -1,12 +1,12 @@
-//-----------------------------------------------------------------
+//----------------------------------------------------------------------------
 // SDR で使う FIR フィルタ,係数:対称
 //      ● 処理の高速化のため,入力信号のバッファのサイズを 256,データを指す
 //        インデックスを uint8_t 型としてリング・バッファを実現している.
 //      ● さらに,係数が対称であることを利用して,先に x[k] + x[ORDER-k] と
 //        いう加算を行ってから,係数の乗算を行うようにした.
 //
-// 2019/03/03, Copyright (c) 2019 MIKAMI, Naoki
-//-----------------------------------------------------------------
+// 2020/07/28, Copyright (c) 2020 MIKAMI, Naoki
+//----------------------------------------------------------------------------
 
 #include "mbed.h"
 
@@ -18,10 +18,10 @@
     {
     public:
         // コンストラクタ
-        //      order   フィルタの次数
+        //      order   フィルタの次数,次数は偶数とする
         //      hk[]    フィルタの係数
-        FirFastSymmetry(int order, const float hk[])
-            : ORDER_(order), hm_(hk), index_(255)
+        FirFastSymmetry(uint8_t order, const float hk[])
+            : ORDER_(order), ORDER2_(order/2), hm_(hk), index_(255)
         {   for (int k=0; k<SIZE_; k++) un_[k] = 0; }
 
         // 入力信号をバッファへ書き込む
@@ -33,23 +33,23 @@
             __IO uint8_t ptrM = index_;
             __IO uint8_t ptrP = index_ - ORDER_;
             float acc = 0;
-            for (int k=0; k<ORDER_/2; k++)
+            for (int k=0; k<ORDER2_; k++)
                 acc += hm_[k]*(un_[ptrM--] + un_[ptrP++]);
-            acc += hm_[ORDER_/2]*un_[ptrM];
+            acc += hm_[ORDER2_]*un_[ptrM];
             return acc;
         }
 
     private:
         static const int SIZE_ = 256;   // 入力信号のバッファのサイズ
-        const int ORDER_;               // フィルタの次数
+        const uint8_t ORDER_;           // フィルタの次数
+        const uint8_t ORDER2_;          // フィルタの次数の半分
         const float *const hm_;         // フィルタの係数
         float un_[SIZE_];               // 入力信号のバッファ
         __IO uint8_t index_;            // 最新の入力信号を示すインデックス
 
-        // コピー・コンストラクタ禁止のため
+        // コピー・コンストラクタ,代入演算子の禁止のため
         FirFastSymmetry(const FirFastSymmetry&);
-        // 代入演算子禁止のため
         FirFastSymmetry& operator=(const FirFastSymmetry&);
     };
 }
-#endif  // FIR_DIRECT_FAST_SYMMETRY_HPP
+#endif  // FIR_DIRECT_FAST_SYMMETRY_HPP
\ No newline at end of file