縦続形 IIR フィルタ用ライブラリ. Library for cascade structure IIR filter.

Dependents:   Demo_IIR_Filter UIT2_VariableIIR_LPF UIT2_VariableIIR_LPFHPF

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?

UserRevisionLine numberNew 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