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
main.cpp@4:d15803f401f1, 2017-03-17 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Fri Mar 17 01:34:01 2017 +0000
- Revision:
- 4:d15803f401f1
- Parent:
- 3:97a36dafcb94
5
Who changed what in which revision?
User | Revision | Line number | New 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 | } |