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/DesignerDrawer.cpp
- Committer:
- MikamiUitOpen
- Date:
- 2016-04-27
- Revision:
- 0:e953eb392151
- Child:
- 2:2a5c93bf729a
File content as of revision 0:e953eb392151:
//------------------------------------------------------------------------------ // イコライザ用フィルタのパラメータを設定し,その周波数特性を描画するためのクラス // // 2016/04/27, Copyright (c) 2016 MIKAMI, Naoki //------------------------------------------------------------------------------ #include "DesignerDrawer.hpp" namespace Mikami { // Constructor DesignerDrawer::DesignerDrawer(uint16_t x0, uint16_t y0, int stages, float f0, int fs, uint16_t db1) : lcd_(GuiBase::GetLcdPtr()), ts_(GuiBase::GetTsPtr()), X0_(x0), Y0_(y0), STAGES_(stages), DB1_(db1), Q_VAL_(1.5f) { drawerObj_ = new FrqRespDrawer(x0, 50.0f, 20000.0f, 142, y0, -12, 12, db1, 3, fs); calculator_ = new GrEqParamsCalculator(fs); f0_ = new float[STAGES_]; for (int n=0; n<STAGES_; n++) f0_[n] = f0*powf(2, n); ck_ = new BiquadGrEq::Coefs[STAGES_]; Flatten(); frqResp_ = new GrEqualizerFrqResp(STAGES_); frqResp_->SetParams(ck_); // 周波数特性の描画 DrawResponse(); } DesignerDrawer::~DesignerDrawer() { delete[] ck_; delete[] f0_; delete calculator_; delete drawerObj_; } // 周波数特性の描画 void DesignerDrawer::DrawResponse() { drawerObj_->DrawAxis(); // 目盛線の描画 FrqRespDrawer::AxisX_Char numX[] = // 横軸の目盛値を描画する際に使う構造体の配列 {{ 50, "50"}, { 100, "100"}, { 200, "200"}, { 500, "500"}, { 1000, "1k"}, { 2000, "2k"}, { 5000, "5k"}, {10000, "10k"}, {20000, "20k"}}; drawerObj_->DrawNumericX(numX, 9, 6, "Frequency [Hz]"); // 横軸の目盛 drawerObj_->DrawNumericY(-24, -6, 6, "%3d"); // 縦軸の目盛値は 6 dB 間隔 drawerObj_->DrawGraph(frqResp_); // 周波数特性のカーブの描画 } // 特定のバンドのイコライザ用フィルタのパラメータの設定と周波数特性の再描画 void DesignerDrawer::DesignAndRedraw(float gainDb, int n) { ck_[n] = calculator_->Execute(f0_[n], gainDb, Q_VAL_); frqResp_->SetParam(ck_[n], n); drawerObj_->Erase(); drawerObj_->DrawAxis(); // 目盛線の描画 drawerObj_->DrawGraph(frqResp_); // 周波数特性のグラフのカーブを描画する } // 周波数特性をフラットにし,その周波数特性を再描画 void DesignerDrawer::DesignAndRedraw() { Flatten(); frqResp_->SetParams(ck_); drawerObj_->Erase(); drawerObj_->DrawAxis(); // 目盛線の描画 drawerObj_->DrawGraph(frqResp_); // 周波数特性のグラフのカーブを描画する } // イコライザ用フィルタの周波数特性をフラットにする void DesignerDrawer::Flatten() { for (int n=0; n<STAGES_; n++) ck_[n] = calculator_->Execute(f0_[n], 0, Q_VAL_); } }