![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
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:
- edamame22
- Date:
- 2016-07-07
- Revision:
- 12:87f6955b5a80
- Parent:
- 8:12aa05f3cc24
File content as of revision 12:87f6955b5a80:
//------------------------------------------------------------------------------ // イコライザ用フィルタのパラメータを設定し,その周波数特性を描画するためのクラス // // 2016/05/09, Copyright (c) 2016 MIKAMI, Naoki //------------------------------------------------------------------------------ #include "DesignerDrawer.hpp" namespace Mikami { // Constructor DesignerDrawer::DesignerDrawer(uint16_t x0, uint16_t y0, int bands, float f0, int fs, float db1) : lcd_(GuiBase::GetLcdPtr()), ts_(GuiBase::GetTsPtr()), X0_(x0), Y0_(y0), BANDS_(bands), Q_VAL_(1.0f/sqrtf(2.0f)) { drawerObj_ = new FrqRespDrawer(x0, 50.0f, 20000.0f, 142, y0, -18, 18, db1, 6, fs); calculator_ = new GrEqParams(bands, fs); f0_ = new float[bands]; for (int n=0; n<bands; n++) f0_[n] = f0*powf(2, n); ck_ = new BiquadGrEq::Coefs[bands]; for (int n=0; n<bands; n++) ck_[n] = calculator_->Execute(n, f0_[n], 0, Q_VAL_); frqResp_ = new GrEqualizerFrqResp(bands); frqResp_->SetParams(ck_); // 周波数特性の描画 DrawResponse(); } DesignerDrawer::~DesignerDrawer() { delete[] frqResp_; 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::DrawFlat() { for (int n=0; n<BANDS_; n++) ck_[n] = calculator_->Execute(n, f0_[n], 0, Q_VAL_); frqResp_->SetParams(ck_); drawerObj_->Erase(); drawerObj_->DrawAxis(); // 目盛線の描画 drawerObj_->DrawGraph(frqResp_); // 周波数特性のグラフのカーブを描画する } // 特定のバンドのイコライザ用フィルタのパラメータの設定と周波数特性の再描画 void DesignerDrawer::DesignAndRedraw(float gainDb, int n) { ck_[n] = calculator_->Execute(n, f0_[n], gainDb, Q_VAL_); frqResp_->SetParam(ck_[n], n); drawerObj_->Erase(); drawerObj_->DrawAxis(); // 目盛線の描画 drawerObj_->DrawGraph(frqResp_); // 周波数特性のグラフのカーブを描画する } }