将 FFT 函数从 Python 2.x 转换为 Python 3.x,并从中计算 IFFT

Translating an FFT function from Python 2.x to Python 3.x, and computing the IFFT from it

我在 Python 中有一个用于版本 2.x 的快速傅里叶变换函数。我想把它放在 Python 3.x 中,但我在 "xrange" 和列表标识符方面遇到了一些问题(正如我的编译器所说)。我也不知道如何在不使用任何非标准库的情况下从我的 FFT 计算逆 FFT。代码如下。提前致谢...

 from cmath import exp,pi

 def FFT(X):
  n = len(X)
  w = exp(-2*pi*1j/n)
  if n > 1:
    X = FFT(X[::2]) + FFT(X[1::2])
    for k in xrange(n/2):
        xk = X[k]
        X[k] = xk + w**k*X[k+n/2]
        X[k+n/2] = xk - w**k*X[k+n/2]
 return X 

UPD:根据您的建议,完全重构了我的 FFT 和构建的 IFFT。 P.S。如何关闭post?

有几种方法可以将 FFT 转换为 IFFT。最简单的方法是去掉 w 的 exp() 函数参数中的减号。接下来就是对输入的复共轭取FFT的复共轭

如果您不缩放前向 FFT,那么通常的做法是将 IFFT 计算缩放 1/N(长度),以便 IFFT(FFT()) 产生相同的总和幅度。如果按 1/N 缩放 FFT,则不要缩放 IFFT 计算。或者按 1/sqrt(N).

缩放