2012-01-09 83 views
5

我在matlab和java中使用jtransforms库做了fft,但结果稍有不同。fft在matlab和java

Matlab results: 
-0.0530528652679544 
-0.00775535711930750 + 0.0281791646147104i 
-0.0304104457750988 - 0.209776156064443i 
0.266945753193636 + 0.200338044445226i 

Jtransforms results: 
-0.05305448436232618 
-0.007755593801247046 + 0.028180024600812384 
-0.03041137385657606 -0.20978255812004887 
0.26695389998013486 + 0.20034415846373468 

是结果不同或Matlab只是舍入值是多少?

+1

略有不同。一个库是使用32位浮点还是另一个64位? – 2012-01-09 14:07:48

回答

7

有FFT的several different algorithms。原则上他们都是平等的,但实际上,与floating-point arithmetic相结合,结果会稍有不同。即使基本的FFT算法相同,实现细节(如求和次序)也会导致差异。许多modern processors do this,即使你没有做任何特别的事情,这取决于优化标志。

在您的结果中,差异约为第5位有效数字。这是一个相当小的差异。您可以尝试对结果进行逆变换(使用Matlab和JTransforms IFT),以查看一个或另一个变换是否显然更准确。

1

对于双精度浮点运算,差异似乎大于正常的数值精度问题。它看起来更像是其中一个FFT正在使用一些简短的浮点运算或数据,并将结果打印为双精度(这使得所有这些额外的数字都成为无稽之谈)。

+0

在这种情况下,它可能会或可能不会如此,但至少没有FPA精度的“正常”这样的事情。特别是在累加器/积分器(FFT算法不可避免地包含的)中,舍入误差可以几乎无限累加。 – 2012-01-10 07:26:13