FFT によるスペクトル解析器
Dependencies: Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real DSP_ADDA
MyFFT_Analyzer/Blackman.hpp@0:91cc5a03f0ca, 2021-01-08 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Fri Jan 08 02:27:46 2021 +0000
- Revision:
- 0:91cc5a03f0ca
1
Who changed what in which revision?
User | Revision | Line number | New 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 |