4

我有一个与快速傅里叶变换有关的问题。我下载了 FFT 所在的“Math Commons 3.2”库。但是结果和我预想的不一样。

例如,对于像这样的数据,real: 1,0,0,0,0,0,0,0,0imaginary: 0,0,0,0,0,0,0,0,0 I've got, real: 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0imaginary:0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 与我使用此代码时得到的结果相同 (在“public static main”部分,此示例作为“测试”存在)但是在wolframalpha中,实际值都是 1/3 而不是 1.0。

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

4

2 回答 2

4

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

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 之外,则应用程序可以在最后将所有涉及的缩放组合到单个缩放操作中。一次缩放比多次缩放对计算性能更好,所以这是首选。

于 2013-10-14T15:33:43.647 回答
3

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

于 2013-10-14T15:02:48.893 回答