スペクトログラム このプログラムの説明は,CQ出版社「トランジスタ技術」の2021年10月号から開始された連載記事「STM32マイコンではじめるPC計測」の中にあります.このプログラムといっしょに使うPC側のプログラムについても同誌を参照してください.

Dependencies:   Array_Matrix mbed SerialTxRxIntr DSP_ADDA UIT_FFT_Real Window

Revision:
1:d4e3f39ce206
Parent:
0:3bf11d2ab6ad
--- a/MySpectrogram/FFT_Spectrogram.cpp	Thu Sep 09 08:55:42 2021 +0000
+++ b/MySpectrogram/FFT_Spectrogram.cpp	Wed Dec 08 03:15:17 2021 +0000
@@ -1,23 +1,23 @@
 //-------------------------------------------------------
 //  スペクトログラムで使う FFT 解析用クラス
 //
-//  2021/05/24, Copyright (c) 2021 MIKAMI, Naoki
+//  2021/11/17, Copyright (c) 2021 MIKAMI, Naoki
 //-------------------------------------------------------
 
 #include "FFT_Spectrogram.hpp"
 
 namespace Mikami
 {
-    FftSpectropgram::FftSpectropgram(int nData, int nFft)
-        : N_DATA_(nData), N_FFT_(nFft),
-          fft_(nFft), wHm_(nFft, nData-1), b1_(1.0f),
-          xData_(nFft), wData_(nFft), yFft_(nFft/2+1) {}
+    FftSpectropgram::FftSpectropgram(int nFft)
+        : N_FFT_(nFft), fft_(nFft), wHm_(nFft),
+          xData_(nFft), wData_(nFft), yFft_(nFft/2+1)
+    { SwEmphasis(false); }	 // 最初は高域強調なし
 
-    void FftSpectropgram::Execute(const Array<float> &xn, Array<float> &absFt)
+    void FftSpectropgram::Execute(const Array<float> &xn,
+    							  Array<float> &absFt)
     {
-        // 高域強調
-        for (int n=0; n<N_DATA_-1; n++)
-            xData_[n] = xn[n+1] - b1_*xn[n];
+		// データのコピー,高域強調の有無は SwEmphasis() で切り替え
+		(this->*fp)(xn);
 
         // 直流分を除去
         float sum = 0;
@@ -25,9 +25,18 @@
         float ave = sum/N_FFT_;
         for (int n=0; n<N_FFT_; n++) xData_[n] = xData_[n] - ave;
 
-        wData_ = wHm_.Execute(xData_);	// 窓掛け
-        fft_.Execute(wData_, yFft_);	// FFT の実行
+        wData_ = wHm_.Execute(xData_);  // 窓掛け
+        fft_.Execute(wData_, yFft_);    // FFT の実行
         for (int n=0; n<=N_FFT_/2; n++) // 絶対値に変換
             absFt[n] = 100.0f*abs(yFft_[n]);
     }
+
+    // データを作業領域にコピーする際に高域強調処理を行う
+    void FftSpectropgram::CopyH(const Array<float> &xn)
+    {
+        // 差分の処理
+        for (int n=1; n<N_FFT_; n++)	// n=1 から開始
+            xData_[n] = xn[n] - xn[n-1];
+		xData_[0] = xData_[1];			// n=0 に対応
+    }
 }
\ No newline at end of file