不韋 呂 / F746_MySoundMachine

Dependencies:   F746_GUI F746_SAI_IO FrequencyResponseDrawer SD_PlayerSkeleton UIT_FFT_Real

Committer:
MikamiUitOpen
Date:
Thu Nov 10 12:47:56 2016 +0000
Revision:
5:0e14065569ea
Parent:
0:224dccbc4edd
6

Who changed what in which revision?

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