不韋 呂
/
SDR_AM_Rx_CIC_FIR
AM中波放送用SDR.CICフィルタのみを使用.CQ出版社「トランジスタ技術」誌,2021年4月号に掲載
SDR_Library/Cic3Stage.hpp@2:63fbcf115b88, 2021-12-01 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Wed Dec 01 00:53:09 2021 +0000
- Revision:
- 2:63fbcf115b88
- Parent:
- 0:9c28f5905a1a
3
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:9c28f5905a1a | 1 | //------------------------------------------------------------- |
MikamiUitOpen | 0:9c28f5905a1a | 2 | // ダウンサンプリングで使う3段の CIC フィルタ用クラス |
MikamiUitOpen | 0:9c28f5905a1a | 3 | // |
MikamiUitOpen | 0:9c28f5905a1a | 4 | // 2020/08/02, Copyright (c) 2020 MIKAMI, Naoki |
MikamiUitOpen | 0:9c28f5905a1a | 5 | //------------------------------------------------------------- |
MikamiUitOpen | 0:9c28f5905a1a | 6 | |
MikamiUitOpen | 0:9c28f5905a1a | 7 | #include "mbed.h" |
MikamiUitOpen | 0:9c28f5905a1a | 8 | |
MikamiUitOpen | 0:9c28f5905a1a | 9 | #ifndef CIC3_FILTER_CLASS_HPP |
MikamiUitOpen | 0:9c28f5905a1a | 10 | #define CIC3_FILTER_CLASS_HPP |
MikamiUitOpen | 0:9c28f5905a1a | 11 | |
MikamiUitOpen | 0:9c28f5905a1a | 12 | namespace Mikami |
MikamiUitOpen | 0:9c28f5905a1a | 13 | { |
MikamiUitOpen | 0:9c28f5905a1a | 14 | class Cic3Stage |
MikamiUitOpen | 0:9c28f5905a1a | 15 | { |
MikamiUitOpen | 0:9c28f5905a1a | 16 | public: |
MikamiUitOpen | 0:9c28f5905a1a | 17 | // コンストラクタ |
MikamiUitOpen | 0:9c28f5905a1a | 18 | // rate ダウンサンプリングの率,1/10 にダウンサンプリングする場合は 10 |
MikamiUitOpen | 0:9c28f5905a1a | 19 | // amp 直交信号発生器の出力の振幅 |
MikamiUitOpen | 0:9c28f5905a1a | 20 | Cic3Stage(int rate, float amp) |
MikamiUitOpen | 0:9c28f5905a1a | 21 | : G0_(1.0f/(amp*rate*rate*rate)), |
MikamiUitOpen | 0:9c28f5905a1a | 22 | vn1_(0), vn2_(0), vn3_(0), vn3M1_(0), yn1M1_(0), yn2M1_(0) {} |
MikamiUitOpen | 0:9c28f5905a1a | 23 | |
MikamiUitOpen | 0:9c28f5905a1a | 24 | // 積分器 |
MikamiUitOpen | 0:9c28f5905a1a | 25 | void Integrate(int16_t xn) |
MikamiUitOpen | 0:9c28f5905a1a | 26 | { |
MikamiUitOpen | 0:9c28f5905a1a | 27 | vn1_ += xn; // 積分器1段目 |
MikamiUitOpen | 0:9c28f5905a1a | 28 | vn2_ += vn1_; // 積分器2段目 |
MikamiUitOpen | 0:9c28f5905a1a | 29 | vn3_ += vn2_; // 積分器3段目 |
MikamiUitOpen | 0:9c28f5905a1a | 30 | } |
MikamiUitOpen | 0:9c28f5905a1a | 31 | |
MikamiUitOpen | 0:9c28f5905a1a | 32 | // くし形フィルタ |
MikamiUitOpen | 0:9c28f5905a1a | 33 | float CombFilter() |
MikamiUitOpen | 0:9c28f5905a1a | 34 | { |
MikamiUitOpen | 0:9c28f5905a1a | 35 | int32_t yn1 = vn3_ - vn3M1_; // くし形フィルタ1段目 |
MikamiUitOpen | 0:9c28f5905a1a | 36 | int32_t yn2 = yn1 - yn1M1_; // くし形フィルタ2段目 |
MikamiUitOpen | 0:9c28f5905a1a | 37 | int32_t yn3 = yn2 - yn2M1_; // くし形フィルタ3段目 |
MikamiUitOpen | 0:9c28f5905a1a | 38 | |
MikamiUitOpen | 0:9c28f5905a1a | 39 | vn3M1_ = vn3_; // 現在の値を保存,くし形フィルタ1段目 |
MikamiUitOpen | 0:9c28f5905a1a | 40 | yn1M1_ = yn1; // 現在の値を保存,くし形フィルタ2段目 |
MikamiUitOpen | 0:9c28f5905a1a | 41 | yn2M1_ = yn2; // 現在の値を保存,くし形フィルタ3段目 |
MikamiUitOpen | 0:9c28f5905a1a | 42 | |
MikamiUitOpen | 0:9c28f5905a1a | 43 | return G0_*yn3; |
MikamiUitOpen | 0:9c28f5905a1a | 44 | } |
MikamiUitOpen | 0:9c28f5905a1a | 45 | |
MikamiUitOpen | 0:9c28f5905a1a | 46 | private: |
MikamiUitOpen | 0:9c28f5905a1a | 47 | const float G0_; |
MikamiUitOpen | 0:9c28f5905a1a | 48 | int32_t vn1_, vn2_, vn3_; // 積分器で使う変数 |
MikamiUitOpen | 0:9c28f5905a1a | 49 | int32_t vn3M1_, yn1M1_, yn2M1_; // くし形フィルタで使う変数 |
MikamiUitOpen | 0:9c28f5905a1a | 50 | |
MikamiUitOpen | 0:9c28f5905a1a | 51 | // コピー・コンストラクタ,代入演算子の禁止のため |
MikamiUitOpen | 0:9c28f5905a1a | 52 | Cic3Stage(const Cic3Stage&); |
MikamiUitOpen | 0:9c28f5905a1a | 53 | Cic3Stage& operator=(const Cic3Stage&); |
MikamiUitOpen | 0:9c28f5905a1a | 54 | }; |
MikamiUitOpen | 0:9c28f5905a1a | 55 | } |
MikamiUitOpen | 0:9c28f5905a1a | 56 | #endif // CIC3_FILTER_CLASS_HPP |