CQエレクトロニクス・セミナで使用する遮断周波数可変の LPF/HPF のプログラム

Dependencies:   mbed SerialTxRxIntr DSP_MultirateLinearphase

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers IirVariable.hpp Source File

IirVariable.hpp

00001 //--------------------------------------------------------------
00002 //  可変 IIR フィルタのクラス
00003 //
00004 //  2022/02/21, Copyright (c) 2022 MIKAMI, Naoki
00005 //--------------------------------------------------------------
00006 
00007 #include "IIR_Cascade.hpp"
00008 
00009 #ifndef VARIABLE_IIR_FILTER_HPP
00010 #define VARIABLE_IIR_FILTER_HPP
00011 
00012 namespace Mikami
00013 {
00014     class VariableIir
00015     {
00016     public:
00017         // コンストラクタ
00018         VariableIir() : fPtr2_(&VariableIir::Off)
00019         {   
00020             SetOff();   // 最初は出力 Off       
00021             Validate(); // フィルタ処理有効
00022         }
00023 
00024         // IIR フィルタの実行
00025         float Execute(float xn) { return (this->*fPtr_)((this->*fPtr2_)(xn)); }
00026 
00027         // IIR フィルタの係数を設定する
00028         void SetCoefficients(int order, const Biquad::Coefs ck[], float g0)
00029         {   iirFilter_.SetCoefs(order, ck, g0); }
00030 
00031         // フィルタの遅延器をクリア
00032         void Clear() { iirFilter_.Clear(); }
00033 
00034         // IIR フィルタの処理を有効にする
00035         void Validate() { fPtr_ = &VariableIir::Filtering; }
00036 
00037         // IIR フィルタの処理を無効にする
00038         void Invalidate() { fPtr_ = &VariableIir::Through; }
00039 
00040         // 出力を On にする    
00041         void SetOn() { fPtr2_ = &VariableIir::On; }
00042 
00043         // 出力を Off にする
00044         void SetOff() { fPtr2_ = &VariableIir::Off; }
00045             
00046     private:
00047         IirCascade iirFilter_;
00048 
00049         float (VariableIir::*fPtr_)(float);     // フィルタ処理タの有無
00050         float (VariableIir::*fPtr2_)(float);    // 出力の On/Off
00051         
00052         float Through(float xn) { return xn; }  // そのまま出力
00053         float Filtering(float xn)               // フィルタを実行して出力
00054         {   return iirFilter_.Execute(xn); }
00055         float On(float xn) { return xn; }       // 出力: On
00056         float Off(float xn) { return 0; }       // 出力: Off
00057 
00058         // コピー・コンストラクタ,代入演算子禁止禁止のため
00059         VariableIir(const VariableIir&);
00060         VariableIir& operator=(const VariableIir&);
00061     };
00062 }
00063 #endif  // VARIABLE_IIR_FILTER_HPP