簡體   English   中英

與Matlab ifft的Ooura逆FFT差異

[英]Ooura inverse FFT differences from Matlab ifft

今天,盡管努力使我的C ++代碼(使用Ooura FFT庫)獲得與Matlab相同的結果,但我終於找到了問題和解決方案。

在Matlab中,以以下方式計算幅度-頻率響應網格的反向系數(來自Matlab內部fir2()函數的代碼片段):

%H contains 8192 points of AFR data
Hconj = [H conj(H(npt-1:-1:2))];   % Fourier transform of real series
ht = real(ifft(Hconj));            % Symmetric real series

結果,我們得到了16384個bin,它們的后半部分可以扔掉,但是前半部分可以稍后用作FIR系數。

但是,如果我使用Real DFT rdft()函數在Ooura中執行相同的操作,則會得到在最終AFR中產生鏡像效果的系數,AFR圖上的所有頻率都將除以2。

於是我想到一個主意:在我的C ++代碼中,我將H放大了兩倍(16384點),並用頻率數據將它們全部填充而沒有鏡像。 瞧! 它起作用了,現在我得到了16384點,丟掉了8192點之后的所有東西,現在得到的AFR與Matlab的匹配。

我堅信所有標准FFT實現都需要此鏡像。 不需要在輸入中鏡像數據就是Ooura的一個怪癖,或者可能還有其他事情發生嗎?

“實際” FFT通常通過自動使用輸入的復共軛作為鏡像值來在內部進行鏡像。 標准的FFT / IFFT不會執行此操作,因為它的FFT / IFFT實施方式的自由度(例如,從IFFT產生復數輸出或說是復數域濾波器)具有兩倍的自由度,被限制為僅實際輸出。

FFT的頻率倉步長由其長度控制。 長度的一半會產生頻率步長的一半,就像您的原始試用版一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM