IIR Cascade

Dependencies:   DSP_MultirateLinearphase mbed

Committer:
CQpub0Mikami
Date:
Tue Sep 13 07:48:33 2022 +0000
Revision:
0:fd55988037cc
1

Who changed what in which revision?

UserRevisionLine numberNew 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