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