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

Dependents:   Demo_IIR_Filter UIT2_VariableIIR_LPF UIT2_VariableIIR_LPFHPF

Committer:
MikamiUitOpen
Date:
Fri Sep 11 08:50:13 2015 +0000
Revision:
2:2533ed0150e7
Parent:
1:69a8b728e8d2
3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:d2f279439aaf 1 //----------------------------------------------------------------
MikamiUitOpen 0:d2f279439aaf 2 // 縦続形 IIR フィルタで使う 1D タイプの 2 次のフィルタ
MikamiUitOpen 0:d2f279439aaf 3 // Biquad filter of 1D type for IIR filter of cascade structure
MikamiUitOpen 1:69a8b728e8d2 4 // このクラスでは,係数は実行中に書き換えられることを想定している
MikamiUitOpen 0:d2f279439aaf 5 //
MikamiUitOpen 0:d2f279439aaf 6 // u[n] = x[n] + a1*u[n-1] + a2*u[n-2]
MikamiUitOpen 0:d2f279439aaf 7 // y[n] = u[n] + b1*u[n-1] + b2*u[n-2]
MikamiUitOpen 0:d2f279439aaf 8 // x[n] : input signal
MikamiUitOpen 0:d2f279439aaf 9 // y[n] : output signal
MikamiUitOpen 0:d2f279439aaf 10 // b0 = 1
MikamiUitOpen 0:d2f279439aaf 11 //
MikamiUitOpen 1:69a8b728e8d2 12 // 2015/09/11, Copyright (c) 2015 MIKAMI, Naoki
MikamiUitOpen 0:d2f279439aaf 13 //----------------------------------------------------------------
MikamiUitOpen 0:d2f279439aaf 14
MikamiUitOpen 0:d2f279439aaf 15 #ifndef IIR_BIQUAD_HPP
MikamiUitOpen 0:d2f279439aaf 16 #define IIR_BIQUAD_HPP
MikamiUitOpen 0:d2f279439aaf 17
MikamiUitOpen 0:d2f279439aaf 18 #include "mbed.h"
MikamiUitOpen 0:d2f279439aaf 19
MikamiUitOpen 0:d2f279439aaf 20 namespace Mikami
MikamiUitOpen 0:d2f279439aaf 21 {
MikamiUitOpen 1:69a8b728e8d2 22 // 2nd order IIR filter
MikamiUitOpen 0:d2f279439aaf 23 class Biquad
MikamiUitOpen 0:d2f279439aaf 24 {
MikamiUitOpen 0:d2f279439aaf 25 public:
MikamiUitOpen 0:d2f279439aaf 26 struct Coefs { float a1, a2, b1, b2; };
MikamiUitOpen 0:d2f279439aaf 27
MikamiUitOpen 1:69a8b728e8d2 28 Biquad() {} // Default constructore
MikamiUitOpen 1:69a8b728e8d2 29
MikamiUitOpen 0:d2f279439aaf 30 Biquad(const Coefs ck)
MikamiUitOpen 1:69a8b728e8d2 31 {
MikamiUitOpen 1:69a8b728e8d2 32 SetCoefs(ck);
MikamiUitOpen 1:69a8b728e8d2 33 Clear();
MikamiUitOpen 1:69a8b728e8d2 34 }
MikamiUitOpen 1:69a8b728e8d2 35
MikamiUitOpen 1:69a8b728e8d2 36 void SetCoefs(const Coefs ck)
MikamiUitOpen 1:69a8b728e8d2 37 {
MikamiUitOpen 1:69a8b728e8d2 38 a1_ = ck.a1;
MikamiUitOpen 1:69a8b728e8d2 39 a2_ = ck.a2;
MikamiUitOpen 1:69a8b728e8d2 40 b1_ = ck.b1;
MikamiUitOpen 1:69a8b728e8d2 41 b2_ = ck.b2;
MikamiUitOpen 1:69a8b728e8d2 42 }
MikamiUitOpen 0:d2f279439aaf 43
MikamiUitOpen 0:d2f279439aaf 44 float Execute(float xn)
MikamiUitOpen 0:d2f279439aaf 45 {
MikamiUitOpen 0:d2f279439aaf 46 float un = xn + a1_*un1_ + a2_*un2_;
MikamiUitOpen 0:d2f279439aaf 47 float yn = un + b1_*un1_ + b2_*un2_;
MikamiUitOpen 1:69a8b728e8d2 48
MikamiUitOpen 0:d2f279439aaf 49 un2_ = un1_;
MikamiUitOpen 0:d2f279439aaf 50 un1_ = un;
MikamiUitOpen 1:69a8b728e8d2 51
MikamiUitOpen 0:d2f279439aaf 52 return yn;
MikamiUitOpen 0:d2f279439aaf 53 }
MikamiUitOpen 1:69a8b728e8d2 54
MikamiUitOpen 0:d2f279439aaf 55 void Clear() { un1_ = un2_ = 0; }
MikamiUitOpen 1:69a8b728e8d2 56
MikamiUitOpen 0:d2f279439aaf 57 private:
MikamiUitOpen 1:69a8b728e8d2 58 float a1_, a2_, b1_, b2_;
MikamiUitOpen 1:69a8b728e8d2 59 float un1_, un2_;
MikamiUitOpen 0:d2f279439aaf 60
MikamiUitOpen 0:d2f279439aaf 61 // disallow copy constructor and assignment operator
MikamiUitOpen 0:d2f279439aaf 62 Biquad(const Biquad&);
MikamiUitOpen 0:d2f279439aaf 63 Biquad& operator = (const Biquad&);
MikamiUitOpen 0:d2f279439aaf 64 };
MikamiUitOpen 0:d2f279439aaf 65 }
MikamiUitOpen 0:d2f279439aaf 66 #endif // IIR_BIQUAD_HPP
MikamiUitOpen 0:d2f279439aaf 67