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
Diff: fftReal.cpp
- Revision:
- 4:0b4975fffc90
- Parent:
- 3:dc123081d491
diff -r dc123081d491 -r 0b4975fffc90 fftReal.cpp --- 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 +}