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

Dependencies:   Array_Matrix mbed SerialTxRxIntr DSP_ADDA UIT_FFT_Real Window

Committer:
MikamiUitOpen
Date:
Thu Sep 09 08:55:42 2021 +0000
Revision:
0:3bf11d2ab6ad
Child:
1:d4e3f39ce206
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:3bf11d2ab6ad 1 //-------------------------------------------------------
MikamiUitOpen 0:3bf11d2ab6ad 2 // スペクトログラムで使う FFT 解析用クラス
MikamiUitOpen 0:3bf11d2ab6ad 3 //
MikamiUitOpen 0:3bf11d2ab6ad 4 // 2021/05/24, Copyright (c) 2021 MIKAMI, Naoki
MikamiUitOpen 0:3bf11d2ab6ad 5 //-------------------------------------------------------
MikamiUitOpen 0:3bf11d2ab6ad 6
MikamiUitOpen 0:3bf11d2ab6ad 7 #include "FFT_Spectrogram.hpp"
MikamiUitOpen 0:3bf11d2ab6ad 8
MikamiUitOpen 0:3bf11d2ab6ad 9 namespace Mikami
MikamiUitOpen 0:3bf11d2ab6ad 10 {
MikamiUitOpen 0:3bf11d2ab6ad 11 FftSpectropgram::FftSpectropgram(int nData, int nFft)
MikamiUitOpen 0:3bf11d2ab6ad 12 : N_DATA_(nData), N_FFT_(nFft),
MikamiUitOpen 0:3bf11d2ab6ad 13 fft_(nFft), wHm_(nFft, nData-1), b1_(1.0f),
MikamiUitOpen 0:3bf11d2ab6ad 14 xData_(nFft), wData_(nFft), yFft_(nFft/2+1) {}
MikamiUitOpen 0:3bf11d2ab6ad 15
MikamiUitOpen 0:3bf11d2ab6ad 16 void FftSpectropgram::Execute(const Array<float> &xn, Array<float> &absFt)
MikamiUitOpen 0:3bf11d2ab6ad 17 {
MikamiUitOpen 0:3bf11d2ab6ad 18 // 高域強調
MikamiUitOpen 0:3bf11d2ab6ad 19 for (int n=0; n<N_DATA_-1; n++)
MikamiUitOpen 0:3bf11d2ab6ad 20 xData_[n] = xn[n+1] - b1_*xn[n];
MikamiUitOpen 0:3bf11d2ab6ad 21
MikamiUitOpen 0:3bf11d2ab6ad 22 // 直流分を除去
MikamiUitOpen 0:3bf11d2ab6ad 23 float sum = 0;
MikamiUitOpen 0:3bf11d2ab6ad 24 for (int n=0; n<N_FFT_; n++) sum = sum + xData_[n];
MikamiUitOpen 0:3bf11d2ab6ad 25 float ave = sum/N_FFT_;
MikamiUitOpen 0:3bf11d2ab6ad 26 for (int n=0; n<N_FFT_; n++) xData_[n] = xData_[n] - ave;
MikamiUitOpen 0:3bf11d2ab6ad 27
MikamiUitOpen 0:3bf11d2ab6ad 28 wData_ = wHm_.Execute(xData_); // 窓掛け
MikamiUitOpen 0:3bf11d2ab6ad 29 fft_.Execute(wData_, yFft_); // FFT の実行
MikamiUitOpen 0:3bf11d2ab6ad 30 for (int n=0; n<=N_FFT_/2; n++) // 絶対値に変換
MikamiUitOpen 0:3bf11d2ab6ad 31 absFt[n] = 100.0f*abs(yFft_[n]);
MikamiUitOpen 0:3bf11d2ab6ad 32 }
MikamiUitOpen 0:3bf11d2ab6ad 33 }