matlab和java中的fft
我使用jtransforms库在matlab和java中进行了fft,但结果略有不同matlab和java中的fft,java,matlab,fft,Java,Matlab,Fft,我使用jtransforms库在matlab和java中进行了fft,但结果略有不同 Matlab results: -0.0530528652679544 -0.00775535711930750 + 0.0281791646147104i -0.0304104457750988 - 0.209776156064443i 0.266945753193636 + 0.200338044445226i Jtransforms results: -0.05305448436232618 -0.00
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只是对值进行四舍五入?进行FFT有很多方法。原则上他们都是平等的,但在实践中,再加上,结果会略有不同。即使基本FFT算法相同,实现细节(如求和顺序)也可能导致差异。根据优化标志,即使您没有做任何特殊的事情,也会有很多
在您的结果中,差异大约在第五个有效数字处。这是一个相当小的差别。您可以尝试对结果进行逆变换(使用Matlab和JTTransforms IFT),以查看其中一种变换是否更精确。对于双精度浮点运算,差异似乎大于正常的数值精度问题。看起来更像是其中一个FFT使用了一些短浮点运算或数据,并将结果打印为双精度(这使得所有额外的数字都变得毫无意义)。完全不同。一个库使用32位浮点而另一个库使用64位浮点吗?在这种情况下,可能是这样,也可能不是这样,但至少FPA精度没有“正常”这回事。特别是,在累加器/积分器(FFT算法不可避免地包含)中,舍入误差几乎可以无限累积。