Output the audio signal with filtering by IIR filter in the *.wav file on the SD card using onboard CODEC. SD カードの *.wav ファイルのオーディオ信号を遮断周波数可変の IIR フィルタを通して,ボードに搭載されているCODEC で出力する.

Dependencies:   BSP_DISCO_F746NG F746_GUI LCD_DISCO_F746NG SDFileSystem_Warning_Fixed TS_DISCO_F746NG mbed FrequencyResponseDrawer F746_SAI_IO Array_Matrix

Committer:
MikamiUitOpen
Date:
Tue Apr 19 09:46:11 2016 +0000
Revision:
0:04b43b777fae
1

Who changed what in which revision?

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