縦続形 IIR フィルタ用ライブラリ. Library for cascade structure IIR filter.
Dependents: Demo_IIR_Filter UIT2_VariableIIR_LPF UIT2_VariableIIR_LPFHPF
Diff: Biquad.hpp
- Revision:
- 0:d2f279439aaf
- Child:
- 1:69a8b728e8d2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Biquad.hpp Thu Sep 03 00:42:10 2015 +0000 @@ -0,0 +1,55 @@ +//---------------------------------------------------------------- +// 縦続形 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] +// x[n] : input signal +// y[n] : output signal +// b0 = 1 +// +// 2015/09/02, Copyright (c) 2015 MIKAMI, Naoki +//---------------------------------------------------------------- + +#ifndef IIR_BIQUAD_HPP +#define IIR_BIQUAD_HPP + +#include "mbed.h" + +namespace Mikami +{ + class Biquad + { + public: + struct Coefs { float a1, a2, b1, b2; }; + + Biquad() {} // default constructor + + Biquad(const Coefs ck) + : a1_(ck.a1), a2_(ck.a2), b1_(ck.b1), b2_(ck.b2) + { Clear(); } + + 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 + + // disallow copy constructor and assignment operator + Biquad(const Biquad&); + Biquad& operator = (const Biquad&); + }; +} +#endif // IIR_BIQUAD_HPP +