Realtime sound spectrogram using FFT or linear prediction. Spectrogram is displayed on the display of PC. リアルタイム・スペクトログラム.解析の手法:FFT,線形予測法.スペクトログラムは PC のディスプレー装置に表示される.PC 側のプログラム:F446_Spectrogram.

Dependencies:   Array_Matrix mbed SerialTxRxIntr F446_AD_DA UIT_FFT_Real

Revision:
2:acc16e3f91ac
Parent:
1:cc596a8d40c9
Child:
3:74a50c14d3fd
--- a/main.cpp	Tue Feb 21 13:25:58 2017 +0000
+++ b/main.cpp	Wed Mar 08 09:46:11 2017 +0000
@@ -10,7 +10,7 @@
 //      ● ボーレート: 460800 baud
 //      ● 受信データの文字列の終了マーク: "\r"
 //
-//  2017/02/21, 三上 直樹
+//  2017/03/08, 三上 直樹
 //---------------------------------------------------------------------
 
 #include "mbed.h"
@@ -49,16 +49,15 @@
 FftAnalyzer *fftAnlz_ = new FftAnalyzer(N_DATA_, N_FFT_);
 // 線形予測法 によるスペクトル解析オブジェクトの生成
 LpcAnalyzer *lpcAnlz_ = new LpcAnalyzer(N_DATA_, N_FFT_, 20);
-AnalyzerBase *analyzer_ = fftAnlz_;
+AnalyzerBase *analyzer_ = fftAnlz_;     // 最初は FFT を使う
 
 Serial pc_(USBTX, USBRX);   // PC との通信で使うオブジェクト
 DigitalOut myLed_(D10, 1);  // LED1 が使えないので D10 を使う
 
-DigitalOut pulse(D2, 0);    // 時間測定用
+const int DATA_SIZE_ = N_FFT_/2 + 1;
+Array<uint16_t> txData_(DATA_SIZE_);    // 送信用データ
+string rxBuffer_;           // 受信バッファ
 
-const int DATA_SIZE_ = N_FFT_/2 + 1;
-Array<int16_t> txData_(DATA_SIZE_); // 送信用データ
-string rxBuffer_;           // 受信バッファ
 float levelShift_ = 20;     // dB 計算の際のシフト量の初期値
 float empha_ = 1.0f;        // 高域強調器の係数
 
@@ -170,12 +169,13 @@
 
             analyzer_->Execute(sn, db); // スペクトル解析の実行
 
-            const float FACTOR = 4095.0f/60.0f;     // 表示範囲: 0 ~ 60 dB
+            const float FACTOR = 10000.0f/80.0f;     // 表示範囲: 0 ~ 80 dB
             for (int n=0; n<DATA_SIZE_; n++)
             {
-                int16_t spc = (int16_t)(FACTOR*(db[n] + 30.0f + levelShift_));
-                if (spc > 4095) spc = 4095;
-                if (spc < 0) spc = 0;
+                float xDb = FACTOR*(db[n] + 30.0f + levelShift_);
+                if (xDb > 10000.0f) xDb = 10000.0f;
+                if (xDb < 0.0f) xDb = 0.0f;
+                uint16_t spc = (uint16_t)xDb;
                 txData_[n] = spc;
             }
             ready = true;       // スペクトル解析終了