CQエレクトロニクス・セミナで使用する遮断周波数可変の LPF/HPF のプログラム
Dependencies: mbed SerialTxRxIntr DSP_MultirateLinearphase
IirVariable/IirVariable.hpp@2:3955cb401851, 2022-03-30 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Wed Mar 30 05:00:14 2022 +0000
- Revision:
- 2:3955cb401851
- Parent:
- 0:f1e2a221b526
3
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:f1e2a221b526 | 1 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:f1e2a221b526 | 2 | // 可変 IIR フィルタのクラス |
MikamiUitOpen | 0:f1e2a221b526 | 3 | // |
MikamiUitOpen | 0:f1e2a221b526 | 4 | // 2022/02/21, Copyright (c) 2022 MIKAMI, Naoki |
MikamiUitOpen | 0:f1e2a221b526 | 5 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:f1e2a221b526 | 6 | |
MikamiUitOpen | 0:f1e2a221b526 | 7 | #include "IIR_Cascade.hpp" |
MikamiUitOpen | 0:f1e2a221b526 | 8 | |
MikamiUitOpen | 0:f1e2a221b526 | 9 | #ifndef VARIABLE_IIR_FILTER_HPP |
MikamiUitOpen | 0:f1e2a221b526 | 10 | #define VARIABLE_IIR_FILTER_HPP |
MikamiUitOpen | 0:f1e2a221b526 | 11 | |
MikamiUitOpen | 0:f1e2a221b526 | 12 | namespace Mikami |
MikamiUitOpen | 0:f1e2a221b526 | 13 | { |
MikamiUitOpen | 0:f1e2a221b526 | 14 | class VariableIir |
MikamiUitOpen | 0:f1e2a221b526 | 15 | { |
MikamiUitOpen | 0:f1e2a221b526 | 16 | public: |
MikamiUitOpen | 0:f1e2a221b526 | 17 | // コンストラクタ |
MikamiUitOpen | 0:f1e2a221b526 | 18 | VariableIir() : fPtr2_(&VariableIir::Off) |
MikamiUitOpen | 0:f1e2a221b526 | 19 | { |
MikamiUitOpen | 0:f1e2a221b526 | 20 | SetOff(); // 最初は出力 Off |
MikamiUitOpen | 0:f1e2a221b526 | 21 | Validate(); // フィルタ処理有効 |
MikamiUitOpen | 0:f1e2a221b526 | 22 | } |
MikamiUitOpen | 0:f1e2a221b526 | 23 | |
MikamiUitOpen | 0:f1e2a221b526 | 24 | // IIR フィルタの実行 |
MikamiUitOpen | 0:f1e2a221b526 | 25 | float Execute(float xn) { return (this->*fPtr_)((this->*fPtr2_)(xn)); } |
MikamiUitOpen | 0:f1e2a221b526 | 26 | |
MikamiUitOpen | 0:f1e2a221b526 | 27 | // IIR フィルタの係数を設定する |
MikamiUitOpen | 0:f1e2a221b526 | 28 | void SetCoefficients(int order, const Biquad::Coefs ck[], float g0) |
MikamiUitOpen | 0:f1e2a221b526 | 29 | { iirFilter_.SetCoefs(order, ck, g0); } |
MikamiUitOpen | 0:f1e2a221b526 | 30 | |
MikamiUitOpen | 0:f1e2a221b526 | 31 | // フィルタの遅延器をクリア |
MikamiUitOpen | 0:f1e2a221b526 | 32 | void Clear() { iirFilter_.Clear(); } |
MikamiUitOpen | 0:f1e2a221b526 | 33 | |
MikamiUitOpen | 0:f1e2a221b526 | 34 | // IIR フィルタの処理を有効にする |
MikamiUitOpen | 0:f1e2a221b526 | 35 | void Validate() { fPtr_ = &VariableIir::Filtering; } |
MikamiUitOpen | 0:f1e2a221b526 | 36 | |
MikamiUitOpen | 0:f1e2a221b526 | 37 | // IIR フィルタの処理を無効にする |
MikamiUitOpen | 0:f1e2a221b526 | 38 | void Invalidate() { fPtr_ = &VariableIir::Through; } |
MikamiUitOpen | 0:f1e2a221b526 | 39 | |
MikamiUitOpen | 0:f1e2a221b526 | 40 | // 出力を On にする |
MikamiUitOpen | 0:f1e2a221b526 | 41 | void SetOn() { fPtr2_ = &VariableIir::On; } |
MikamiUitOpen | 0:f1e2a221b526 | 42 | |
MikamiUitOpen | 0:f1e2a221b526 | 43 | // 出力を Off にする |
MikamiUitOpen | 0:f1e2a221b526 | 44 | void SetOff() { fPtr2_ = &VariableIir::Off; } |
MikamiUitOpen | 0:f1e2a221b526 | 45 | |
MikamiUitOpen | 0:f1e2a221b526 | 46 | private: |
MikamiUitOpen | 0:f1e2a221b526 | 47 | IirCascade iirFilter_; |
MikamiUitOpen | 0:f1e2a221b526 | 48 | |
MikamiUitOpen | 0:f1e2a221b526 | 49 | float (VariableIir::*fPtr_)(float); // フィルタ処理タの有無 |
MikamiUitOpen | 0:f1e2a221b526 | 50 | float (VariableIir::*fPtr2_)(float); // 出力の On/Off |
MikamiUitOpen | 0:f1e2a221b526 | 51 | |
MikamiUitOpen | 0:f1e2a221b526 | 52 | float Through(float xn) { return xn; } // そのまま出力 |
MikamiUitOpen | 0:f1e2a221b526 | 53 | float Filtering(float xn) // フィルタを実行して出力 |
MikamiUitOpen | 0:f1e2a221b526 | 54 | { return iirFilter_.Execute(xn); } |
MikamiUitOpen | 0:f1e2a221b526 | 55 | float On(float xn) { return xn; } // 出力: On |
MikamiUitOpen | 0:f1e2a221b526 | 56 | float Off(float xn) { return 0; } // 出力: Off |
MikamiUitOpen | 0:f1e2a221b526 | 57 | |
MikamiUitOpen | 0:f1e2a221b526 | 58 | // コピー・コンストラクタ,代入演算子禁止禁止のため |
MikamiUitOpen | 0:f1e2a221b526 | 59 | VariableIir(const VariableIir&); |
MikamiUitOpen | 0:f1e2a221b526 | 60 | VariableIir& operator=(const VariableIir&); |
MikamiUitOpen | 0:f1e2a221b526 | 61 | }; |
MikamiUitOpen | 0:f1e2a221b526 | 62 | } |
MikamiUitOpen | 0:f1e2a221b526 | 63 | #endif // VARIABLE_IIR_FILTER_HPP |