Output the audio signal with filtering by IIR filter in the Quad-SPI flash memory using onboard CODEC. QSPI フラッシュメモリのオーディオデータを遮断周波数可変の IIR フィルタを通してボードに搭載されているCODEC で出力するプログラム.

Dependencies:   BSP_DISCO_F746NG_patch_fixed F746_GUI LCD_DISCO_F746NG QSPI_DISCO_F746NG TS_DISCO_F746NG mbed

Committer:
MikamiUitOpen
Date:
Thu Apr 07 00:32:00 2016 +0000
Revision:
1:a1be09c2533a
Parent:
0:2eb96a7cf9b9
2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:2eb96a7cf9b9 1 //-----------------------------------------------------------
MikamiUitOpen 0:2eb96a7cf9b9 2 // FrqRespDrawer class (Abstract base class) -- Header
MikamiUitOpen 0:2eb96a7cf9b9 3 //
MikamiUitOpen 0:2eb96a7cf9b9 4 // 2016/03/30, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:2eb96a7cf9b9 5 //-----------------------------------------------------------
MikamiUitOpen 0:2eb96a7cf9b9 6
MikamiUitOpen 0:2eb96a7cf9b9 7 #ifndef F746_FRQ_RESP_DRAWER_HPP
MikamiUitOpen 0:2eb96a7cf9b9 8 #define F746_FRQ_RESP_DRAWER_HPP
MikamiUitOpen 0:2eb96a7cf9b9 9
MikamiUitOpen 0:2eb96a7cf9b9 10 #include <complex> // requisite for complex
MikamiUitOpen 0:2eb96a7cf9b9 11 #include "Label.hpp"
MikamiUitOpen 0:2eb96a7cf9b9 12
MikamiUitOpen 0:2eb96a7cf9b9 13 namespace Mikami
MikamiUitOpen 0:2eb96a7cf9b9 14 {
MikamiUitOpen 0:2eb96a7cf9b9 15 typedef complex<float> Complex; // define "Complex"
MikamiUitOpen 0:2eb96a7cf9b9 16
MikamiUitOpen 0:2eb96a7cf9b9 17 class FrqRespDrawer
MikamiUitOpen 0:2eb96a7cf9b9 18 {
MikamiUitOpen 0:2eb96a7cf9b9 19 public:
MikamiUitOpen 0:2eb96a7cf9b9 20 struct Params
MikamiUitOpen 0:2eb96a7cf9b9 21 {
MikamiUitOpen 0:2eb96a7cf9b9 22 const uint16_t ORG; // 横軸の目盛の最小値に対応する位置
MikamiUitOpen 0:2eb96a7cf9b9 23 const float MIN; // 横軸の目盛の最小値
MikamiUitOpen 0:2eb96a7cf9b9 24 const float MAX; // 横軸の目盛の最大値
MikamiUitOpen 0:2eb96a7cf9b9 25 const uint16_t DEC; // 周波数の 10 倍に対応する長さ (pixels)
MikamiUitOpen 0:2eb96a7cf9b9 26 const uint16_t ORGY; // 縦軸の目盛の最小値に対応する位置
MikamiUitOpen 0:2eb96a7cf9b9 27 const float MIN_DB; // 縦軸の目盛の最小値 [dB]
MikamiUitOpen 0:2eb96a7cf9b9 28 const float MAX_DB; // 縦軸の目盛の最大値 [dB]
MikamiUitOpen 0:2eb96a7cf9b9 29 const uint16_t DB10; // 10 dB 対応する長さ (pixels)
MikamiUitOpen 0:2eb96a7cf9b9 30 const float FS; // 標本化周波数
MikamiUitOpen 0:2eb96a7cf9b9 31 const uint32_t LINE_COLOR;
MikamiUitOpen 0:2eb96a7cf9b9 32 const uint32_t AXIS_COLOR;
MikamiUitOpen 0:2eb96a7cf9b9 33 const uint32_t BACK_COLOR;
MikamiUitOpen 0:2eb96a7cf9b9 34
MikamiUitOpen 0:2eb96a7cf9b9 35 Params(uint16_t org, float min, float max, uint16_t dec,
MikamiUitOpen 0:2eb96a7cf9b9 36 uint16_t orgY, float minDb, float maxDb, uint16_t db10,
MikamiUitOpen 0:2eb96a7cf9b9 37 float fs,
MikamiUitOpen 0:2eb96a7cf9b9 38 uint32_t lineColor = 0xFF00B0FF,
MikamiUitOpen 0:2eb96a7cf9b9 39 uint32_t axisColor = LCD_COLOR_LIGHTGRAY,
MikamiUitOpen 0:2eb96a7cf9b9 40 uint32_t backColor = GuiBase::ENUM_BACK)
MikamiUitOpen 0:2eb96a7cf9b9 41 : ORG(org), MIN(min), MAX(max), DEC(dec),
MikamiUitOpen 0:2eb96a7cf9b9 42 ORGY(orgY), MIN_DB(minDb), MAX_DB(maxDb), DB10(db10),
MikamiUitOpen 0:2eb96a7cf9b9 43 FS(fs),
MikamiUitOpen 0:2eb96a7cf9b9 44 LINE_COLOR(lineColor),
MikamiUitOpen 0:2eb96a7cf9b9 45 AXIS_COLOR(axisColor),
MikamiUitOpen 0:2eb96a7cf9b9 46 BACK_COLOR(backColor) {}
MikamiUitOpen 0:2eb96a7cf9b9 47 };
MikamiUitOpen 0:2eb96a7cf9b9 48
MikamiUitOpen 0:2eb96a7cf9b9 49 // Constructor
MikamiUitOpen 0:2eb96a7cf9b9 50 FrqRespDrawer(Params p)
MikamiUitOpen 0:2eb96a7cf9b9 51 : lcd_(GuiBase::GetLcdPtr()), P_(p), DB1_(p.DB10*0.1f) {}
MikamiUitOpen 0:2eb96a7cf9b9 52
MikamiUitOpen 0:2eb96a7cf9b9 53 // 周波数に対応する x 座標値の取得
MikamiUitOpen 0:2eb96a7cf9b9 54 int X(float frq)
MikamiUitOpen 0:2eb96a7cf9b9 55 { return Round(P_.ORG + P_.DEC*log10f(frq/P_.MIN)); }
MikamiUitOpen 0:2eb96a7cf9b9 56
MikamiUitOpen 0:2eb96a7cf9b9 57 // x 座標値を周波数に変換
MikamiUitOpen 0:2eb96a7cf9b9 58 float PosToFrq(uint16_t x)
MikamiUitOpen 0:2eb96a7cf9b9 59 { return P_.MIN*powf(10.0f, (x - P_.ORG)/(float)P_.DEC); }
MikamiUitOpen 0:2eb96a7cf9b9 60
MikamiUitOpen 0:2eb96a7cf9b9 61 // 目盛線の描画
MikamiUitOpen 0:2eb96a7cf9b9 62 void DrawAxis();
MikamiUitOpen 0:2eb96a7cf9b9 63
MikamiUitOpen 0:2eb96a7cf9b9 64 // 横軸の目盛値の表示用
MikamiUitOpen 0:2eb96a7cf9b9 65 void DrawCharX(uint32_t frq, int offsetY,
MikamiUitOpen 0:2eb96a7cf9b9 66 const char str[], sFONT &fonts = Font12,
MikamiUitOpen 0:2eb96a7cf9b9 67 uint32_t textColor = LCD_COLOR_WHITE)
MikamiUitOpen 0:2eb96a7cf9b9 68 { Label frequency(X(frq), P_.ORGY+offsetY, str, Label::CENTER); }
MikamiUitOpen 0:2eb96a7cf9b9 69
MikamiUitOpen 0:2eb96a7cf9b9 70 // 縦軸の目盛値の表示
MikamiUitOpen 0:2eb96a7cf9b9 71 void DrawNumericY(int offsetX, int offsetY, int count,
MikamiUitOpen 0:2eb96a7cf9b9 72 uint16_t d_dB, const char fmt[], sFONT &fonts = Font12,
MikamiUitOpen 0:2eb96a7cf9b9 73 uint32_t textColor = LCD_COLOR_WHITE);
MikamiUitOpen 0:2eb96a7cf9b9 74
MikamiUitOpen 0:2eb96a7cf9b9 75 // 周波数特性のグラフの描画
MikamiUitOpen 0:2eb96a7cf9b9 76 void DrawGraph();
MikamiUitOpen 0:2eb96a7cf9b9 77
MikamiUitOpen 0:2eb96a7cf9b9 78 // 周波数応答の絶対値を返す関数, 引数: z^(-1)
MikamiUitOpen 0:2eb96a7cf9b9 79 virtual float AbsH_z(Complex u) = 0;
MikamiUitOpen 0:2eb96a7cf9b9 80
MikamiUitOpen 0:2eb96a7cf9b9 81 // 消去
MikamiUitOpen 0:2eb96a7cf9b9 82 void Erase();
MikamiUitOpen 0:2eb96a7cf9b9 83
MikamiUitOpen 0:2eb96a7cf9b9 84 private:
MikamiUitOpen 0:2eb96a7cf9b9 85 LCD_DISCO_F746NG *lcd_;
MikamiUitOpen 0:2eb96a7cf9b9 86 const Params P_;
MikamiUitOpen 0:2eb96a7cf9b9 87 const float DB1_;
MikamiUitOpen 0:2eb96a7cf9b9 88
MikamiUitOpen 0:2eb96a7cf9b9 89 // 丸め
MikamiUitOpen 0:2eb96a7cf9b9 90 int Round(float x) { return x + 0.5f - (x < 0); }
MikamiUitOpen 0:2eb96a7cf9b9 91
MikamiUitOpen 0:2eb96a7cf9b9 92 // 10 のべき乗かどうかの検査
MikamiUitOpen 0:2eb96a7cf9b9 93 bool PowersOf10(float x)
MikamiUitOpen 0:2eb96a7cf9b9 94 { return fabsf(log10f(x) - Round(log10f(x))) < 0.01f; }
MikamiUitOpen 0:2eb96a7cf9b9 95
MikamiUitOpen 0:2eb96a7cf9b9 96 // disallow copy constructor and assignment operator
MikamiUitOpen 0:2eb96a7cf9b9 97 FrqRespDrawer(const FrqRespDrawer&);
MikamiUitOpen 0:2eb96a7cf9b9 98 FrqRespDrawer& operator=(const FrqRespDrawer&);
MikamiUitOpen 0:2eb96a7cf9b9 99 };
MikamiUitOpen 0:2eb96a7cf9b9 100 }
MikamiUitOpen 0:2eb96a7cf9b9 101 #endif // F746_FRQ_RESP_DRAWER_HPP