Output the audio signal (*.bin) with filtering by IIR filter in the SD card using onboard CODEC. For *.wav file, F746_SD_WavPlayer and F746_SD_GraphicEqualiser are published on mbed. SD カードのオーディオ信号 (*.bin) を遮断周波数可変の IIR フィルタを通して,ボードに搭載されているCODEC で出力する.*.wav 形式のファイル用には,F746_SD_WavPlayer と F746_SD_GraphicEqualiser を mbed で公開している.
Dependencies: BSP_DISCO_F746NG_patch_fixed F746_GUI LCD_DISCO_F746NG SDFileSystem_Warning_Fixed TS_DISCO_F746NG mbed
MyClasses_Functions/FrquencyResponseDrawer.hpp@4:76aa20fb326a, 2016-04-16 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sat Apr 16 13:53:53 2016 +0000
- Revision:
- 4:76aa20fb326a
- Child:
- 5:4a99dabc9180
4
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 4:76aa20fb326a | 1 | //----------------------------------------------------------- |
MikamiUitOpen | 4:76aa20fb326a | 2 | // FrqRespDrawer class Header |
MikamiUitOpen | 4:76aa20fb326a | 3 | // |
MikamiUitOpen | 4:76aa20fb326a | 4 | // 2016/04/16, Copyright (c) 2016 MIKAMI, Naoki |
MikamiUitOpen | 4:76aa20fb326a | 5 | //----------------------------------------------------------- |
MikamiUitOpen | 4:76aa20fb326a | 6 | |
MikamiUitOpen | 4:76aa20fb326a | 7 | #ifndef F746_FRQ_RESP_DRAWER_HPP |
MikamiUitOpen | 4:76aa20fb326a | 8 | #define F746_FRQ_RESP_DRAWER_HPP |
MikamiUitOpen | 4:76aa20fb326a | 9 | |
MikamiUitOpen | 4:76aa20fb326a | 10 | #include "Label.hpp" |
MikamiUitOpen | 4:76aa20fb326a | 11 | #include "IIR_CascadeFrqResp.hpp" |
MikamiUitOpen | 4:76aa20fb326a | 12 | |
MikamiUitOpen | 4:76aa20fb326a | 13 | namespace Mikami |
MikamiUitOpen | 4:76aa20fb326a | 14 | { |
MikamiUitOpen | 4:76aa20fb326a | 15 | class FrqRespDrawer |
MikamiUitOpen | 4:76aa20fb326a | 16 | { |
MikamiUitOpen | 4:76aa20fb326a | 17 | public: |
MikamiUitOpen | 4:76aa20fb326a | 18 | // Constructor |
MikamiUitOpen | 4:76aa20fb326a | 19 | FrqRespDrawer(uint16_t org, float min, float max, uint16_t dec, |
MikamiUitOpen | 4:76aa20fb326a | 20 | uint16_t orgY, float minDb, float maxDb, uint16_t db10, |
MikamiUitOpen | 4:76aa20fb326a | 21 | float fs, |
MikamiUitOpen | 4:76aa20fb326a | 22 | uint32_t lineColor = 0xFF00B0FF, |
MikamiUitOpen | 4:76aa20fb326a | 23 | uint32_t axisColor = LCD_COLOR_LIGHTGRAY, |
MikamiUitOpen | 4:76aa20fb326a | 24 | uint32_t backColor = GuiBase::ENUM_BACK) |
MikamiUitOpen | 4:76aa20fb326a | 25 | : lcd_(GuiBase::GetLcdPtr()), |
MikamiUitOpen | 4:76aa20fb326a | 26 | ORG_(org), MIN_(min), MAX_(max), DEC_(dec), |
MikamiUitOpen | 4:76aa20fb326a | 27 | ORGY_(orgY), MIN_DB_(minDb), MAX_DB_(maxDb), DB10_(db10), |
MikamiUitOpen | 4:76aa20fb326a | 28 | FS_(fs), |
MikamiUitOpen | 4:76aa20fb326a | 29 | LINE_COLOR_(lineColor), |
MikamiUitOpen | 4:76aa20fb326a | 30 | AXIS_COLOR_(axisColor), |
MikamiUitOpen | 4:76aa20fb326a | 31 | BACK_COLOR_(backColor), |
MikamiUitOpen | 4:76aa20fb326a | 32 | DB1_(db10*0.1f) {} |
MikamiUitOpen | 4:76aa20fb326a | 33 | |
MikamiUitOpen | 4:76aa20fb326a | 34 | // 周波数に対応する x 座標値の取得 |
MikamiUitOpen | 4:76aa20fb326a | 35 | int X(float frq) |
MikamiUitOpen | 4:76aa20fb326a | 36 | { return Round(ORG_ + DEC_*log10f(frq/MIN_)); } |
MikamiUitOpen | 4:76aa20fb326a | 37 | |
MikamiUitOpen | 4:76aa20fb326a | 38 | // x 座標値を周波数に変換 |
MikamiUitOpen | 4:76aa20fb326a | 39 | float PosToFrq(uint16_t x) |
MikamiUitOpen | 4:76aa20fb326a | 40 | { return MIN_*powf(10.0f, (x - ORG_)/(float)DEC_); } |
MikamiUitOpen | 4:76aa20fb326a | 41 | |
MikamiUitOpen | 4:76aa20fb326a | 42 | // 目盛線の描画 |
MikamiUitOpen | 4:76aa20fb326a | 43 | void DrawAxis(); |
MikamiUitOpen | 4:76aa20fb326a | 44 | |
MikamiUitOpen | 4:76aa20fb326a | 45 | // 横軸の目盛値の表示用 |
MikamiUitOpen | 4:76aa20fb326a | 46 | void DrawCharX(uint32_t frq, int offsetY, |
MikamiUitOpen | 4:76aa20fb326a | 47 | const char str[], sFONT &fonts = Font12, |
MikamiUitOpen | 4:76aa20fb326a | 48 | uint32_t textColor = LCD_COLOR_WHITE) |
MikamiUitOpen | 4:76aa20fb326a | 49 | { Label frequency(X(frq), ORGY_+offsetY, str, Label::CENTER); } |
MikamiUitOpen | 4:76aa20fb326a | 50 | |
MikamiUitOpen | 4:76aa20fb326a | 51 | // 縦軸の目盛値の表示 |
MikamiUitOpen | 4:76aa20fb326a | 52 | void DrawNumericY(int offsetX, int offsetY, int count, |
MikamiUitOpen | 4:76aa20fb326a | 53 | uint16_t d_dB, const char fmt[], sFONT &fonts = Font12, |
MikamiUitOpen | 4:76aa20fb326a | 54 | uint32_t textColor = LCD_COLOR_WHITE); |
MikamiUitOpen | 4:76aa20fb326a | 55 | |
MikamiUitOpen | 4:76aa20fb326a | 56 | // 周波数特性のグラフの描画 |
MikamiUitOpen | 4:76aa20fb326a | 57 | void DrawGraph(FrequencyResponse &frqResp); |
MikamiUitOpen | 4:76aa20fb326a | 58 | |
MikamiUitOpen | 4:76aa20fb326a | 59 | // 消去 |
MikamiUitOpen | 4:76aa20fb326a | 60 | void Erase(); |
MikamiUitOpen | 4:76aa20fb326a | 61 | |
MikamiUitOpen | 4:76aa20fb326a | 62 | private: |
MikamiUitOpen | 4:76aa20fb326a | 63 | LCD_DISCO_F746NG *lcd_; |
MikamiUitOpen | 4:76aa20fb326a | 64 | const uint16_t ORG_; // 横軸の目盛の最小値に対応する位置 |
MikamiUitOpen | 4:76aa20fb326a | 65 | const float MIN_; // 横軸の目盛の最小値 |
MikamiUitOpen | 4:76aa20fb326a | 66 | const float MAX_; // 横軸の目盛の最大値 |
MikamiUitOpen | 4:76aa20fb326a | 67 | const uint16_t DEC_; // 周波数の 10 倍に対応する長さ (pixels) |
MikamiUitOpen | 4:76aa20fb326a | 68 | const uint16_t ORGY_; // 縦軸の目盛の最小値に対応する位置 |
MikamiUitOpen | 4:76aa20fb326a | 69 | const float MIN_DB_; // 縦軸の目盛の最小値 [dB] |
MikamiUitOpen | 4:76aa20fb326a | 70 | const float MAX_DB_; // 縦軸の目盛の最大値 [dB] |
MikamiUitOpen | 4:76aa20fb326a | 71 | const uint16_t DB10_; // 10 dB 対応する長さ (pixels) |
MikamiUitOpen | 4:76aa20fb326a | 72 | const float FS_; // 標本化周波数 |
MikamiUitOpen | 4:76aa20fb326a | 73 | const uint32_t LINE_COLOR_; |
MikamiUitOpen | 4:76aa20fb326a | 74 | const uint32_t AXIS_COLOR_; |
MikamiUitOpen | 4:76aa20fb326a | 75 | const uint32_t BACK_COLOR_; |
MikamiUitOpen | 4:76aa20fb326a | 76 | const float DB1_; |
MikamiUitOpen | 4:76aa20fb326a | 77 | |
MikamiUitOpen | 4:76aa20fb326a | 78 | // 丸め |
MikamiUitOpen | 4:76aa20fb326a | 79 | int Round(float x) { return x + 0.5f - (x < 0); } |
MikamiUitOpen | 4:76aa20fb326a | 80 | |
MikamiUitOpen | 4:76aa20fb326a | 81 | // 10 のべき乗かどうかの検査 |
MikamiUitOpen | 4:76aa20fb326a | 82 | bool PowersOf10(float x) |
MikamiUitOpen | 4:76aa20fb326a | 83 | { return fabsf(log10f(x) - Round(log10f(x))) < 0.01f; } |
MikamiUitOpen | 4:76aa20fb326a | 84 | |
MikamiUitOpen | 4:76aa20fb326a | 85 | // disallow copy constructor and assignment operator |
MikamiUitOpen | 4:76aa20fb326a | 86 | FrqRespDrawer(const FrqRespDrawer&); |
MikamiUitOpen | 4:76aa20fb326a | 87 | FrqRespDrawer& operator=(const FrqRespDrawer&); |
MikamiUitOpen | 4:76aa20fb326a | 88 | }; |
MikamiUitOpen | 4:76aa20fb326a | 89 | } |
MikamiUitOpen | 4:76aa20fb326a | 90 | #endif // F746_FRQ_RESP_DRAWER_HPP |