?

Committer:
phungductung
Date:
Tue Jun 04 21:58:08 2019 +0000
Revision:
0:cacfc9e25452
?;

Who changed what in which revision?

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