Output the audio signal with filtering by IIR filter in the Quad-SPI flash memory using onboard CODEC. QSPI フラッシュメモリのオーディオデータを遮断周波数可変の IIR フィルタを通してボードに搭載されているCODEC で出力するプログラム.

Dependencies:   BSP_DISCO_F746NG_patch_fixed F746_GUI LCD_DISCO_F746NG QSPI_DISCO_F746NG TS_DISCO_F746NG mbed

Committer:
MikamiUitOpen
Date:
Thu Apr 07 00:32:00 2016 +0000
Revision:
1:a1be09c2533a
Parent:
0:2eb96a7cf9b9
2

Who changed what in which revision?

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