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

Dependencies:   Array_Matrix mbed SerialTxRxIntr DSP_ADDA UIT_FFT_Real Window

Committer:
MikamiUitOpen
Date:
Wed Dec 08 03:15:17 2021 +0000
Revision:
1:d4e3f39ce206
Parent:
0:3bf11d2ab6ad
2

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 1:d4e3f39ce206 4 // 2021/11/17, Copyright (c) 2021 MIKAMI, Naoki
MikamiUitOpen 0:3bf11d2ab6ad 5 //-------------------------------------------------------
MikamiUitOpen 0:3bf11d2ab6ad 6
MikamiUitOpen 1:d4e3f39ce206 7 #ifndef FFT_ANALYZER_HPP
MikamiUitOpen 1:d4e3f39ce206 8 #define FFT_ANALYZER_HPP
MikamiUitOpen 0:3bf11d2ab6ad 9
MikamiUitOpen 0:3bf11d2ab6ad 10 #include "Array.hpp"
MikamiUitOpen 0:3bf11d2ab6ad 11 #include "fftReal.hpp"
MikamiUitOpen 0:3bf11d2ab6ad 12 #include "Hamming.hpp"
MikamiUitOpen 0:3bf11d2ab6ad 13
MikamiUitOpen 0:3bf11d2ab6ad 14 namespace Mikami
MikamiUitOpen 0:3bf11d2ab6ad 15 {
MikamiUitOpen 0:3bf11d2ab6ad 16 class FftSpectropgram
MikamiUitOpen 0:3bf11d2ab6ad 17 {
MikamiUitOpen 0:3bf11d2ab6ad 18 public:
MikamiUitOpen 1:d4e3f39ce206 19 // nFft: FFT のデータ点の数
MikamiUitOpen 1:d4e3f39ce206 20 explicit FftSpectropgram(int nFft);
MikamiUitOpen 0:3bf11d2ab6ad 21 virtual ~FftSpectropgram() {}
MikamiUitOpen 1:d4e3f39ce206 22 void Execute(const Array<float> &xn, Array<float> &absFt);
MikamiUitOpen 1:d4e3f39ce206 23
MikamiUitOpen 1:d4e3f39ce206 24 // データのコピーを行う際の高域強調の有無切り替え
MikamiUitOpen 1:d4e3f39ce206 25 void SwEmphasis(bool on)
MikamiUitOpen 1:d4e3f39ce206 26 { fp = on ? &FftSpectropgram::CopyH : &FftSpectropgram::Copy; }
MikamiUitOpen 0:3bf11d2ab6ad 27
MikamiUitOpen 0:3bf11d2ab6ad 28 private:
MikamiUitOpen 0:3bf11d2ab6ad 29 const int N_FFT_;
MikamiUitOpen 0:3bf11d2ab6ad 30
MikamiUitOpen 0:3bf11d2ab6ad 31 FftReal fft_;
MikamiUitOpen 1:d4e3f39ce206 32 HammingWindow wHm_; // ハミング窓
MikamiUitOpen 0:3bf11d2ab6ad 33
MikamiUitOpen 1:d4e3f39ce206 34 Array<float> xData_; // 解析対象の時系列データ
MikamiUitOpen 0:3bf11d2ab6ad 35 Array<float> wData_; // 窓掛けされたデータ
MikamiUitOpen 1:d4e3f39ce206 36 Array<Complex> yFft_; // FFT の結果
MikamiUitOpen 0:3bf11d2ab6ad 37
MikamiUitOpen 1:d4e3f39ce206 38 // コピーの際に使う関数に対する関数ポインタ
MikamiUitOpen 1:d4e3f39ce206 39 void (FftSpectropgram::*fp)(const Array<float> &xn);
MikamiUitOpen 1:d4e3f39ce206 40 // データを作業領域にコピー:高域強調は行わない
MikamiUitOpen 1:d4e3f39ce206 41 void Copy(const Array<float> &xn) { xData_ = xn; }
MikamiUitOpen 1:d4e3f39ce206 42 // データを作業領域にコピー:高域強調は行う
MikamiUitOpen 1:d4e3f39ce206 43 void CopyH(const Array<float> &xn);
MikamiUitOpen 0:3bf11d2ab6ad 44
MikamiUitOpen 0:3bf11d2ab6ad 45 // コピー・コンストラクタおよび代入演算子の禁止のため
MikamiUitOpen 0:3bf11d2ab6ad 46 FftSpectropgram(const FftSpectropgram& );
MikamiUitOpen 0:3bf11d2ab6ad 47 FftSpectropgram& operator=(const FftSpectropgram& );
MikamiUitOpen 0:3bf11d2ab6ad 48 };
MikamiUitOpen 0:3bf11d2ab6ad 49 }
MikamiUitOpen 1:d4e3f39ce206 50 #endif // FFT_ANALYZER_HPP