2016-11-25 111 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()不允许这种输入)。