FFT によるスペクトル解析器

Dependencies:   Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real DSP_ADDA

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers FFT_Analyzer.cpp Source File

FFT_Analyzer.cpp

00001 //-------------------------------------------------------
00002 //  FFT を使ってスペクトル解析を行うクラス
00003 //
00004 //  2020/11/07, Copyright (c) 2020 MIKAMI, Naoki
00005 //-------------------------------------------------------
00006 
00007 #include "FFT_Analyzer.hpp"
00008 
00009 namespace Mikami
00010 {
00011     FftAnalyzer::FftAnalyzer(int nFft)
00012         : N_FFT_(nFft), fft_(nFft), wHm_(nFft, nFft),
00013           xData_(nFft), wData_(nFft), yFft_(nFft/2+1) {}
00014 
00015     void FftAnalyzer::Execute(const Array<float> &xn, Array<float> &absFt)
00016     {
00017         xData_ = xn;    // データを作業領域にコピー
00018 
00019         // 直流分を除去
00020         float sum = 0;
00021         for (int n=0; n<N_FFT_; n++) sum = sum + xData_[n];
00022         float ave = sum/N_FFT_;
00023         for (int n=0; n<N_FFT_; n++) xData_[n] = xData_[n] - ave;
00024 
00025         wHm_.Execute(xData_, wData_);   // 窓掛け
00026             
00027         fft_.Execute(wData_, yFft_);    // FFT の実行
00028 
00029         for (int n=0; n<=N_FFT_/2; n++) // 絶対値に変換
00030             absFt[n] = 100.0f*abs(yFft_[n]);
00031     }
00032 }