CQ出版社セミナ,2021/12/07開催「実習・C++言語によるArmマイコンのプログラミング」で使うプログラム.

Dependencies:   Array_Matrix mbed SerialTxRxIntr UIT_FFT_Real

Committer:
MikamiUitOpen
Date:
Thu Apr 02 01:12:34 2020 +0000
Revision:
5:5e55a5f440c0
Parent:
0:a80f730d32a8
6

Who changed what in which revision?

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