Demo program of FrqRespDrawer class to draw frequency response for digital filter. ディジタルフィルタの周波数特性を,周波数軸をログスケールで描画するための FrqRespDrawer クラスの使用例.

Dependencies:   BSP_DISCO_F746NG F746_GUI FrequencyResponseDrawer LCD_DISCO_F746NG TS_DISCO_F746NG mbed

Committer:
MikamiUitOpen
Date:
Fri Mar 17 01:34:01 2017 +0000
Revision:
4:d15803f401f1
Parent:
3:97a36dafcb94
5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:8fc907d1eb45 1 //-----------------------------------------------------------
MikamiUitOpen 0:8fc907d1eb45 2 // 周波数特性を描画するための FrqRespDrawer クラスの使用例
MikamiUitOpen 0:8fc907d1eb45 3 //
MikamiUitOpen 4:d15803f401f1 4 // 2017/03/17, Copyright (c) 2017 MIKAMI, Naoki
MikamiUitOpen 0:8fc907d1eb45 5 //-----------------------------------------------------------
MikamiUitOpen 0:8fc907d1eb45 6
MikamiUitOpen 0:8fc907d1eb45 7 #include "FrquencyResponseDrawer.hpp"
MikamiUitOpen 0:8fc907d1eb45 8 #include "FIR_FrqResp.hpp"
MikamiUitOpen 0:8fc907d1eb45 9 #include "Diff_FrqResp.hpp"
MikamiUitOpen 0:8fc907d1eb45 10 #include "Biquad_FrqResp.hpp"
MikamiUitOpen 0:8fc907d1eb45 11 #include "Button.hpp"
MikamiUitOpen 0:8fc907d1eb45 12
MikamiUitOpen 0:8fc907d1eb45 13 using namespace Mikami;
MikamiUitOpen 0:8fc907d1eb45 14
MikamiUitOpen 0:8fc907d1eb45 15 int main()
MikamiUitOpen 0:8fc907d1eb45 16 {
MikamiUitOpen 0:8fc907d1eb45 17 Label title(240, 8, "Example of FrequencyResponseDrawer class",
MikamiUitOpen 0:8fc907d1eb45 18 Label::CENTER, Font16, LCD_COLOR_YELLOW);
MikamiUitOpen 0:8fc907d1eb45 19 const uint16_t X0 = 60;
MikamiUitOpen 0:8fc907d1eb45 20 const uint16_t Y0 = 230;
MikamiUitOpen 0:8fc907d1eb45 21 const float DB1 = 3;
MikamiUitOpen 0:8fc907d1eb45 22 const int FS = 20000;
MikamiUitOpen 0:8fc907d1eb45 23
MikamiUitOpen 0:8fc907d1eb45 24 // 周波数特性を描画する対象となるクラスのオブジェクト
MikamiUitOpen 0:8fc907d1eb45 25 // 周波数応答の絶対値このクラスの中でをこのクラスで定義すること
MikamiUitOpen 0:8fc907d1eb45 26 // このクラスは FrequencyResponse クラスを継承する派生クラスとして定義すること
MikamiUitOpen 1:1a44ea75dff6 27 FIR_FrqResp firFrqResp; // 低域通過 FIR フィルタ
MikamiUitOpen 1:1a44ea75dff6 28 Diff_FrqResp diffFrqResp; // 差分器
MikamiUitOpen 1:1a44ea75dff6 29 Biquad_FrqResp biquadFrqResp( // 高域通過 IIR フィルタ
MikamiUitOpen 1:1a44ea75dff6 30 2.647205E-01f, -2.800973E-01f,
MikamiUitOpen 1:1a44ea75dff6 31 3.671389E-01f, -7.241241E-01f, 3.671389E-01f);
MikamiUitOpen 1:1a44ea75dff6 32
MikamiUitOpen 0:8fc907d1eb45 33 // 周波数特性を描画するためのクラス
MikamiUitOpen 0:8fc907d1eb45 34 FrqRespDrawer drawer(X0, 100.0f, 10000.0f, 150, Y0, -60, 0, DB1, 10, FS);
MikamiUitOpen 0:8fc907d1eb45 35
MikamiUitOpen 0:8fc907d1eb45 36 drawer.DrawAxis(); // 目盛線の描画
MikamiUitOpen 0:8fc907d1eb45 37
MikamiUitOpen 0:8fc907d1eb45 38 FrqRespDrawer::AxisX_Char numX[] = // 横軸の目盛値を描画する際に使う構造体の配列
MikamiUitOpen 0:8fc907d1eb45 39 {{ 100, "0.1"}, { 200, "0.2"}, { 500, "0.5"},
MikamiUitOpen 0:8fc907d1eb45 40 { 1000, "1"}, { 2000, "2"}, { 5000, "5"},
MikamiUitOpen 0:8fc907d1eb45 41 {10000, "10"}};
MikamiUitOpen 0:8fc907d1eb45 42 drawer.DrawNumericX(numX, 7, 6, "Frequency [kHz]"); // 横軸の目盛
MikamiUitOpen 0:8fc907d1eb45 43 drawer.DrawNumericY(-24, -6, 20, "%3d"); // 縦軸の目盛は 20 dB 間隔
MikamiUitOpen 0:8fc907d1eb45 44
MikamiUitOpen 0:8fc907d1eb45 45 Button next(420, 230, 60, 40, "NEXT");
MikamiUitOpen 0:8fc907d1eb45 46
MikamiUitOpen 0:8fc907d1eb45 47 drawer.DrawGraph(firFrqResp); // 低域通過 FIR フィルタの周波数特性の描画
MikamiUitOpen 0:8fc907d1eb45 48 while (!next.Touched()) {}
MikamiUitOpen 0:8fc907d1eb45 49 drawer.Erase(1);
MikamiUitOpen 0:8fc907d1eb45 50 wait(0.2f);
MikamiUitOpen 0:8fc907d1eb45 51 drawer.DrawAxis(); // 目盛線の描画
MikamiUitOpen 0:8fc907d1eb45 52 drawer.DrawGraph(diffFrqResp, LCD_COLOR_MAGENTA); // 差分器の周波数特性の描画
MikamiUitOpen 0:8fc907d1eb45 53 while (!next.Touched()) {}
MikamiUitOpen 0:8fc907d1eb45 54 drawer.Erase();
MikamiUitOpen 0:8fc907d1eb45 55 wait(0.2f);
MikamiUitOpen 0:8fc907d1eb45 56 drawer.DrawAxis(); // 目盛線の描画
MikamiUitOpen 0:8fc907d1eb45 57 drawer.DrawGraph(biquadFrqResp, LCD_COLOR_GREEN); // 高域通過 IIR フィルタの周波数特性の描画
MikamiUitOpen 0:8fc907d1eb45 58 while (!next.Touched()) {}
MikamiUitOpen 0:8fc907d1eb45 59 drawer.Erase();
MikamiUitOpen 0:8fc907d1eb45 60 next.Erase();
MikamiUitOpen 0:8fc907d1eb45 61
MikamiUitOpen 0:8fc907d1eb45 62 // 3種類の周波数特性を重ねて表示
MikamiUitOpen 0:8fc907d1eb45 63 drawer.DrawAxis(); // 目盛線の描画
MikamiUitOpen 0:8fc907d1eb45 64 drawer.DrawGraph(firFrqResp); // 低域通過 FIR フィルタ
MikamiUitOpen 0:8fc907d1eb45 65 drawer.DrawGraph(diffFrqResp, LCD_COLOR_MAGENTA); // 差分器
MikamiUitOpen 0:8fc907d1eb45 66 drawer.DrawGraph(biquadFrqResp, LCD_COLOR_GREEN); // 高域通過 IIR フィルタ
MikamiUitOpen 0:8fc907d1eb45 67
MikamiUitOpen 0:8fc907d1eb45 68 while (true) {}
MikamiUitOpen 0:8fc907d1eb45 69 }