縦続形 IIR フィルタ用ライブラリ. Library for cascade structure IIR filter.
Dependents: Demo_IIR_Filter UIT2_VariableIIR_LPF UIT2_VariableIIR_LPFHPF
Diff: Biquad.hpp
- Revision:
- 1:69a8b728e8d2
- Parent:
- 0:d2f279439aaf
diff -r d2f279439aaf -r 69a8b728e8d2 Biquad.hpp --- a/Biquad.hpp Thu Sep 03 00:42:10 2015 +0000 +++ b/Biquad.hpp Fri Sep 11 07:34:10 2015 +0000 @@ -1,6 +1,7 @@ //---------------------------------------------------------------- // 縦続形 IIR フィルタで使う 1D タイプの 2 次のフィルタ // Biquad filter of 1D type for IIR filter of cascade structure +// このクラスでは,係数は実行中に書き換えられることを想定している // // u[n] = x[n] + a1*u[n-1] + a2*u[n-2] // y[n] = u[n] + b1*u[n-1] + b2*u[n-2] @@ -8,7 +9,7 @@ // y[n] : output signal // b0 = 1 // -// 2015/09/02, Copyright (c) 2015 MIKAMI, Naoki +// 2015/09/11, Copyright (c) 2015 MIKAMI, Naoki //---------------------------------------------------------------- #ifndef IIR_BIQUAD_HPP @@ -18,33 +19,44 @@ namespace Mikami { + // 2nd order IIR filter class Biquad { public: struct Coefs { float a1, a2, b1, b2; }; - Biquad() {} // default constructor - + Biquad() {} // Default constructore + Biquad(const Coefs ck) - : a1_(ck.a1), a2_(ck.a2), b1_(ck.b1), b2_(ck.b2) - { Clear(); } + { + SetCoefs(ck); + Clear(); + } + + void SetCoefs(const Coefs ck) + { + a1_ = ck.a1; + a2_ = ck.a2; + b1_ = ck.b1; + b2_ = ck.b2; + } float Execute(float xn) { float un = xn + a1_*un1_ + a2_*un2_; float yn = un + b1_*un1_ + b2_*un2_; - + un2_ = un1_; un1_ = un; - + return yn; } - + void Clear() { un1_ = un2_ = 0; } - + private: - float a1_, a2_, b1_, b2_; // coefficients - float un1_, un2_; // buffer for delay + float a1_, a2_, b1_, b2_; + float un1_, un2_; // disallow copy constructor and assignment operator Biquad(const Biquad&);