IIR Cascade
Dependencies: DSP_MultirateLinearphase mbed
IirCascade.hpp@0:fd55988037cc, 2022-09-13 (annotated)
- Committer:
- CQpub0Mikami
- Date:
- Tue Sep 13 07:48:33 2022 +0000
- Revision:
- 0:fd55988037cc
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
CQpub0Mikami | 0:fd55988037cc | 1 | //--------------------------------------------------- |
CQpub0Mikami | 0:fd55988037cc | 2 | // 縦続形 IIR フィルタ |
CQpub0Mikami | 0:fd55988037cc | 3 | // |
CQpub0Mikami | 0:fd55988037cc | 4 | // 2022/01/18, Copyright (c) 2022 MIKAMI, Naoki |
CQpub0Mikami | 0:fd55988037cc | 5 | //--------------------------------------------------- |
CQpub0Mikami | 0:fd55988037cc | 6 | |
CQpub0Mikami | 0:fd55988037cc | 7 | #include "Biquad.hpp" |
CQpub0Mikami | 0:fd55988037cc | 8 | #include "Array.hpp" // Array クラスが定義されている |
CQpub0Mikami | 0:fd55988037cc | 9 | using Mikami::Array; |
CQpub0Mikami | 0:fd55988037cc | 10 | |
CQpub0Mikami | 0:fd55988037cc | 11 | #ifndef IIR_CASCADE_HPP |
CQpub0Mikami | 0:fd55988037cc | 12 | #define IIR_CASCADE_HPP |
CQpub0Mikami | 0:fd55988037cc | 13 | |
CQpub0Mikami | 0:fd55988037cc | 14 | class IirCascade |
CQpub0Mikami | 0:fd55988037cc | 15 | { |
CQpub0Mikami | 0:fd55988037cc | 16 | public: |
CQpub0Mikami | 0:fd55988037cc | 17 | // コンストラクタ |
CQpub0Mikami | 0:fd55988037cc | 18 | IirCascade(int order, const Biquad::Coefs ck[], float g0) |
CQpub0Mikami | 0:fd55988037cc | 19 | : ORDER_(order), G0_(g0), hn_((order+1)/2) |
CQpub0Mikami | 0:fd55988037cc | 20 | { |
CQpub0Mikami | 0:fd55988037cc | 21 | for (int k=0; k<(order+1)/2; k++) hn_[k] = Biquad(ck[k]); |
CQpub0Mikami | 0:fd55988037cc | 22 | } |
CQpub0Mikami | 0:fd55988037cc | 23 | |
CQpub0Mikami | 0:fd55988037cc | 24 | // フィルタ処理を実行する |
CQpub0Mikami | 0:fd55988037cc | 25 | float Execute(float xn) |
CQpub0Mikami | 0:fd55988037cc | 26 | { |
CQpub0Mikami | 0:fd55988037cc | 27 | float yn = G0_*xn; |
CQpub0Mikami | 0:fd55988037cc | 28 | for (int k=0; k<(ORDER_+1)/2; k++) yn = hn_[k].Execute(yn); |
CQpub0Mikami | 0:fd55988037cc | 29 | return yn; |
CQpub0Mikami | 0:fd55988037cc | 30 | } |
CQpub0Mikami | 0:fd55988037cc | 31 | |
CQpub0Mikami | 0:fd55988037cc | 32 | private: |
CQpub0Mikami | 0:fd55988037cc | 33 | const int ORDER_; // 次数 |
CQpub0Mikami | 0:fd55988037cc | 34 | const float G0_; // 利得定数 |
CQpub0Mikami | 0:fd55988037cc | 35 | Array<Biquad> hn_; // Biquad クラスのオブジェクトの配列 |
CQpub0Mikami | 0:fd55988037cc | 36 | }; |
CQpub0Mikami | 0:fd55988037cc | 37 | #endif // IIR_CASCADE_HPP |