不韋 呂 / Mbed 2 deprecated SDR_FM_Rx_CIC

Dependencies:   mbed

Committer:
MikamiUitOpen
Date:
Sat Aug 29 11:25:47 2020 +0000
Revision:
0:4037028ba61a
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:4037028ba61a 1 //----------------------------------------------------------------------------
MikamiUitOpen 0:4037028ba61a 2 // SDR で使う FIR フィルタ,係数:対称
MikamiUitOpen 0:4037028ba61a 3 // ● 処理の高速化のため,入力信号のバッファのサイズを 256,データを指す
MikamiUitOpen 0:4037028ba61a 4 // インデックスを uint8_t 型としてリング・バッファを実現している.
MikamiUitOpen 0:4037028ba61a 5 // ● さらに,係数が対称であることを利用して,先に x[k] + x[ORDER-k] と
MikamiUitOpen 0:4037028ba61a 6 // いう加算を行ってから,係数の乗算を行うようにした.
MikamiUitOpen 0:4037028ba61a 7 //
MikamiUitOpen 0:4037028ba61a 8 // 2020/07/28, Copyright (c) 2020 MIKAMI, Naoki
MikamiUitOpen 0:4037028ba61a 9 //----------------------------------------------------------------------------
MikamiUitOpen 0:4037028ba61a 10
MikamiUitOpen 0:4037028ba61a 11 #include "mbed.h"
MikamiUitOpen 0:4037028ba61a 12
MikamiUitOpen 0:4037028ba61a 13 #ifndef FIR_DIRECT_FAST_SYMMETRY_HPP
MikamiUitOpen 0:4037028ba61a 14 #define FIR_DIRECT_FAST_SYMMETRY_HPP
MikamiUitOpen 0:4037028ba61a 15 namespace Mikami
MikamiUitOpen 0:4037028ba61a 16 {
MikamiUitOpen 0:4037028ba61a 17 class FirFastSymmetry
MikamiUitOpen 0:4037028ba61a 18 {
MikamiUitOpen 0:4037028ba61a 19 public:
MikamiUitOpen 0:4037028ba61a 20 // コンストラクタ
MikamiUitOpen 0:4037028ba61a 21 // order フィルタの次数,次数は偶数とする
MikamiUitOpen 0:4037028ba61a 22 // hk[] フィルタの係数
MikamiUitOpen 0:4037028ba61a 23 FirFastSymmetry(uint8_t order, const float hk[])
MikamiUitOpen 0:4037028ba61a 24 : ORDER_(order), ORDER2_(order/2), hm_(hk), index_(255)
MikamiUitOpen 0:4037028ba61a 25 { for (int k=0; k<SIZE_; k++) un_[k] = 0; }
MikamiUitOpen 0:4037028ba61a 26
MikamiUitOpen 0:4037028ba61a 27 // 入力信号をバッファへ書き込む
MikamiUitOpen 0:4037028ba61a 28 void Store(float xIn) { un_[++index_] = xIn; }
MikamiUitOpen 0:4037028ba61a 29
MikamiUitOpen 0:4037028ba61a 30 // FIR フィルタの実行
MikamiUitOpen 0:4037028ba61a 31 float Execute()
MikamiUitOpen 0:4037028ba61a 32 {
MikamiUitOpen 0:4037028ba61a 33 __IO uint8_t ptrM = index_;
MikamiUitOpen 0:4037028ba61a 34 __IO uint8_t ptrP = index_ - ORDER_;
MikamiUitOpen 0:4037028ba61a 35 float acc = 0;
MikamiUitOpen 0:4037028ba61a 36 for (int k=0; k<ORDER2_; k++)
MikamiUitOpen 0:4037028ba61a 37 acc += hm_[k]*(un_[ptrM--] + un_[ptrP++]);
MikamiUitOpen 0:4037028ba61a 38 acc += hm_[ORDER2_]*un_[ptrM];
MikamiUitOpen 0:4037028ba61a 39 return acc;
MikamiUitOpen 0:4037028ba61a 40 }
MikamiUitOpen 0:4037028ba61a 41
MikamiUitOpen 0:4037028ba61a 42 private:
MikamiUitOpen 0:4037028ba61a 43 static const int SIZE_ = 256; // 入力信号のバッファのサイズ
MikamiUitOpen 0:4037028ba61a 44 const uint8_t ORDER_; // フィルタの次数
MikamiUitOpen 0:4037028ba61a 45 const uint8_t ORDER2_; // フィルタの次数の半分
MikamiUitOpen 0:4037028ba61a 46 const float *const hm_; // フィルタの係数
MikamiUitOpen 0:4037028ba61a 47 float un_[SIZE_]; // 入力信号のバッファ
MikamiUitOpen 0:4037028ba61a 48 __IO uint8_t index_; // 最新の入力信号を示すインデックス
MikamiUitOpen 0:4037028ba61a 49
MikamiUitOpen 0:4037028ba61a 50 // コピー・コンストラクタ,代入演算子の禁止のため
MikamiUitOpen 0:4037028ba61a 51 FirFastSymmetry(const FirFastSymmetry&);
MikamiUitOpen 0:4037028ba61a 52 FirFastSymmetry& operator=(const FirFastSymmetry&);
MikamiUitOpen 0:4037028ba61a 53 };
MikamiUitOpen 0:4037028ba61a 54 }
MikamiUitOpen 0:4037028ba61a 55 #endif // FIR_DIRECT_FAST_SYMMETRY_HPP