FFT和逆FFT之间有实际区别吗?

5

FFT库(如FFTW或numpy.fft)通常提供两个函数fft()ifft()(以及针对实值输入的特殊版本)。这些函数被定义为这样的函数:

ifft(fft(X)) == X

并且

fft(X) == constant_factor * reverse(ifft(X))

在选择使用ifft()fft()处理复杂输入时,是否存在实际或技术上的考虑因素?虽然X(信号、时间或空间域)和fft(X)(频谱、频率域)的解释不同,但在计算方面是否真的有所区别呢?

1个回答

6
不同的fft库将缩放常数放置在不同的位置,fft、ifft或1/sqrt(N)中。因此,这只是一个实现相关的小差异。fft和ifft会颠倒其结果的顺序。所以这只是一个你结果数组正向或反向索引的差异。无论你是将其称为时间/空间还是频率,都只是一个标签上的区别。
因此,在实际应用中,选择库使用最易读的代码和你想要索引结果的方向相同(++,即正向)。通常情况下,fft/ifft库设置成可以同时在正向索引正时间和高频率。
添加:小型、可能不必要的优化:如果你需要后缩放FT结果,那么选择不包括内置比例乘法的fft或ifft实现,因为这可能会节省N个半冗余乘法操作。

正向/反向FFT的旋转因子不是不同的吗?我记得虚部上的符号会改变。 - Paul R
1
改变一些旋转因子的符号就是所谓的“时间反演”,或者输出一个索引方向相反的结果向量。 - hotpaw2
好的,谢谢。我从未真正考虑过FFT和IFFT可能以这种方式互换 - 我将不得不进一步研究这个问题,即使只是出于好奇心。 - Paul R
所以从技术上讲,如果使用1/sqrt(N)来实现fft,那么'fft(fft(array))'将返回相反的数组?如果我错了,请纠正我。 - Rik Schaaf
fft(fft())会反转数组,通常围绕元素0对称,可能根据实现缩放,可能包括数值舍入噪声。对称性:数组元素0中的值应保持不变,具体取决于索引(C vs. matlab等)。 - hotpaw2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接