我在 Python 3.7.2 中测试 numpy 1.16.1 的.fft 包。特别是,我试图验证转换是否类似于分析转换:
我从Wolfram Alpha那里得到看起来像这样:
然后我尝试用 numpy 和 matplotlib 复制这个图,代码如下:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 1/1000)
y = np.exp(-((x-5)**2)/4)
y_hat = np.fft.fftshift(np.fft.fft(y))
re_y_hat = np.real(y_hat)
im_y_hat = np.imag(y_hat)
fig, ax = plt.subplots()
ax.plot(x, re_y_hat, "b-", x, im_y_hat, "r-")
plt.show()
plt.close()
但我获得的图像与 Wolfram 给出的图像大不相同:
在最后一张图像中,零频率通过使用偏移到中心,np.fft.fftshift()因此尖峰对应于频率零。
我已经发现问题np.fft.fft()在于被指定,所以 numpy 解释的是我的数据变化非常缓慢,几乎恒定,因此变换接近于常数函数的变换。
我查看了 numpy 文档和其他 SE 帖子以了解如何解决此问题,但一无所获。有谁知道如何解决这一问题?
我们可以计算 numpy看到的函数的平均斜率在哪里是将最大值与最小值分开的节点数。在这种情况下,由于 numpy 需要默认情况下,斜率约为 1/5000=0.0002


