我试图利用Numpy的fft函数,但是当我给该函数一个简单的高斯函数时,该高斯函数的fft不是高斯,而是接近的,而是减半的,因此每一半都位于x轴的两端。
我正在计算的高斯函数是
y = exp(-x ^ 2)
这是我的代码:
from cmath import *
from numpy import multiply
from numpy.fft import fft
from pylab import plot, show
""" Basically the standard range() function but with float support """
def frange (min_value, max_value, step):
value = float(min_value)
array = []
while value < float(max_value):
array.append(value)
value += float(step)
return array
N = 256.0 # number of steps
y = []
x = frange(-5, 5, 10/N)
# fill array y with values of the Gaussian function
cache = -multiply(x, x)
for i in cache: y.append(exp(i))
Y = fft(y)
# plot the fft of the gausian function
plot(x, abs(Y))
show()
结果不太正确,因为高斯函数的FFT应该是高斯函数本身...
最佳答案
np.fft.fft
以所谓的“标准顺序”返回结果:(from the docs)
函数np.fft.fftshift
将结果重新排列为大多数人期望的顺序(这对于绘制很有用):
因此,使用np.fft.fftshift
:
import matplotlib.pyplot as plt
import numpy as np
N = 128
x = np.arange(-5, 5, 10./(2 * N))
y = np.exp(-x * x)
y_fft = np.fft.fftshift(np.abs(np.fft.fft(y))) / np.sqrt(len(y))
plt.plot(x,y)
plt.plot(x,y_fft)
plt.show()
关于python - 高斯的傅立叶变换不是高斯,但是那是错误的! - Python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5398304/