IIR Cascade
Dependencies: DSP_MultirateLinearphase mbed
Biquad.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 フィルタの構成要素として使う 2 次の IIR フィルタ |
CQpub0Mikami | 0:fd55988037cc | 3 | // b0 は 1 と仮定している |
CQpub0Mikami | 0:fd55988037cc | 4 | // |
CQpub0Mikami | 0:fd55988037cc | 5 | // 2022/01/18, Copyright (c) 2022 MIKAMI, Naoki |
CQpub0Mikami | 0:fd55988037cc | 6 | //-------------------------------------------------------------- |
CQpub0Mikami | 0:fd55988037cc | 7 | |
CQpub0Mikami | 0:fd55988037cc | 8 | #include "mbed.h" |
CQpub0Mikami | 0:fd55988037cc | 9 | |
CQpub0Mikami | 0:fd55988037cc | 10 | #ifndef IIR_BIQUAD_HPP |
CQpub0Mikami | 0:fd55988037cc | 11 | #define IIR_BIQUAD_HPP |
CQpub0Mikami | 0:fd55988037cc | 12 | |
CQpub0Mikami | 0:fd55988037cc | 13 | class Biquad |
CQpub0Mikami | 0:fd55988037cc | 14 | { |
CQpub0Mikami | 0:fd55988037cc | 15 | public: |
CQpub0Mikami | 0:fd55988037cc | 16 | // フィルタの係数に対応する構造体 |
CQpub0Mikami | 0:fd55988037cc | 17 | struct Coefs { float a1, a2, b1, b2; }; |
CQpub0Mikami | 0:fd55988037cc | 18 | |
CQpub0Mikami | 0:fd55988037cc | 19 | // コンストラクタ |
CQpub0Mikami | 0:fd55988037cc | 20 | Biquad(const Coefs ck = (Coefs){0, 0, 0, 0}) |
CQpub0Mikami | 0:fd55988037cc | 21 | : a1_(ck.a1), a2_(ck.a2), b1_(ck.b1), b2_(ck.b2), |
CQpub0Mikami | 0:fd55988037cc | 22 | vn1_(0), vn2_(0) {} |
CQpub0Mikami | 0:fd55988037cc | 23 | |
CQpub0Mikami | 0:fd55988037cc | 24 | // 2 次のフィルタを実行する |
CQpub0Mikami | 0:fd55988037cc | 25 | float Execute(float xn) |
CQpub0Mikami | 0:fd55988037cc | 26 | { |
CQpub0Mikami | 0:fd55988037cc | 27 | float vn = xn + a1_*vn1_ + a2_*vn2_; |
CQpub0Mikami | 0:fd55988037cc | 28 | float yn = vn + b1_*vn1_ + b2_*vn2_; |
CQpub0Mikami | 0:fd55988037cc | 29 | |
CQpub0Mikami | 0:fd55988037cc | 30 | vn2_ = vn1_; |
CQpub0Mikami | 0:fd55988037cc | 31 | vn1_ = vn; |
CQpub0Mikami | 0:fd55988037cc | 32 | |
CQpub0Mikami | 0:fd55988037cc | 33 | return yn; |
CQpub0Mikami | 0:fd55988037cc | 34 | } |
CQpub0Mikami | 0:fd55988037cc | 35 | |
CQpub0Mikami | 0:fd55988037cc | 36 | private: |
CQpub0Mikami | 0:fd55988037cc | 37 | float a1_, a2_, b1_, b2_; // フィルタの係数 |
CQpub0Mikami | 0:fd55988037cc | 38 | float vn1_, vn2_; // 遅延器 |
CQpub0Mikami | 0:fd55988037cc | 39 | }; |
CQpub0Mikami | 0:fd55988037cc | 40 | #endif // IIR_BIQUAD_HPP |