FFT for real data using decimation-in-frequency algorithm. 実データに対するFFT.周波数間引きアルゴリズムを使用. このライブラリを登録した際のプログラム: Demo_FFT_IFFT

Dependents:   UIT2_SpectrumAnalyzer F746_SpectralAnalysis_NoPhoto F746_FFT_Speed F746_RealtimeSpectrumAnalyzer ... more

Revision:
4:0b4975fffc90
Parent:
3:dc123081d491
--- a/fftReal.cpp	Mon Jan 13 08:54:18 2020 +0000
+++ b/fftReal.cpp	Sat Dec 12 03:20:09 2020 +0000
@@ -3,7 +3,7 @@
 //      FFT     複素共役になる部分は計算しない
 //      IFFT    複素共役の部分を除いた値から計算する
 //
-//  2020/01/13, Copyright (c) 2020 MIKAMI, Naoki
+//  2020/12/12, Copyright (c) 2020 MIKAMI, Naoki
 //------------------------------------------------------------------------------
 
 #include "fftReal.hpp"
@@ -15,9 +15,8 @@
             : N_FFT_(n), N_INV_(1.0f/n), wTable_(n/2), bTable_(n), u_(n)
     {
         // __clz(): リーディング 0 の数を取得する命令に対応
-        uint32_t shifted = n << (__clz(n)+1);
-
-        MBED_ASSERT(shifted == 0);
+        uint32_t shifted = n << (__clz(n) + 1);
+        MBED_ASSERT(shifted == 0);  // n が 2 のべき乗であることをチェック
 
         // 回転子の表を作成
         Complex arg = Complex(0, -6.283185f/N_FFT_);
@@ -52,7 +51,7 @@
 
     // IFFT の実行
     //      このクラスで計算された FFT の結果の IFFT を計算する
-    //      実行結果    x[0] ~ x[N_FFT_]
+    //      実行結果    x[0] ~ x[N_FFT_-1]
     void FftReal::ExecuteIfft(const Complex y[], float x[])
     {
         int half = N_FFT_/2;
@@ -89,7 +88,7 @@
                 uint16_t kx = 0;
                 for (int k=kp; k<kp+nHalf; k++)
                 {
-                    // Butterfly operation
+                    // バタフライ演算
                     Complex uTmp = u_[k+nHalf];
                     u_[k+nHalf] = (u_[k] - uTmp)*wTable_[kx];
                     u_[k] = u_[k] + uTmp;
@@ -97,6 +96,6 @@
                 }
             }
             nHalf = nHalf/2;
-        }        
+        }
     }
-}
\ No newline at end of file
+}