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

Dependencies:   mbed

Committer:
MikamiUitOpen
Date:
Mon Sep 23 07:32:10 2019 +0000
Revision:
1:30d9fb51dec1
Child:
2:4bec6b2be809
2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 1:30d9fb51dec1 1 //-------------------------------------------------------------
MikamiUitOpen 1:30d9fb51dec1 2 // ダウンサンプリングで使う3段の CIC フィルタ用クラス
MikamiUitOpen 1:30d9fb51dec1 3 //
MikamiUitOpen 1:30d9fb51dec1 4 // 2019/04/30, Copyright (c) 2019 MIKAMI, Naoki
MikamiUitOpen 1:30d9fb51dec1 5 //-------------------------------------------------------------
MikamiUitOpen 1:30d9fb51dec1 6
MikamiUitOpen 1:30d9fb51dec1 7 #include "mbed.h"
MikamiUitOpen 1:30d9fb51dec1 8
MikamiUitOpen 1:30d9fb51dec1 9 #ifndef CIC3_FILTER_CLASS_HPP
MikamiUitOpen 1:30d9fb51dec1 10 #define CIC3_FILTER_CLASS_HPP
MikamiUitOpen 1:30d9fb51dec1 11
MikamiUitOpen 1:30d9fb51dec1 12 namespace Mikami
MikamiUitOpen 1:30d9fb51dec1 13 {
MikamiUitOpen 1:30d9fb51dec1 14 class Cic3Stage
MikamiUitOpen 1:30d9fb51dec1 15 {
MikamiUitOpen 1:30d9fb51dec1 16 public:
MikamiUitOpen 1:30d9fb51dec1 17 // コンストラクタ
MikamiUitOpen 1:30d9fb51dec1 18 // rate ダウンサンプリングの率,1/10 にダウンサンプリングする場合は 10
MikamiUitOpen 1:30d9fb51dec1 19 // amp 二相発振器の出力の振幅
MikamiUitOpen 1:30d9fb51dec1 20 Cic3Stage(int rate, float amp)
MikamiUitOpen 1:30d9fb51dec1 21 : G0_(1.0f/(amp*rate*rate*rate)),
MikamiUitOpen 1:30d9fb51dec1 22 vn1_(0), vn2_(0), vn3_(0), vn3M1_(0), yn1M1_(0), yn2M1_(0) {}
MikamiUitOpen 1:30d9fb51dec1 23
MikamiUitOpen 1:30d9fb51dec1 24 // 累算
MikamiUitOpen 1:30d9fb51dec1 25 void Accumulate(int16_t xn)
MikamiUitOpen 1:30d9fb51dec1 26 {
MikamiUitOpen 1:30d9fb51dec1 27 vn1_ += xn; // 累算1段目
MikamiUitOpen 1:30d9fb51dec1 28 vn2_ += vn1_; // 累算2段目
MikamiUitOpen 1:30d9fb51dec1 29 vn3_ += vn2_; // 累算3段目
MikamiUitOpen 1:30d9fb51dec1 30 }
MikamiUitOpen 1:30d9fb51dec1 31
MikamiUitOpen 1:30d9fb51dec1 32 // 差分
MikamiUitOpen 1:30d9fb51dec1 33 float Difference()
MikamiUitOpen 1:30d9fb51dec1 34 {
MikamiUitOpen 1:30d9fb51dec1 35 int32_t yn1 = vn3_ - vn3M1_; // 差分1段目
MikamiUitOpen 1:30d9fb51dec1 36 int32_t yn2 = yn1 - yn1M1_; // 差分2段目
MikamiUitOpen 1:30d9fb51dec1 37 int32_t yn3 = yn2 - yn2M1_; // 差分3段目
MikamiUitOpen 1:30d9fb51dec1 38
MikamiUitOpen 1:30d9fb51dec1 39 vn3M1_ = vn3_; // 現在の値を保存,差分1段目
MikamiUitOpen 1:30d9fb51dec1 40 yn1M1_ = yn1; // 現在の値を保存,差分2段目
MikamiUitOpen 1:30d9fb51dec1 41 yn2M1_ = yn2; // 現在の値を保存,差分3段目
MikamiUitOpen 1:30d9fb51dec1 42
MikamiUitOpen 1:30d9fb51dec1 43 return G0_*yn3;
MikamiUitOpen 1:30d9fb51dec1 44 }
MikamiUitOpen 1:30d9fb51dec1 45
MikamiUitOpen 1:30d9fb51dec1 46 private:
MikamiUitOpen 1:30d9fb51dec1 47 const float G0_;
MikamiUitOpen 1:30d9fb51dec1 48 int32_t vn1_, vn2_, vn3_; // 累算で使う変数
MikamiUitOpen 1:30d9fb51dec1 49 int32_t vn3M1_, yn1M1_, yn2M1_; // 差分で使う変数
MikamiUitOpen 1:30d9fb51dec1 50
MikamiUitOpen 1:30d9fb51dec1 51 // コピー・コンストラクタ禁止のため
MikamiUitOpen 1:30d9fb51dec1 52 Cic3Stage(const Cic3Stage&);
MikamiUitOpen 1:30d9fb51dec1 53 // 代入演算子禁止のため
MikamiUitOpen 1:30d9fb51dec1 54 Cic3Stage& operator=(const Cic3Stage&);
MikamiUitOpen 1:30d9fb51dec1 55 };
MikamiUitOpen 1:30d9fb51dec1 56 }
MikamiUitOpen 1:30d9fb51dec1 57 #endif // CIC3_FILTER_CLASS_HPP