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
Diff: MyClasses_Functions/FrquencyResponseDrawer.hpp
- Revision:
- 0:6748e3332e85
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MyClasses_Functions/FrquencyResponseDrawer.hpp Fri Apr 08 13:11:53 2016 +0000 @@ -0,0 +1,101 @@ +//----------------------------------------------------------- +// FrqRespDrawer class (Abstract base class) -- Header +// +// 2016/03/30, Copyright (c) 2016 MIKAMI, Naoki +//----------------------------------------------------------- + +#ifndef F746_FRQ_RESP_DRAWER_HPP +#define F746_FRQ_RESP_DRAWER_HPP + +#include <complex> // requisite for complex +#include "Label.hpp" + +namespace Mikami +{ + typedef complex<float> Complex; // define "Complex" + + class FrqRespDrawer + { + public: + struct Params + { + const uint16_t ORG; // 横軸の目盛の最小値に対応する位置 + const float MIN; // 横軸の目盛の最小値 + const float MAX; // 横軸の目盛の最大値 + const uint16_t DEC; // 周波数の 10 倍に対応する長さ (pixels) + const uint16_t ORGY; // 縦軸の目盛の最小値に対応する位置 + const float MIN_DB; // 縦軸の目盛の最小値 [dB] + const float MAX_DB; // 縦軸の目盛の最大値 [dB] + const uint16_t DB10; // 10 dB 対応する長さ (pixels) + const float FS; // 標本化周波数 + const uint32_t LINE_COLOR; + const uint32_t AXIS_COLOR; + const uint32_t BACK_COLOR; + + Params(uint16_t org, float min, float max, uint16_t dec, + uint16_t orgY, float minDb, float maxDb, uint16_t db10, + float fs, + uint32_t lineColor = 0xFF00B0FF, + uint32_t axisColor = LCD_COLOR_LIGHTGRAY, + uint32_t backColor = GuiBase::ENUM_BACK) + : ORG(org), MIN(min), MAX(max), DEC(dec), + ORGY(orgY), MIN_DB(minDb), MAX_DB(maxDb), DB10(db10), + FS(fs), + LINE_COLOR(lineColor), + AXIS_COLOR(axisColor), + BACK_COLOR(backColor) {} + }; + + // Constructor + FrqRespDrawer(Params p) + : lcd_(GuiBase::GetLcdPtr()), P_(p), DB1_(p.DB10*0.1f) {} + + // 周波数に対応する x 座標値の取得 + int X(float frq) + { return Round(P_.ORG + P_.DEC*log10f(frq/P_.MIN)); } + + // x 座標値を周波数に変換 + float PosToFrq(uint16_t x) + { return P_.MIN*powf(10.0f, (x - P_.ORG)/(float)P_.DEC); } + + // 目盛線の描画 + void DrawAxis(); + + // 横軸の目盛値の表示用 + void DrawCharX(uint32_t frq, int offsetY, + const char str[], sFONT &fonts = Font12, + uint32_t textColor = LCD_COLOR_WHITE) + { Label frequency(X(frq), P_.ORGY+offsetY, str, Label::CENTER); } + + // 縦軸の目盛値の表示 + void DrawNumericY(int offsetX, int offsetY, int count, + uint16_t d_dB, const char fmt[], sFONT &fonts = Font12, + uint32_t textColor = LCD_COLOR_WHITE); + + // 周波数特性のグラフの描画 + void DrawGraph(); + + // 周波数応答の絶対値を返す関数, 引数: z^(-1) + virtual float AbsH_z(Complex u) = 0; + + // 消去 + void Erase(); + + private: + LCD_DISCO_F746NG *lcd_; + const Params P_; + const float DB1_; + + // 丸め + int Round(float x) { return x + 0.5f - (x < 0); } + + // 10 のべき乗かどうかの検査 + bool PowersOf10(float x) + { return fabsf(log10f(x) - Round(log10f(x))) < 0.01f; } + + // disallow copy constructor and assignment operator + FrqRespDrawer(const FrqRespDrawer&); + FrqRespDrawer& operator=(const FrqRespDrawer&); + }; +} +#endif // F746_FRQ_RESP_DRAWER_HPP