縦続形 IIR フィルタ用ライブラリ. Library for cascade structure IIR filter.
Dependents: Demo_IIR_Filter UIT2_VariableIIR_LPF UIT2_VariableIIR_LPFHPF
Diff: IIR_Cascade.hpp
- Revision:
- 0:d2f279439aaf
- Child:
- 1:69a8b728e8d2
diff -r 000000000000 -r d2f279439aaf IIR_Cascade.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IIR_Cascade.hpp Thu Sep 03 00:42:10 2015 +0000 @@ -0,0 +1,55 @@ +//---------------------------------------------------------------- +// 縦続形 IIR フィルタ(Biquad クラスを使用) +// Class for IIR filter of cascade structure using Biquad class +// 2015/09/03, Copyright (c) 2015 MIKAMI, Naoki +//---------------------------------------------------------------- + +#ifndef IIR_CASCADE_HPP +#define IIR_CASCADE_HPP + +#include "Biquad.hpp" + +namespace Mikami +{ + template<int order> class IirCascade + { + public: + + // constructor + IirCascade(const Biquad::Coefs ck[], float g0) : g0_(g0) + { + for (int n=0; n<order/2; n++) + hk_[n] = new Biquad(ck[n]); + Clear(); + } + + // destructor + ~IirCascade() + { + for (int n=0; n<order/2; n++) delete hk_[n]; + } + + // clear internal buffer + void Clear() + { + for (int k=0; k<order/2; k++) hk_[k]->Clear(); + } + + // execute filter + float Execute(float xn) + { + float yn = g0_*xn; + for (int k=0; k<order/2; k++) yn = hk_[k]->Execute(yn); + return yn; + } + + private: + Biquad* hk_[order/2]; // biquad IIR filter + const float g0_; // gain factor + + // disallow copy constructor and assignment operator + IirCascade(const IirCascade&); + IirCascade& operator = (const IirCascade&); + }; +} +#endif // IIR_CASCADE_HPP