wolframalpha与commons-math之间快速傅立叶变换的结果差异

时间:2013-10-14 14:54:37

标签: java math fft apache-commons-math

我有一个与快速傅里叶变换有关的问题。 我下载了“Math Commons 3.2”库,其中是FFT。但结果与我的预期不同。

例如,对于像real这样的数据:1,0,0,0,0,0,0,0,0虚构:0,0,0,0,0,0,0,0,0 我有,真实:1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0虚构:0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 我使用this code时得到的结果相同 (在“public static main”部分中,此示例作为“test”存在) 但在wolframalpha中,实际值都是1/3而不是1.0。

问题:
在哪里/有什么不同,我怎样才能得到与wolframalpha相同的结果 最好的问候 Dawid D

2 个答案:

答案 0 :(得分:3)

按照惯例,1的向量的FFT应该是1,0,0,0 ...因此,我会说Wolfram Alpha结果是非标准化的。没什么大不了的,也不是真的“不正确”,但是为了得到Alpha的标准化结果,你显然必须乘以3。

答案 1 :(得分:3)

理想情况下,离散傅立叶变换是正交变换。它只是旋转坐标系,为空间中的同一点提供一组不同的坐标。

DFT的许多实现都不正常;它们只是为了计算方便而改变矢量的大小。本质上,它们所做的所有加法都将向量长度乘以其中的元素数量,并且实现从不乘以或除以补偿它。

观察到WolframAlpha向量返回的向量长度为​​1,与输入向量的长度相同。 (长度是元素平方和的平方根。输入向量的长度是sqrt(1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0)= 1。长度输出向量是sqrt(1/9 + 1/9 + 1/9 + 1/9 + 1/9 + 1/9 + 1/9 + 1/9)= 1.)

DFT实现的常见惯例是忽略规范化并返回缩放结果。这是有效的,因为转换结果中使用的大多数操作都不关心绝对幅度。另外,常见的过程是计算一个或多个DFT,组合或处理结果,并计算逆DFT。如果缩放是DFT的一部分,则必须在每个DFT和每个逆DFT中执行缩放。如果您将缩放保留在DFT之外,那么应用程序可以将最终涉及的所有比例组合到单个缩放操作中。对计算性能进行一次缩放比使用多次更好,所以这是首选。