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

时间:2015-04-21 19:32:37

标签: python fft ifft

我在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。 附:如何关闭帖子?

1 个答案:

答案 0 :(得分:0)

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

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