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 不韋 呂

Committer:
MikamiUitOpen
Date:
Wed Apr 27 13:56:39 2016 +0000
Revision:
0:e953eb392151
Child:
2:2a5c93bf729a
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:e953eb392151 1 //------------------------------------------------------------------------------
MikamiUitOpen 0:e953eb392151 2 // イコライザ用フィルタのパラメータを設定し,その周波数特性を描画するためのクラス
MikamiUitOpen 0:e953eb392151 3 //
MikamiUitOpen 0:e953eb392151 4 // 2016/04/27, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:e953eb392151 5 //------------------------------------------------------------------------------
MikamiUitOpen 0:e953eb392151 6
MikamiUitOpen 0:e953eb392151 7 #include "DesignerDrawer.hpp"
MikamiUitOpen 0:e953eb392151 8
MikamiUitOpen 0:e953eb392151 9 namespace Mikami
MikamiUitOpen 0:e953eb392151 10 {
MikamiUitOpen 0:e953eb392151 11 // Constructor
MikamiUitOpen 0:e953eb392151 12 DesignerDrawer::DesignerDrawer(uint16_t x0, uint16_t y0,
MikamiUitOpen 0:e953eb392151 13 int stages, float f0, int fs, uint16_t db1)
MikamiUitOpen 0:e953eb392151 14 : lcd_(GuiBase::GetLcdPtr()), ts_(GuiBase::GetTsPtr()),
MikamiUitOpen 0:e953eb392151 15 X0_(x0), Y0_(y0), STAGES_(stages), DB1_(db1), Q_VAL_(1.5f)
MikamiUitOpen 0:e953eb392151 16 {
MikamiUitOpen 0:e953eb392151 17 drawerObj_ = new FrqRespDrawer(x0, 50.0f, 20000.0f, 142,
MikamiUitOpen 0:e953eb392151 18 y0, -12, 12, db1, 3, fs);
MikamiUitOpen 0:e953eb392151 19
MikamiUitOpen 0:e953eb392151 20 calculator_ = new GrEqParamsCalculator(fs);
MikamiUitOpen 0:e953eb392151 21 f0_ = new float[STAGES_];
MikamiUitOpen 0:e953eb392151 22 for (int n=0; n<STAGES_; n++)
MikamiUitOpen 0:e953eb392151 23 f0_[n] = f0*powf(2, n);
MikamiUitOpen 0:e953eb392151 24
MikamiUitOpen 0:e953eb392151 25 ck_ = new BiquadGrEq::Coefs[STAGES_];
MikamiUitOpen 0:e953eb392151 26 Flatten();
MikamiUitOpen 0:e953eb392151 27 frqResp_ = new GrEqualizerFrqResp(STAGES_);
MikamiUitOpen 0:e953eb392151 28 frqResp_->SetParams(ck_);
MikamiUitOpen 0:e953eb392151 29
MikamiUitOpen 0:e953eb392151 30 // 周波数特性の描画
MikamiUitOpen 0:e953eb392151 31 DrawResponse();
MikamiUitOpen 0:e953eb392151 32 }
MikamiUitOpen 0:e953eb392151 33
MikamiUitOpen 0:e953eb392151 34 DesignerDrawer::~DesignerDrawer()
MikamiUitOpen 0:e953eb392151 35 {
MikamiUitOpen 0:e953eb392151 36 delete[] ck_;
MikamiUitOpen 0:e953eb392151 37 delete[] f0_;
MikamiUitOpen 0:e953eb392151 38 delete calculator_;
MikamiUitOpen 0:e953eb392151 39 delete drawerObj_;
MikamiUitOpen 0:e953eb392151 40 }
MikamiUitOpen 0:e953eb392151 41
MikamiUitOpen 0:e953eb392151 42 // 周波数特性の描画
MikamiUitOpen 0:e953eb392151 43 void DesignerDrawer::DrawResponse()
MikamiUitOpen 0:e953eb392151 44 {
MikamiUitOpen 0:e953eb392151 45 drawerObj_->DrawAxis(); // 目盛線の描画
MikamiUitOpen 0:e953eb392151 46 FrqRespDrawer::AxisX_Char numX[] = // 横軸の目盛値を描画する際に使う構造体の配列
MikamiUitOpen 0:e953eb392151 47 {{ 50, "50"}, { 100, "100"}, { 200, "200"}, { 500, "500"}, { 1000, "1k"},
MikamiUitOpen 0:e953eb392151 48 { 2000, "2k"}, { 5000, "5k"}, {10000, "10k"}, {20000, "20k"}};
MikamiUitOpen 0:e953eb392151 49 drawerObj_->DrawNumericX(numX, 9, 6, "Frequency [Hz]"); // 横軸の目盛
MikamiUitOpen 0:e953eb392151 50 drawerObj_->DrawNumericY(-24, -6, 6, "%3d"); // 縦軸の目盛値は 6 dB 間隔
MikamiUitOpen 0:e953eb392151 51 drawerObj_->DrawGraph(frqResp_); // 周波数特性のカーブの描画
MikamiUitOpen 0:e953eb392151 52 }
MikamiUitOpen 0:e953eb392151 53
MikamiUitOpen 0:e953eb392151 54 // 特定のバンドのイコライザ用フィルタのパラメータの設定と周波数特性の再描画
MikamiUitOpen 0:e953eb392151 55 void DesignerDrawer::DesignAndRedraw(float gainDb, int n)
MikamiUitOpen 0:e953eb392151 56 {
MikamiUitOpen 0:e953eb392151 57 ck_[n] = calculator_->Execute(f0_[n], gainDb, Q_VAL_);
MikamiUitOpen 0:e953eb392151 58 frqResp_->SetParam(ck_[n], n);
MikamiUitOpen 0:e953eb392151 59 drawerObj_->Erase();
MikamiUitOpen 0:e953eb392151 60 drawerObj_->DrawAxis(); // 目盛線の描画
MikamiUitOpen 0:e953eb392151 61 drawerObj_->DrawGraph(frqResp_); // 周波数特性のグラフのカーブを描画する
MikamiUitOpen 0:e953eb392151 62 }
MikamiUitOpen 0:e953eb392151 63
MikamiUitOpen 0:e953eb392151 64 // 周波数特性をフラットにし,その周波数特性を再描画
MikamiUitOpen 0:e953eb392151 65 void DesignerDrawer::DesignAndRedraw()
MikamiUitOpen 0:e953eb392151 66 {
MikamiUitOpen 0:e953eb392151 67 Flatten();
MikamiUitOpen 0:e953eb392151 68 frqResp_->SetParams(ck_);
MikamiUitOpen 0:e953eb392151 69 drawerObj_->Erase();
MikamiUitOpen 0:e953eb392151 70 drawerObj_->DrawAxis(); // 目盛線の描画
MikamiUitOpen 0:e953eb392151 71 drawerObj_->DrawGraph(frqResp_); // 周波数特性のグラフのカーブを描画する
MikamiUitOpen 0:e953eb392151 72 }
MikamiUitOpen 0:e953eb392151 73
MikamiUitOpen 0:e953eb392151 74 // イコライザ用フィルタの周波数特性をフラットにする
MikamiUitOpen 0:e953eb392151 75 void DesignerDrawer::Flatten()
MikamiUitOpen 0:e953eb392151 76 {
MikamiUitOpen 0:e953eb392151 77 for (int n=0; n<STAGES_; n++)
MikamiUitOpen 0:e953eb392151 78 ck_[n] = calculator_->Execute(f0_[n], 0, Q_VAL_);
MikamiUitOpen 0:e953eb392151 79 }
MikamiUitOpen 0:e953eb392151 80 }
MikamiUitOpen 0:e953eb392151 81