San Yune / Mbed 2 deprecated Chapter003_TRobot

Dependencies:   F746_GUI Array_Matrix TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG SDFileSystem_Warning_Fixed FrequencyResponseDrawer F746_SAI_IO

Committer:
MikamiUitOpen
Date:
Tue Apr 19 09:46:11 2016 +0000
Revision:
0:04b43b777fae
Child:
2:2478e7a8e8d5
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:04b43b777fae 1 //-----------------------------------------------------------
MikamiUitOpen 0:04b43b777fae 2 // 周波数が対数スケールの周波数特性を描画するクラス
MikamiUitOpen 0:04b43b777fae 3 // FrqRespDrawer class
MikamiUitOpen 0:04b43b777fae 4 //
MikamiUitOpen 0:04b43b777fae 5 // 2016/04/18, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:04b43b777fae 6 //-----------------------------------------------------------
MikamiUitOpen 0:04b43b777fae 7
MikamiUitOpen 0:04b43b777fae 8 #include "FrquencyResponseDrawer.hpp"
MikamiUitOpen 0:04b43b777fae 9
MikamiUitOpen 0:04b43b777fae 10 namespace Mikami
MikamiUitOpen 0:04b43b777fae 11 {
MikamiUitOpen 0:04b43b777fae 12 // 目盛線の描画
MikamiUitOpen 0:04b43b777fae 13 void FrqRespDrawer::DrawAxis()
MikamiUitOpen 0:04b43b777fae 14 {
MikamiUitOpen 0:04b43b777fae 15 uint16_t height = DB1_*(MAX_DB_ - MIN_DB_);
MikamiUitOpen 0:04b43b777fae 16 int logMin = (int)floorf(log10f(MIN_));
MikamiUitOpen 0:04b43b777fae 17 int loop = (int)floorf(log10f(MAX_)) - logMin;
MikamiUitOpen 0:04b43b777fae 18
MikamiUitOpen 0:04b43b777fae 19 lcd_->SetTextColor(AXIS_COLOR_);
MikamiUitOpen 0:04b43b777fae 20 uint16_t y0 = ORGY_ - height;
MikamiUitOpen 0:04b43b777fae 21 lcd_->DrawVLine(X(MIN_), y0, height); // 最小値に対応する線
MikamiUitOpen 0:04b43b777fae 22
MikamiUitOpen 0:04b43b777fae 23 float du = powf(10.0, logMin); // 座標値の増分
MikamiUitOpen 0:04b43b777fae 24 float u1 = (floorf(MIN_/du) + 1.0f)*du; // 最小値に対応する線の次の座標値
MikamiUitOpen 0:04b43b777fae 25
MikamiUitOpen 0:04b43b777fae 26 for (int n=0; n<=loop; n++)
MikamiUitOpen 0:04b43b777fae 27 {
MikamiUitOpen 0:04b43b777fae 28 float uMax = (10.0f*du < MAX_) ? 10.0f*du : MAX_;
MikamiUitOpen 0:04b43b777fae 29 for (float u=u1; u<uMax*0.99f; u+=du)
MikamiUitOpen 0:04b43b777fae 30 lcd_->DrawVLine(X(u), y0, height);
MikamiUitOpen 0:04b43b777fae 31
MikamiUitOpen 0:04b43b777fae 32 du = uMax; // 値の増分を 10 倍する
MikamiUitOpen 0:04b43b777fae 33 u1 = du; // 次の for ループ の最初の値
MikamiUitOpen 0:04b43b777fae 34 }
MikamiUitOpen 0:04b43b777fae 35
MikamiUitOpen 0:04b43b777fae 36 lcd_->DrawVLine(X(MAX_), y0, height); // 最大値に対応する線
MikamiUitOpen 0:04b43b777fae 37
MikamiUitOpen 0:04b43b777fae 38 uint16_t width = X(MAX_) - X(MIN_);
MikamiUitOpen 0:04b43b777fae 39 for (int n=0; n<= (MAX_DB_ - MIN_DB_)/10; n++)
MikamiUitOpen 0:04b43b777fae 40 lcd_->DrawHLine(X(MIN_), ORGY_-DB10_*n, width);
MikamiUitOpen 0:04b43b777fae 41 }
MikamiUitOpen 0:04b43b777fae 42
MikamiUitOpen 0:04b43b777fae 43 // 横軸の目盛値の表示
MikamiUitOpen 0:04b43b777fae 44 void FrqRespDrawer::DrawNumericX(AxisX_Char xChar[], int nDisp, int offsetY,
MikamiUitOpen 0:04b43b777fae 45 string str, sFONT &fonts, uint32_t textColor)
MikamiUitOpen 0:04b43b777fae 46 {
MikamiUitOpen 0:04b43b777fae 47 for (int n=0; n<nDisp; n++)
MikamiUitOpen 0:04b43b777fae 48 Label frq(X(xChar[n].frq), ORGY_+offsetY,
MikamiUitOpen 0:04b43b777fae 49 xChar[n].str, Label::CENTER);
MikamiUitOpen 0:04b43b777fae 50 uint16_t x0 = ORGX_ + (uint16_t)(DEC_*log10f(MAX_/MIN_))/2;
MikamiUitOpen 0:04b43b777fae 51 Label l_frq(x0, ORGY_+20, str, Label::CENTER);
MikamiUitOpen 0:04b43b777fae 52 }
MikamiUitOpen 0:04b43b777fae 53
MikamiUitOpen 0:04b43b777fae 54 // 縦軸の数値の表示
MikamiUitOpen 0:04b43b777fae 55 void FrqRespDrawer::DrawNumericY(int offsetX, int offsetY, int count,
MikamiUitOpen 0:04b43b777fae 56 uint16_t d_dB, const char fmt[], sFONT &fonts,
MikamiUitOpen 0:04b43b777fae 57 uint32_t textColor, string str)
MikamiUitOpen 0:04b43b777fae 58 {
MikamiUitOpen 0:04b43b777fae 59 uint16_t x0 = ORGX_ + offsetX;
MikamiUitOpen 0:04b43b777fae 60 uint16_t y0 = ORGY_ + offsetY;
MikamiUitOpen 0:04b43b777fae 61 for (int n=0; n<count; n++)
MikamiUitOpen 0:04b43b777fae 62 NumericLabel<int> num(x0, y0-n*d_dB*DB1_,
MikamiUitOpen 0:04b43b777fae 63 fmt, (int)(MIN_DB_+d_dB*n));
MikamiUitOpen 0:04b43b777fae 64 Label l_dB(x0, y0-(count-1)*d_dB*DB1_-12, str);
MikamiUitOpen 0:04b43b777fae 65 }
MikamiUitOpen 0:04b43b777fae 66
MikamiUitOpen 0:04b43b777fae 67 // 周波数特性のグラフの描画
MikamiUitOpen 0:04b43b777fae 68 void FrqRespDrawer::DrawGraph(FrequencyResponse &frqResp, uint32_t color)
MikamiUitOpen 0:04b43b777fae 69 {
MikamiUitOpen 0:04b43b777fae 70 lcd_->SetTextColor(color);
MikamiUitOpen 0:04b43b777fae 71 uint16_t width = X(MAX_) - X(MIN_);
MikamiUitOpen 0:04b43b777fae 72 uint16_t x1 = 0;
MikamiUitOpen 0:04b43b777fae 73 uint16_t y1 = 0;
MikamiUitOpen 0:04b43b777fae 74 float pi2FsM = -6.283185f/FS_; // -2*PI*Ts
MikamiUitOpen 0:04b43b777fae 75 for (int n=0; n<=width; n++)
MikamiUitOpen 0:04b43b777fae 76 {
MikamiUitOpen 0:04b43b777fae 77 float frq = PosToFrq(n+ORGX_);
MikamiUitOpen 0:04b43b777fae 78 uint16_t x2 = X(frq);
MikamiUitOpen 0:04b43b777fae 79 float absHz = frqResp.AbsH_z(exp(Complex(0, pi2FsM*frq)));
MikamiUitOpen 0:04b43b777fae 80 float dB = (absHz > 0.001f) ? 20.0f*log10f(absHz) : MIN_DB_;
MikamiUitOpen 0:04b43b777fae 81 uint16_t y2 = ORGY_ - Round((dB - MIN_DB_)*DB1_);
MikamiUitOpen 0:04b43b777fae 82 if (y2 > ORGY_) y2 = ORGY_;
MikamiUitOpen 0:04b43b777fae 83
MikamiUitOpen 0:04b43b777fae 84 if (n != 0) lcd_->DrawLine(x1, y1, x2, y2);
MikamiUitOpen 0:04b43b777fae 85
MikamiUitOpen 0:04b43b777fae 86 x1 = x2;
MikamiUitOpen 0:04b43b777fae 87 y1 = y2;
MikamiUitOpen 0:04b43b777fae 88 }
MikamiUitOpen 0:04b43b777fae 89 lcd_->SetTextColor(AXIS_COLOR_);
MikamiUitOpen 0:04b43b777fae 90 lcd_->DrawHLine(X(MIN_), ORGY_, width);
MikamiUitOpen 0:04b43b777fae 91 }
MikamiUitOpen 0:04b43b777fae 92
MikamiUitOpen 0:04b43b777fae 93 // 消去
MikamiUitOpen 0:04b43b777fae 94 void FrqRespDrawer::Erase()
MikamiUitOpen 0:04b43b777fae 95 {
MikamiUitOpen 0:04b43b777fae 96 lcd_->SetTextColor(BACK_COLOR_);
MikamiUitOpen 0:04b43b777fae 97 uint16_t height = DB1_*(MAX_DB_ - MIN_DB_);
MikamiUitOpen 0:04b43b777fae 98 lcd_->FillRect(ORGX_, ORGY_- height, X(MAX_)-X(MIN_)+1, height+1);
MikamiUitOpen 0:04b43b777fae 99 }
MikamiUitOpen 0:04b43b777fae 100 }
MikamiUitOpen 0:04b43b777fae 101