CQ出版社セミナ,2021/12/07開催「実習・C++言語によるArmマイコンのプログラミング」で使うプログラム.

Dependencies:   Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real

Committer:
MikamiUitOpen
Date:
Thu Apr 02 01:12:34 2020 +0000
Revision:
5:5e55a5f440c0
Parent:
0:a80f730d32a8
6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:a80f730d32a8 1 //-------------------------------------------------------
MikamiUitOpen 0:a80f730d32a8 2 // FFT を使ってスペクトル解析を行うクラス(ヘッダ)
MikamiUitOpen 0:a80f730d32a8 3 //
MikamiUitOpen 0:a80f730d32a8 4 // 2019/11/22, Copyright (c) 2019 MIKAMI, Naoki
MikamiUitOpen 0:a80f730d32a8 5 //-------------------------------------------------------
MikamiUitOpen 0:a80f730d32a8 6
MikamiUitOpen 0:a80f730d32a8 7 #ifndef FFT_ANALYZER_HPP
MikamiUitOpen 0:a80f730d32a8 8 #define FFT_ANALYZER_HPP
MikamiUitOpen 0:a80f730d32a8 9
MikamiUitOpen 0:a80f730d32a8 10 #include "Array.hpp"
MikamiUitOpen 0:a80f730d32a8 11 #include "fftReal.hpp"
MikamiUitOpen 0:a80f730d32a8 12 #include "Hamming.hpp"
MikamiUitOpen 0:a80f730d32a8 13
MikamiUitOpen 0:a80f730d32a8 14 namespace Mikami
MikamiUitOpen 0:a80f730d32a8 15 {
MikamiUitOpen 0:a80f730d32a8 16 class FftAnalyzer
MikamiUitOpen 0:a80f730d32a8 17 {
MikamiUitOpen 0:a80f730d32a8 18 public:
MikamiUitOpen 0:a80f730d32a8 19 // nFft: FFT のデータ点の数
MikamiUitOpen 0:a80f730d32a8 20 FftAnalyzer(int nFft);
MikamiUitOpen 0:a80f730d32a8 21 virtual ~FftAnalyzer() {}
MikamiUitOpen 0:a80f730d32a8 22 void Execute(const Array<float> &xn, Array<float> &db);
MikamiUitOpen 0:a80f730d32a8 23
MikamiUitOpen 0:a80f730d32a8 24 private:
MikamiUitOpen 0:a80f730d32a8 25 const int N_FFT_;
MikamiUitOpen 0:a80f730d32a8 26
MikamiUitOpen 0:a80f730d32a8 27 FftReal fft_;
MikamiUitOpen 0:a80f730d32a8 28 HammingWindow wHm_;
MikamiUitOpen 0:a80f730d32a8 29
MikamiUitOpen 0:a80f730d32a8 30 Array<float> xData_; // 解析対象の時系列データ
MikamiUitOpen 0:a80f730d32a8 31 Array<float> wData_; // 窓掛けされたデータ
MikamiUitOpen 0:a80f730d32a8 32 Array<Complex> yFft_; // FFT の結果
MikamiUitOpen 0:a80f730d32a8 33
MikamiUitOpen 0:a80f730d32a8 34 // 絶対値の2乗
MikamiUitOpen 0:a80f730d32a8 35 float Norm(Complex x)
MikamiUitOpen 0:a80f730d32a8 36 { return x.real()*x.real() + x.imag()*x.imag(); }
MikamiUitOpen 0:a80f730d32a8 37
MikamiUitOpen 0:a80f730d32a8 38 // コピー・コンストラクタおよび代入演算子の禁止のため
MikamiUitOpen 0:a80f730d32a8 39 FftAnalyzer(const FftAnalyzer& );
MikamiUitOpen 0:a80f730d32a8 40 FftAnalyzer& operator=(const FftAnalyzer& );
MikamiUitOpen 0:a80f730d32a8 41 };
MikamiUitOpen 0:a80f730d32a8 42 }
MikamiUitOpen 0:a80f730d32a8 43 #endif // FFT_ANALYZER_HPP
MikamiUitOpen 0:a80f730d32a8 44