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

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers QuadOscIir.hpp Source File

QuadOscIir.hpp

00001 //--------------------------------------------------------------
00002 //  IIR フィルタを利用する直交信号発生器のクラス
00003 //
00004 //  2020/07/30, Copyright (c) 2020 MIKAMI, Naoki
00005 //--------------------------------------------------------------
00006 
00007 #include "mbed.h"
00008 
00009 #ifndef QUAD_PHASE_OSC_IIR_HPP
00010 #define QUAD_PHASE_OSC_IIR_HPP
00011 
00012 namespace Mikami
00013 {
00014     class QuadOscIir
00015     {
00016     public:
00017         // コンストラクタ
00018         //      f0  周波数,単位:Hz
00019         //      ts  標本化間隔,単位:μs
00020         //      amp 振幅
00021         QuadOscIir(float f0, float ts, float amp = 1)
00022             : TS_(ts*1.0E-6f), A0_(amp) { Set(f0); }
00023 
00024         // sin/cos 発生
00025         void Generate(float &sinX, float &cosX)
00026         {
00027             float vn = a1_*vn1_ - vn2_;
00028             sinX = b1S_*vn1_;
00029             cosX = A0_*vn + b1C_*vn1_;
00030 
00031             vn2_ = vn1_;    // v[n-2] ← v[n-1]
00032             vn1_ = vn;      // v[n-1] ← v[n]
00033         }
00034 
00035         // 出力周波数の設定,周波数を変更し再スタートする場合も使える
00036         //      f0:周波数,単位:Hz
00037         void Set(float f0)
00038         {
00039             static const float PI2 = 6.283185f;
00040             a1_ = 2.0f*cosf(PI2*f0*TS_);
00041             b1S_ = A0_*sinf(PI2*f0*TS_);
00042             b1C_ = -A0_*cosf(PI2*f0*TS_);
00043             vn1_ = 1.0f;
00044             vn2_ = 0.0f;
00045         }
00046 
00047     private:
00048         const float TS_;        // 標本化間隔
00049         const float A0_;        // 振幅
00050         float a1_, b1S_, b1C_;
00051         float vn1_, vn2_;
00052 
00053         // コピー・コンストラクタ,代入演算子の禁止のため
00054         QuadOscIir(const QuadOscIir&);
00055         QuadOscIir& operator=(const QuadOscIir&);
00056     };
00057 }
00058 #endif  // QUAD_PHASE_OSC_IIR_HPP