HanningWindow, HammingWindow, BlackmanWindow の各クラス. このライブラリを登録した際のプログラム: Demo_Window

Dependents:   TrG_FFT_Analyzer Demo_Window TrG_Spectrogram

Revision:
1:d8673bf6f89c
Parent:
0:823e9a4ab223
--- a/WindowBase.hpp	Sun May 23 06:25:26 2021 +0000
+++ b/WindowBase.hpp	Wed Nov 10 05:47:10 2021 +0000
@@ -1,14 +1,13 @@
 //-------------------------------------------------------------------
-//  窓掛け処理の抽象基底クラス
+//  FFT で使う場合の窓掛け処理の抽象基底クラス
 //      ゼロ詰め(zero-padding)の機能を持つ
 //
-//  2021/05/22, Copyright (c) 2021 MIKAMI, Naoki
+//  2021/11/10, Copyright (c) 2021 MIKAMI, Naoki
 //-------------------------------------------------------------------
 
 #ifndef WINDOW_BASE_HPP
 #define WINDOW_BASE_HPP
 
-#include "mbed.h"
 #include "Array.hpp"
 
 namespace Mikami
@@ -17,23 +16,24 @@
     {
     public:
         // コンストラクタ
+        //      nFft    使用する FFT の点数
+        //      nData   使用するデータ数,nData <= fFft
         WindowBase(uint16_t nFft, uint16_t nData)
-                : NFFT_(nFft), N_(nData), y_(nFft), w_(nData)
-        { IsOk(); }
-
-        WindowBase(uint16_t nFft)
-                : NFFT_(nFft), N_(nFft), y_(nFft), w_(nFft)
-        { IsOk(); }
+            : PI2L_(6.283185f/nData), NFFT_(nFft), N_(nData),
+              y_(nFft), w_(nData) { IsOk(); }
 
         // 窓掛けを実行
         Array<float>& Execute(const Array<float> &x)
         {
             for (int n=0; n<N_; n++) y_[n] = x[n]*w_[n];
+            // ゼロ詰めの処理
             for (int n=N_; n<NFFT_; n++) y_[n] = 0.0f;
             return y_;
         }
 
     protected:
+        const float PI2L_;      // 窓関数のデータを発生する計算で使用
+        // 窓関数のデータを設定する
         void Set(int n, float win) { w_[n] = win; }
 
     private:
@@ -43,7 +43,7 @@
         Array<float> w_;        // 窓関数のデータ
  
         // コンストラクタの引数をチェックする
-        void IsOk()
+        void IsOk() const
         {
             // nFft が2のべき乗であることをチェックする
             // __clz(): リーディング 0 の数を取得する命令に対応