縦続形 IIR フィルタ用ライブラリ. Library for cascade structure IIR filter.
Dependents: Demo_IIR_Filter UIT2_VariableIIR_LPF UIT2_VariableIIR_LPFHPF
IIR_Cascade.hpp@2:2533ed0150e7, 2015-09-11 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Fri Sep 11 08:50:13 2015 +0000
- Revision:
- 2:2533ed0150e7
- Parent:
- 1:69a8b728e8d2
3
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:d2f279439aaf | 1 | //---------------------------------------------------------------- |
MikamiUitOpen | 0:d2f279439aaf | 2 | // 縦続形 IIR フィルタ(Biquad クラスを使用) |
MikamiUitOpen | 0:d2f279439aaf | 3 | // Class for IIR filter of cascade structure using Biquad class |
MikamiUitOpen | 1:69a8b728e8d2 | 4 | // 2015/09/11, Copyright (c) 2015 MIKAMI, Naoki |
MikamiUitOpen | 0:d2f279439aaf | 5 | //---------------------------------------------------------------- |
MikamiUitOpen | 0:d2f279439aaf | 6 | |
MikamiUitOpen | 0:d2f279439aaf | 7 | #ifndef IIR_CASCADE_HPP |
MikamiUitOpen | 0:d2f279439aaf | 8 | #define IIR_CASCADE_HPP |
MikamiUitOpen | 0:d2f279439aaf | 9 | |
MikamiUitOpen | 0:d2f279439aaf | 10 | #include "Biquad.hpp" |
MikamiUitOpen | 0:d2f279439aaf | 11 | |
MikamiUitOpen | 0:d2f279439aaf | 12 | namespace Mikami |
MikamiUitOpen | 0:d2f279439aaf | 13 | { |
MikamiUitOpen | 1:69a8b728e8d2 | 14 | // IIR filter -- Cascade structure |
MikamiUitOpen | 0:d2f279439aaf | 15 | template<int order> class IirCascade |
MikamiUitOpen | 0:d2f279439aaf | 16 | { |
MikamiUitOpen | 0:d2f279439aaf | 17 | public: |
MikamiUitOpen | 2:2533ed0150e7 | 18 | IirCascade() : g0_(0) {} |
MikamiUitOpen | 1:69a8b728e8d2 | 19 | IirCascade(float g0, const Biquad::Coefs ck[]) |
MikamiUitOpen | 1:69a8b728e8d2 | 20 | { SetCoefs(g0, ck); } |
MikamiUitOpen | 1:69a8b728e8d2 | 21 | |
MikamiUitOpen | 1:69a8b728e8d2 | 22 | void SetCoefs(float g0, const Biquad::Coefs ck[]) |
MikamiUitOpen | 0:d2f279439aaf | 23 | { |
MikamiUitOpen | 1:69a8b728e8d2 | 24 | g0_ = g0; |
MikamiUitOpen | 1:69a8b728e8d2 | 25 | for (int k=0; k<order/2; k++) |
MikamiUitOpen | 1:69a8b728e8d2 | 26 | hk_[k].SetCoefs(ck[k]); |
MikamiUitOpen | 0:d2f279439aaf | 27 | } |
MikamiUitOpen | 0:d2f279439aaf | 28 | |
MikamiUitOpen | 0:d2f279439aaf | 29 | float Execute(float xn) |
MikamiUitOpen | 0:d2f279439aaf | 30 | { |
MikamiUitOpen | 0:d2f279439aaf | 31 | float yn = g0_*xn; |
MikamiUitOpen | 1:69a8b728e8d2 | 32 | for (int k=0; k<order/2; k++) |
MikamiUitOpen | 1:69a8b728e8d2 | 33 | yn = hk_[k].Execute(yn); |
MikamiUitOpen | 1:69a8b728e8d2 | 34 | |
MikamiUitOpen | 0:d2f279439aaf | 35 | return yn; |
MikamiUitOpen | 0:d2f279439aaf | 36 | } |
MikamiUitOpen | 1:69a8b728e8d2 | 37 | |
MikamiUitOpen | 1:69a8b728e8d2 | 38 | void Clear() |
MikamiUitOpen | 1:69a8b728e8d2 | 39 | { |
MikamiUitOpen | 1:69a8b728e8d2 | 40 | for (int k=0; k<order/2; k++) |
MikamiUitOpen | 1:69a8b728e8d2 | 41 | hk_[k].Clear(); |
MikamiUitOpen | 1:69a8b728e8d2 | 42 | } |
MikamiUitOpen | 0:d2f279439aaf | 43 | private: |
MikamiUitOpen | 1:69a8b728e8d2 | 44 | Biquad hk_[order/2]; // Elements of cascade structure |
MikamiUitOpen | 1:69a8b728e8d2 | 45 | float g0_; // gain factor |
MikamiUitOpen | 0:d2f279439aaf | 46 | |
MikamiUitOpen | 0:d2f279439aaf | 47 | // disallow copy constructor and assignment operator |
MikamiUitOpen | 0:d2f279439aaf | 48 | IirCascade(const IirCascade&); |
MikamiUitOpen | 1:69a8b728e8d2 | 49 | IirCascade& operator=(const IirCascade&); |
MikamiUitOpen | 1:69a8b728e8d2 | 50 | }; |
MikamiUitOpen | 0:d2f279439aaf | 51 | } |
MikamiUitOpen | 1:69a8b728e8d2 | 52 | #endif // IIR_CASCADE_HPP |