在matlab和java中的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.007755593801247046 + 0.028180024600812384 -0.03041137385657606 -0.20978255812004887 0.26695389998013486 + 0.20034415846373468 

结果是不同的还是Matlab只是四舍五入?

有几种不同的 FFT 算法 。 原则上它们都是相同的,但在实践中,结合浮点运算 ,结果会略有不同。 即使基本FFT算法相同,诸如求和的顺序之类的实现细节也可能导致差异。 即使你没有做任何特殊的事情,许多现代处理器也会这样做,具体取决于优化标志。

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

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