FFTW 或 numpy.fft 等 FFT 库通常提供两个函数fft()
和ifft()
(以及用于实值输入的特殊版本)。这些功能似乎被定义为
ifft(fft(X)) == X
和
fft(X) == constant_factor * reverse(ifft(X))
在复杂输入之间进行选择ifft()
和操作时,是否有任何实际或技术原因需要考虑?fft()
虽然X
(信号、时间或空间域)和fft(X)
(频谱、频域)的解释不同,但它在计算上是否重要?
不同的 fft 库将缩放常数放在不同的位置,在 fft、ifft 或 1/sqrt(N) 中。所以这只是一个很小的依赖于实现的差异。fft 和 ifft 颠倒了它们的结果顺序。所以这只是在结果数组中向前或向后索引之间的区别。您是否调用一个时间/空间与频率只是一个标签差异。
因此,实际上,选择库使用的任何规模以及您想要索引结果的方向都会产生最具可读性的代码。通常设置 fft/ifft 库,以便可以在同一方向 (++) 索引正时间和更高频率。
补充:次要的,可能是不必要的优化:如果您无论如何都需要对 FT 结果进行后缩放,则选择不包含内置缩放乘法的 fft 或 ifft 实现,因为这可以节省 N 次半冗余乘法运算。