CQ出版社セミナ,2021/12/07開催「実習・C++言語によるArmマイコンのプログラミング」で使うプログラム.
Dependencies: Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real
IIR_Filter/IIR_Cascade.hpp@0:a80f730d32a8, 2020-01-15 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Wed Jan 15 12:43:11 2020 +0000
- Revision:
- 0:a80f730d32a8
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:a80f730d32a8 | 1 | //--------------------------------------------------- |
MikamiUitOpen | 0:a80f730d32a8 | 2 | // 縦続形 IIR フィルタ |
MikamiUitOpen | 0:a80f730d32a8 | 3 | // |
MikamiUitOpen | 0:a80f730d32a8 | 4 | // 2019/11/12, Copyright (c) 2019 MIKAMI, Naoki |
MikamiUitOpen | 0:a80f730d32a8 | 5 | //--------------------------------------------------- |
MikamiUitOpen | 0:a80f730d32a8 | 6 | |
MikamiUitOpen | 0:a80f730d32a8 | 7 | #ifndef IIR_CASCADE_HPP |
MikamiUitOpen | 0:a80f730d32a8 | 8 | #define IIR_CASCADE_HPP |
MikamiUitOpen | 0:a80f730d32a8 | 9 | |
MikamiUitOpen | 0:a80f730d32a8 | 10 | #include "Biquad.hpp" |
MikamiUitOpen | 0:a80f730d32a8 | 11 | #include "Array.hpp" // Array クラスが定義されている |
MikamiUitOpen | 0:a80f730d32a8 | 12 | using namespace Mikami; |
MikamiUitOpen | 0:a80f730d32a8 | 13 | |
MikamiUitOpen | 0:a80f730d32a8 | 14 | class IirCascade |
MikamiUitOpen | 0:a80f730d32a8 | 15 | { |
MikamiUitOpen | 0:a80f730d32a8 | 16 | public: |
MikamiUitOpen | 0:a80f730d32a8 | 17 | // コンストラクタ |
MikamiUitOpen | 0:a80f730d32a8 | 18 | IirCascade(int order, const Biquad hk[], float g0) |
MikamiUitOpen | 0:a80f730d32a8 | 19 | : ORDER2_((order+1)/2), G0_(g0), hn_((order+1)/2, hk) {} |
MikamiUitOpen | 0:a80f730d32a8 | 20 | |
MikamiUitOpen | 0:a80f730d32a8 | 21 | // フィルタ処理を実行する |
MikamiUitOpen | 0:a80f730d32a8 | 22 | float Execute(float xn) |
MikamiUitOpen | 0:a80f730d32a8 | 23 | { |
MikamiUitOpen | 0:a80f730d32a8 | 24 | float yn = G0_*xn; |
MikamiUitOpen | 0:a80f730d32a8 | 25 | for (int k=0; k<ORDER2_; k++) yn = hn_[k].Execute(yn); |
MikamiUitOpen | 0:a80f730d32a8 | 26 | return yn; |
MikamiUitOpen | 0:a80f730d32a8 | 27 | } |
MikamiUitOpen | 0:a80f730d32a8 | 28 | |
MikamiUitOpen | 0:a80f730d32a8 | 29 | private: |
MikamiUitOpen | 0:a80f730d32a8 | 30 | const int ORDER2_; // 次数/2,ただし次数が奇数の場合は(次数+1)/2 |
MikamiUitOpen | 0:a80f730d32a8 | 31 | const float G0_; // 利得定数 |
MikamiUitOpen | 0:a80f730d32a8 | 32 | Array<Biquad> hn_; // Biquad クラスのオブジェクトの配列 |
MikamiUitOpen | 0:a80f730d32a8 | 33 | |
MikamiUitOpen | 0:a80f730d32a8 | 34 | // コピー・コンストラクタおよび代入演算子の禁止のため |
MikamiUitOpen | 0:a80f730d32a8 | 35 | IirCascade(const IirCascade& ); |
MikamiUitOpen | 0:a80f730d32a8 | 36 | IirCascade& operator=(const IirCascade& ); |
MikamiUitOpen | 0:a80f730d32a8 | 37 | }; |
MikamiUitOpen | 0:a80f730d32a8 | 38 | #endif // IIR_CASCADE_HPP |
MikamiUitOpen | 0:a80f730d32a8 | 39 |