Integrated program of 4 different kinds of application programs for processing sound signal. 4種類のサウンド信号処理を統合したプログラム.

Dependencies:   F746_GUI F746_SAI_IO FrequencyResponseDrawer SD_PlayerSkeleton UIT_FFT_Real

Committer:
MikamiUitOpen
Date:
Thu Apr 27 23:55:53 2017 +0000
Revision:
16:d60e5187fd31
Parent:
15:fac50dd1de44
17

Who changed what in which revision?

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