縦続形 IIR フィルタ用ライブラリ. Library for cascade structure IIR filter.
Dependents: Demo_IIR_Filter UIT2_VariableIIR_LPF UIT2_VariableIIR_LPFHPF
IIR_Cascade.hpp@1:69a8b728e8d2, 2015-09-11 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Fri Sep 11 07:34:10 2015 +0000
- Revision:
- 1:69a8b728e8d2
- Parent:
- 0:d2f279439aaf
- Child:
- 2:2533ed0150e7
2
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 | 1:69a8b728e8d2 | 10 | #include "mbed.h" |
MikamiUitOpen | 0:d2f279439aaf | 11 | #include "Biquad.hpp" |
MikamiUitOpen | 0:d2f279439aaf | 12 | |
MikamiUitOpen | 0:d2f279439aaf | 13 | namespace Mikami |
MikamiUitOpen | 0:d2f279439aaf | 14 | { |
MikamiUitOpen | 1:69a8b728e8d2 | 15 | // IIR filter -- Cascade structure |
MikamiUitOpen | 0:d2f279439aaf | 16 | template<int order> class IirCascade |
MikamiUitOpen | 0:d2f279439aaf | 17 | { |
MikamiUitOpen | 0:d2f279439aaf | 18 | public: |
MikamiUitOpen | 1:69a8b728e8d2 | 19 | IirCascade() {} |
MikamiUitOpen | 1:69a8b728e8d2 | 20 | IirCascade(float g0, const Biquad::Coefs ck[]) |
MikamiUitOpen | 1:69a8b728e8d2 | 21 | { SetCoefs(g0, ck); } |
MikamiUitOpen | 1:69a8b728e8d2 | 22 | |
MikamiUitOpen | 1:69a8b728e8d2 | 23 | void SetCoefs(float g0, const Biquad::Coefs ck[]) |
MikamiUitOpen | 0:d2f279439aaf | 24 | { |
MikamiUitOpen | 1:69a8b728e8d2 | 25 | g0_ = g0; |
MikamiUitOpen | 1:69a8b728e8d2 | 26 | for (int k=0; k<order/2; k++) |
MikamiUitOpen | 1:69a8b728e8d2 | 27 | hk_[k].SetCoefs(ck[k]); |
MikamiUitOpen | 0:d2f279439aaf | 28 | } |
MikamiUitOpen | 0:d2f279439aaf | 29 | |
MikamiUitOpen | 0:d2f279439aaf | 30 | float Execute(float xn) |
MikamiUitOpen | 0:d2f279439aaf | 31 | { |
MikamiUitOpen | 0:d2f279439aaf | 32 | float yn = g0_*xn; |
MikamiUitOpen | 1:69a8b728e8d2 | 33 | for (int k=0; k<order/2; k++) |
MikamiUitOpen | 1:69a8b728e8d2 | 34 | yn = hk_[k].Execute(yn); |
MikamiUitOpen | 1:69a8b728e8d2 | 35 | |
MikamiUitOpen | 0:d2f279439aaf | 36 | return yn; |
MikamiUitOpen | 0:d2f279439aaf | 37 | } |
MikamiUitOpen | 1:69a8b728e8d2 | 38 | |
MikamiUitOpen | 1:69a8b728e8d2 | 39 | void Clear() |
MikamiUitOpen | 1:69a8b728e8d2 | 40 | { |
MikamiUitOpen | 1:69a8b728e8d2 | 41 | for (int k=0; k<order/2; k++) |
MikamiUitOpen | 1:69a8b728e8d2 | 42 | hk_[k].Clear(); |
MikamiUitOpen | 1:69a8b728e8d2 | 43 | } |
MikamiUitOpen | 0:d2f279439aaf | 44 | private: |
MikamiUitOpen | 1:69a8b728e8d2 | 45 | Biquad hk_[order/2]; // Elements of cascade structure |
MikamiUitOpen | 1:69a8b728e8d2 | 46 | float g0_; // gain factor |
MikamiUitOpen | 0:d2f279439aaf | 47 | |
MikamiUitOpen | 0:d2f279439aaf | 48 | // disallow copy constructor and assignment operator |
MikamiUitOpen | 0:d2f279439aaf | 49 | IirCascade(const IirCascade&); |
MikamiUitOpen | 1:69a8b728e8d2 | 50 | IirCascade& operator=(const IirCascade&); |
MikamiUitOpen | 1:69a8b728e8d2 | 51 | }; |
MikamiUitOpen | 0:d2f279439aaf | 52 | } |
MikamiUitOpen | 1:69a8b728e8d2 | 53 | #endif // IIR_CASCADE_HPP |