我想用数值计算numpy数组Y上的FFT。为了测试,我使用高斯函数Y=exp(-x^2)。(符号)傅里叶变换是Y’=常数*exp(-k^2/4)。import numpy
X = numpy.arange(-100,100)
Y = numpy.exp(-(X/5.0)**2)
天真的方法失败了:from numpy.fft import *
from matplotlib import pyplot
def plotReIm(x,y):
f = pyplot.figure()
ax = f.add_subplot(111)
ax.plot(x, numpy.real(y), 'b', label='R()')
ax.plot(x, numpy.imag(y), 'r:', label='I()')
ax.plot(x, numpy.abs(y), 'k--', label='abs()')
ax.legend()
Y_k = fftshift(fft(Y))
k = fftshift(fftfreq(len(Y)))
plotReIm(k,Y_k)
real(Y_k)在正负值之间跳跃,对应于跳跃阶段,符号结果中不存在跳跃阶段。这当然不可取。(结果在技术上是正确的,因为abs(Y_k)给出了预期的振幅ifft(Y_k)是Y。)
这里,函数fftshift()使数组k单调递增,并相应地改变Y。通过对两个向量应用此操作,不会更改对zip(k,Y_k)。
这些更改似乎可以解决问题:Y_