2016-11-25 113 views
0

我是fft的新手。我將Matlab中的代碼轉換爲java/c以在Android設備中使用。我可以使用純java java fft lib(如Jtransform和Jwave)來做到這一點,但我想使用FFTS(https://github.com/anthonix/ffts)獲得本機性能,但輸出結果不一樣,我不知道爲什麼。我閱讀了Matlab網站上他們所說的縮放比例(http://www.mathworks.com/matlabcentral/answers/15770-scaling-the-fft-and-the-ifft),但我無法找到縮放比例來匹配兩個結果值。FFTS FFT和Matlab FFT之間的不同結果值

我更新輸出: Matlab的:

x = [0,1,2,3,4,5,6,7] 
X=fft(x,8); 

28.0000000000000 + 0.00000000000000i  
-4.00000000000000 + 9.65685424949238i 
-4.00000000000000 + 4.00000000000000i 
-4.00000000000000 + 1.65685424949238i 
-4.00000000000000 + 0.00000000000000i 
-4.00000000000000 - 1.65685424949238i 
-4.00000000000000 - 4.00000000000000i 
-4.00000000000000 - 9.65685424949238i 

FFTS:

FFTS fft = FFTS.real(FFTS.FORWARD, 8); 
fft.execute(x,output); 

28.000000 + 0.000000i 
-4.000000 + 9.656855i 
-4.000000 + 4.000000i 
-4.000000 + 1.656854i 
0.000000 + 0.000000i 
0.000000 + 0.000000i 
0.000000 + 0.000000i 
0.000000 + 0.000000i 
+1

你有一個小的測試輸出(例如8點FFT)從FFTS和Matlab? – SleuthEye

+0

@SleuthEye我已經更新了這個問題。 – DzungPV

回答

1

一個真正的FFT(fft.real())不返回一個完整的結果下半場FFT。這是因爲,給定嚴格實數輸入(不是複數數據類型,或者所有虛數分量等於零),FFT結果是共軛對稱的;因此下半部分是多餘的(結合後)。

即使冗餘,完整的FFT也會返回複數結果向量的第二個一半。 (只有當輸入與非零虛部成分複雜時,完整FFT的後半部分纔是非冗餘的,fft.real()不允許這種輸入)。