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
MyClasses_Functions/BiquadFrqRespDrawer.hpp@1:a1be09c2533a, 2016-04-07 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Thu Apr 07 00:32:00 2016 +0000
- Revision:
- 1:a1be09c2533a
- Parent:
- 0:2eb96a7cf9b9
2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:2eb96a7cf9b9 | 1 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:2eb96a7cf9b9 | 2 | // BiquadFrqRespDrawer class (Derived class of FrqRespDrawer) |
MikamiUitOpen | 0:2eb96a7cf9b9 | 3 | // 縦続形 IIR フィルタの周波数特性を描画するためのクラス |
MikamiUitOpen | 0:2eb96a7cf9b9 | 4 | // このクラスは,FrqRespDrawer の派生クラス |
MikamiUitOpen | 0:2eb96a7cf9b9 | 5 | // |
MikamiUitOpen | 0:2eb96a7cf9b9 | 6 | // 2016/03/31, Copyright (c) 2016 MIKAMI, Naoki |
MikamiUitOpen | 0:2eb96a7cf9b9 | 7 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:2eb96a7cf9b9 | 8 | |
MikamiUitOpen | 0:2eb96a7cf9b9 | 9 | #ifndef F746_BILINEAR_FRQ_RESP_DRAWER_HPP |
MikamiUitOpen | 0:2eb96a7cf9b9 | 10 | #define F746_BILINEAR_FRQ_RESP_DRAWER_HPP |
MikamiUitOpen | 0:2eb96a7cf9b9 | 11 | |
MikamiUitOpen | 0:2eb96a7cf9b9 | 12 | #include "Biquad.hpp" |
MikamiUitOpen | 0:2eb96a7cf9b9 | 13 | #include "FrquencyResponseDrawer.hpp" |
MikamiUitOpen | 0:2eb96a7cf9b9 | 14 | |
MikamiUitOpen | 0:2eb96a7cf9b9 | 15 | namespace Mikami |
MikamiUitOpen | 0:2eb96a7cf9b9 | 16 | { |
MikamiUitOpen | 0:2eb96a7cf9b9 | 17 | class BiquadFrqRespDrawer : public FrqRespDrawer |
MikamiUitOpen | 0:2eb96a7cf9b9 | 18 | { |
MikamiUitOpen | 0:2eb96a7cf9b9 | 19 | public: |
MikamiUitOpen | 0:2eb96a7cf9b9 | 20 | BiquadFrqRespDrawer(FrqRespDrawer::Params p) |
MikamiUitOpen | 0:2eb96a7cf9b9 | 21 | : FrqRespDrawer(p) {} |
MikamiUitOpen | 0:2eb96a7cf9b9 | 22 | |
MikamiUitOpen | 0:2eb96a7cf9b9 | 23 | // 次数とフィルタの係数設定 |
MikamiUitOpen | 0:2eb96a7cf9b9 | 24 | void SetParams(int order, float g0, Biquad::Coefs ck[]) |
MikamiUitOpen | 0:2eb96a7cf9b9 | 25 | { |
MikamiUitOpen | 0:2eb96a7cf9b9 | 26 | order_ = order; |
MikamiUitOpen | 0:2eb96a7cf9b9 | 27 | g0_ = g0; |
MikamiUitOpen | 0:2eb96a7cf9b9 | 28 | ck_ = ck; |
MikamiUitOpen | 0:2eb96a7cf9b9 | 29 | } |
MikamiUitOpen | 0:2eb96a7cf9b9 | 30 | |
MikamiUitOpen | 0:2eb96a7cf9b9 | 31 | // 周波数応答の絶対値を返す関数, 引数: z^(-1) |
MikamiUitOpen | 0:2eb96a7cf9b9 | 32 | virtual float AbsH_z(Complex u) |
MikamiUitOpen | 0:2eb96a7cf9b9 | 33 | { |
MikamiUitOpen | 0:2eb96a7cf9b9 | 34 | Complex h = g0_; |
MikamiUitOpen | 0:2eb96a7cf9b9 | 35 | for (int k=0; k<order_/2; k++) |
MikamiUitOpen | 0:2eb96a7cf9b9 | 36 | h = h*(1.0f + (ck_[k].b1 + ck_[k].b2*u)*u) |
MikamiUitOpen | 0:2eb96a7cf9b9 | 37 | /((1.0f - (ck_[k].a1 + ck_[k].a2*u)*u)); |
MikamiUitOpen | 0:2eb96a7cf9b9 | 38 | return abs(h); |
MikamiUitOpen | 0:2eb96a7cf9b9 | 39 | } |
MikamiUitOpen | 0:2eb96a7cf9b9 | 40 | |
MikamiUitOpen | 0:2eb96a7cf9b9 | 41 | private: |
MikamiUitOpen | 0:2eb96a7cf9b9 | 42 | int order_; |
MikamiUitOpen | 0:2eb96a7cf9b9 | 43 | float g0_; |
MikamiUitOpen | 0:2eb96a7cf9b9 | 44 | Biquad::Coefs *ck_; |
MikamiUitOpen | 0:2eb96a7cf9b9 | 45 | }; |
MikamiUitOpen | 0:2eb96a7cf9b9 | 46 | } |
MikamiUitOpen | 0:2eb96a7cf9b9 | 47 | #endif // F746_BILINEAR_FRQ_RESP_DRAWER_HPP |