revised version of F746_SD_GraphicEqualizer
Dependencies: BSP_DISCO_F746NG F746_GUI F746_SAI_IO FrequencyResponseDrawer LCD_DISCO_F746NG SDFileSystem_Warning_Fixed TS_DISCO_F746NG mbed
Fork of F746_SD_GraphicEqualizer by
MyClasses_Functions/GrEqualizerFrqResp.hpp@12:87f6955b5a80, 2016-07-07 (annotated)
- Committer:
- edamame22
- Date:
- Thu Jul 07 05:58:52 2016 +0000
- Revision:
- 12:87f6955b5a80
- Parent:
- 0:e953eb392151
added highlighted line for track selection
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:e953eb392151 | 1 | //----------------------------------------------------------- |
MikamiUitOpen | 0:e953eb392151 | 2 | // グラフィックイコライザで使う IIR フィルタの周波数応答 |
MikamiUitOpen | 0:e953eb392151 | 3 | // Frequency response for graphic equalizer |
MikamiUitOpen | 0:e953eb392151 | 4 | // |
MikamiUitOpen | 0:e953eb392151 | 5 | // 2016/04/27, Copyright (c) 2016 MIKAMI, Naoki |
MikamiUitOpen | 0:e953eb392151 | 6 | //----------------------------------------------------------- |
MikamiUitOpen | 0:e953eb392151 | 7 | |
MikamiUitOpen | 0:e953eb392151 | 8 | #ifndef GRAPHIC_EQUALIZER_FREQUENCY_RESPONSE_HPP |
MikamiUitOpen | 0:e953eb392151 | 9 | #define GRAPHIC_EQUALIZER_FREQUENCY_RESPONSE_HPP |
MikamiUitOpen | 0:e953eb392151 | 10 | |
MikamiUitOpen | 0:e953eb392151 | 11 | #include "FrequancyResponseBase.hpp" |
MikamiUitOpen | 0:e953eb392151 | 12 | #include "BiquadGrEq.hpp" |
MikamiUitOpen | 0:e953eb392151 | 13 | |
MikamiUitOpen | 0:e953eb392151 | 14 | namespace Mikami |
MikamiUitOpen | 0:e953eb392151 | 15 | { |
MikamiUitOpen | 0:e953eb392151 | 16 | class GrEqualizerFrqResp : public FrequencyResponse |
MikamiUitOpen | 0:e953eb392151 | 17 | { |
MikamiUitOpen | 0:e953eb392151 | 18 | public: |
MikamiUitOpen | 0:e953eb392151 | 19 | GrEqualizerFrqResp(int stages) : STAGES_(stages) |
MikamiUitOpen | 0:e953eb392151 | 20 | { ck_ = new BiquadGrEq::Coefs[stages]; } |
MikamiUitOpen | 0:e953eb392151 | 21 | |
MikamiUitOpen | 0:e953eb392151 | 22 | ~GrEqualizerFrqResp() |
MikamiUitOpen | 0:e953eb392151 | 23 | { delete[] ck_; } |
MikamiUitOpen | 0:e953eb392151 | 24 | |
MikamiUitOpen | 0:e953eb392151 | 25 | // フィルタの係数設定 |
MikamiUitOpen | 0:e953eb392151 | 26 | void SetParams(BiquadGrEq::Coefs ck[]) |
MikamiUitOpen | 0:e953eb392151 | 27 | { for (int n=0; n<STAGES_; n++) ck_[n] = ck[n]; } |
MikamiUitOpen | 0:e953eb392151 | 28 | |
MikamiUitOpen | 0:e953eb392151 | 29 | void SetParam(BiquadGrEq::Coefs ck, int n) |
MikamiUitOpen | 0:e953eb392151 | 30 | { ck_[n] = ck; } |
MikamiUitOpen | 0:e953eb392151 | 31 | |
MikamiUitOpen | 0:e953eb392151 | 32 | // 周波数応答の絶対値を返す関数, 引数: z^(-1) |
MikamiUitOpen | 0:e953eb392151 | 33 | virtual float AbsH_z(Complex u) |
MikamiUitOpen | 0:e953eb392151 | 34 | { |
MikamiUitOpen | 0:e953eb392151 | 35 | Complex h = 1; |
MikamiUitOpen | 0:e953eb392151 | 36 | for (int k=0; k<STAGES_; k++) |
MikamiUitOpen | 0:e953eb392151 | 37 | h = h*(ck_[k].b0 + (ck_[k].b1 + ck_[k].b2*u)*u) |
MikamiUitOpen | 0:e953eb392151 | 38 | /((1.0f - (ck_[k].a1 + ck_[k].a2*u)*u)); |
MikamiUitOpen | 0:e953eb392151 | 39 | return abs(h); |
MikamiUitOpen | 0:e953eb392151 | 40 | } |
MikamiUitOpen | 0:e953eb392151 | 41 | |
MikamiUitOpen | 0:e953eb392151 | 42 | private: |
MikamiUitOpen | 0:e953eb392151 | 43 | const int STAGES_; |
MikamiUitOpen | 0:e953eb392151 | 44 | float g0_; |
MikamiUitOpen | 0:e953eb392151 | 45 | BiquadGrEq::Coefs *ck_; |
MikamiUitOpen | 0:e953eb392151 | 46 | |
MikamiUitOpen | 0:e953eb392151 | 47 | // disallow copy constructor and assignment operator |
MikamiUitOpen | 0:e953eb392151 | 48 | GrEqualizerFrqResp(const GrEqualizerFrqResp&); |
MikamiUitOpen | 0:e953eb392151 | 49 | GrEqualizerFrqResp& operator=(const GrEqualizerFrqResp&); |
MikamiUitOpen | 0:e953eb392151 | 50 | }; |
MikamiUitOpen | 0:e953eb392151 | 51 | } |
MikamiUitOpen | 0:e953eb392151 | 52 | #endif // GRAPHIC_EQUALIZER_FREQUENCY_RESPONSE_HPP |