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

Dependencies:   mbed

Committer:
MikamiUitOpen
Date:
Wed Dec 01 00:53:09 2021 +0000
Revision:
2:63fbcf115b88
Parent:
0:9c28f5905a1a
3

Who changed what in which revision?

UserRevisionLine numberNew 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