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

Dependencies:   Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real DSP_ADDA

Committer:
MikamiUitOpen
Date:
Fri Jan 08 02:27:46 2021 +0000
Revision:
0:91cc5a03f0ca
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:91cc5a03f0ca 1 //-------------------------------------------------------------------
MikamiUitOpen 0:91cc5a03f0ca 2 // Blackman 窓による窓掛け
MikamiUitOpen 0:91cc5a03f0ca 3 // ゼロ詰め(zero-padding)の機能を持つ
MikamiUitOpen 0:91cc5a03f0ca 4 //
MikamiUitOpen 0:91cc5a03f0ca 5 // 2020/11/07, Copyright (c) 2020 MIKAMI, Naoki
MikamiUitOpen 0:91cc5a03f0ca 6 //-------------------------------------------------------------------
MikamiUitOpen 0:91cc5a03f0ca 7
MikamiUitOpen 0:91cc5a03f0ca 8 #ifndef HAMMING_WINDOW_HPP
MikamiUitOpen 0:91cc5a03f0ca 9 #define HAMMING_WINDOW_HPP
MikamiUitOpen 0:91cc5a03f0ca 10
MikamiUitOpen 0:91cc5a03f0ca 11 #include "mbed.h"
MikamiUitOpen 0:91cc5a03f0ca 12 #include "Array.hpp"
MikamiUitOpen 0:91cc5a03f0ca 13
MikamiUitOpen 0:91cc5a03f0ca 14 namespace Mikami
MikamiUitOpen 0:91cc5a03f0ca 15 {
MikamiUitOpen 0:91cc5a03f0ca 16 class BlackmanWindow
MikamiUitOpen 0:91cc5a03f0ca 17 {
MikamiUitOpen 0:91cc5a03f0ca 18 public:
MikamiUitOpen 0:91cc5a03f0ca 19 // コンストラクタ
MikamiUitOpen 0:91cc5a03f0ca 20 BlackmanWindow(uint16_t nData, uint16_t nFft)
MikamiUitOpen 0:91cc5a03f0ca 21 : N_(nData), NFFT_(nFft), w_(nData)
MikamiUitOpen 0:91cc5a03f0ca 22 {
MikamiUitOpen 0:91cc5a03f0ca 23 const float PI2L = 6.283185f/(float)nData;
MikamiUitOpen 0:91cc5a03f0ca 24 const float PI4L = 2*PI2L;
MikamiUitOpen 0:91cc5a03f0ca 25 for (int k=0; k<nData; k++)
MikamiUitOpen 0:91cc5a03f0ca 26 w_[k] = 0.42f - 0.5f*cosf(k*PI2L) + 0.08f*cosf(k*PI4L);
MikamiUitOpen 0:91cc5a03f0ca 27 }
MikamiUitOpen 0:91cc5a03f0ca 28
MikamiUitOpen 0:91cc5a03f0ca 29 // デストラクタ
MikamiUitOpen 0:91cc5a03f0ca 30 virtual ~BlackmanWindow() {}
MikamiUitOpen 0:91cc5a03f0ca 31
MikamiUitOpen 0:91cc5a03f0ca 32 // 窓掛けを実行
MikamiUitOpen 0:91cc5a03f0ca 33 void Execute(const Array<float> &x, Array<float> &y)
MikamiUitOpen 0:91cc5a03f0ca 34 {
MikamiUitOpen 0:91cc5a03f0ca 35 for (int n=0; n<N_; n++) y[n] = x[n]*w_[n];
MikamiUitOpen 0:91cc5a03f0ca 36 for (int n=N_; n<NFFT_; n++) y[n] = 0;
MikamiUitOpen 0:91cc5a03f0ca 37 }
MikamiUitOpen 0:91cc5a03f0ca 38
MikamiUitOpen 0:91cc5a03f0ca 39 private:
MikamiUitOpen 0:91cc5a03f0ca 40 const int N_;
MikamiUitOpen 0:91cc5a03f0ca 41 const int NFFT_;
MikamiUitOpen 0:91cc5a03f0ca 42
MikamiUitOpen 0:91cc5a03f0ca 43 Array<float> w_;
MikamiUitOpen 0:91cc5a03f0ca 44
MikamiUitOpen 0:91cc5a03f0ca 45 // コピー・コンストラクタおよび代入演算子の禁止のため
MikamiUitOpen 0:91cc5a03f0ca 46 BlackmanWindow(const BlackmanWindow& );
MikamiUitOpen 0:91cc5a03f0ca 47 BlackmanWindow& operator=(const BlackmanWindow& );
MikamiUitOpen 0:91cc5a03f0ca 48 };
MikamiUitOpen 0:91cc5a03f0ca 49 }
MikamiUitOpen 0:91cc5a03f0ca 50 #endif // HAMMING_WINDOW_HPP