不韋 呂
/
SDR_AM_Rx_CIC
AM中波放送用SDR.CICフィルタのみを使用.CQ出版社「トランジスタ技術」誌,2021年4月号に掲載
Embed:
(wiki syntax)
Show/hide line numbers
Cic3Stage.hpp
00001 //------------------------------------------------------------- 00002 // ダウンサンプリングで使う3段の CIC フィルタ用クラス 00003 // 00004 // 2020/08/02, Copyright (c) 2020 MIKAMI, Naoki 00005 //------------------------------------------------------------- 00006 00007 #include "mbed.h" 00008 00009 #ifndef CIC3_FILTER_CLASS_HPP 00010 #define CIC3_FILTER_CLASS_HPP 00011 00012 namespace Mikami 00013 { 00014 class Cic3Stage 00015 { 00016 public: 00017 // コンストラクタ 00018 // rate ダウンサンプリングの率,1/10 にダウンサンプリングする場合は 10 00019 // amp 直交信号発生器の出力の振幅 00020 Cic3Stage(int rate, float amp) 00021 : G0_(1.0f/(amp*rate*rate*rate)), 00022 vn1_(0), vn2_(0), vn3_(0), vn3M1_(0), yn1M1_(0), yn2M1_(0) {} 00023 00024 // 積分器 00025 void Integrate(int16_t xn) 00026 { 00027 vn1_ += xn; // 積分器1段目 00028 vn2_ += vn1_; // 積分器2段目 00029 vn3_ += vn2_; // 積分器3段目 00030 } 00031 00032 // くし形フィルタ 00033 float CombFilter() 00034 { 00035 int32_t yn1 = vn3_ - vn3M1_; // くし形フィルタ1段目 00036 int32_t yn2 = yn1 - yn1M1_; // くし形フィルタ2段目 00037 int32_t yn3 = yn2 - yn2M1_; // くし形フィルタ3段目 00038 00039 vn3M1_ = vn3_; // 現在の値を保存,くし形フィルタ1段目 00040 yn1M1_ = yn1; // 現在の値を保存,くし形フィルタ2段目 00041 yn2M1_ = yn2; // 現在の値を保存,くし形フィルタ3段目 00042 00043 return G0_*yn3; 00044 } 00045 00046 private: 00047 const float G0_; 00048 int32_t vn1_, vn2_, vn3_; // 積分器で使う変数 00049 int32_t vn3M1_, yn1M1_, yn2M1_; // くし形フィルタで使う変数 00050 00051 // コピー・コンストラクタ,代入演算子の禁止のため 00052 Cic3Stage(const Cic3Stage&); 00053 Cic3Stage& operator=(const Cic3Stage&); 00054 }; 00055 } 00056 #endif // CIC3_FILTER_CLASS_HPP
Generated on Fri Jul 22 2022 13:23:28 by 1.7.2