//-------------------------------------------------------
//  FFT を使ってスペクトル解析を行うクラス（ヘッダ）
//
//  2022/10/17, Copyright (c) 2022 MIKAMI, Naoki
//-------------------------------------------------------

#ifndef FFT_ANALYZER_HPP
#define FFT_ANALYZER_HPP

#include "Array.hpp"
#include "fftReal.hpp"
#include "Blackman.hpp"

namespace Mikami
{
    class FftAnalyzer
    {
    public:
        // nFft:  FFT のデータ点の数
        explicit FftAnalyzer(int nFft);
        virtual ~FftAnalyzer() {}
        void Execute(const Array<float> &xn, Array<float> &absFt);

    private:
        const int N_FFT_;

        FftReal fft_;
        BlackmanWindow wBlk_;

        Array<float> xData_;    // 解析対象の時系列データ
        Array<float> wData_;    // 窓掛けされたデータ
        Array<Complex> yFft_;   // FFT の結果

        // コピー･コンストラクタおよび代入演算子の禁止のため
        FftAnalyzer(const FftAnalyzer& );
        FftAnalyzer& operator=(const FftAnalyzer& );
    };
}
#endif  // FFT_ANALYZER_HPP
