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 フィルタの構成要素として使う 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