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

Dependencies:   Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real DSP_ADDA

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Blackman.hpp Source File

Blackman.hpp

00001 //-------------------------------------------------------------------
00002 //  Blackman 窓による窓掛け
00003 //      ゼロ詰め(zero-padding)の機能を持つ
00004 //
00005 //  2020/11/07, Copyright (c) 2020 MIKAMI, Naoki
00006 //-------------------------------------------------------------------
00007 
00008 #ifndef HAMMING_WINDOW_HPP
00009 #define HAMMING_WINDOW_HPP
00010 
00011 #include "mbed.h"
00012 #include "Array.hpp"
00013 
00014 namespace Mikami
00015 {
00016     class BlackmanWindow
00017     {
00018     public:
00019         // コンストラクタ
00020         BlackmanWindow(uint16_t nData, uint16_t nFft)
00021                 : N_(nData), NFFT_(nFft), w_(nData)
00022         {
00023             const float PI2L = 6.283185f/(float)nData;
00024             const float PI4L = 2*PI2L;
00025             for (int k=0; k<nData; k++)
00026                 w_[k] = 0.42f - 0.5f*cosf(k*PI2L) + 0.08f*cosf(k*PI4L);
00027         }
00028         
00029         // デストラクタ
00030         virtual ~BlackmanWindow() {}
00031         
00032         // 窓掛けを実行
00033         void Execute(const Array<float> &x, Array<float> &y)
00034         {
00035             for (int n=0; n<N_; n++) y[n] = x[n]*w_[n];
00036             for (int n=N_; n<NFFT_; n++) y[n] = 0;
00037         }
00038 
00039     private:
00040         const int N_;
00041         const int NFFT_;
00042                 
00043         Array<float> w_;
00044 
00045         // コピー・コンストラクタおよび代入演算子の禁止のため
00046         BlackmanWindow(const BlackmanWindow& );
00047         BlackmanWindow& operator=(const BlackmanWindow& );
00048     };
00049 }
00050 #endif  // HAMMING_WINDOW_HPP