【发布时间】:2019-11-09 21:06:41
【问题描述】:
我正在尝试一些对简单正弦函数进行 FFT 的示例代码。下面是代码
import numpy as np
from matplotlib import pyplot as plt
N = 1024
limit = 10
x = np.linspace(-limit, limit, N)
dx = x[1] - x[0]
y = np.sin(2 * np.pi * 5 * x) + np.sin(2 * np.pi * x)
Y = np.abs(np.fft.fft(y) ** 2)
z = fft.fftshift(np.fft.fftfreq(N, dx))
plt.plot(z[int(N/2):], Y[int(N/2):])
plt.show()
根据给定的函数,很明显应该在频率 1 和 5 处有两个尖峰。但是,当我运行此代码时,我得到以下图。
显然,尖峰不在应有的位置。此外,我注意到频率缩放对点数N 以及我设置的间隔限制limit 很敏感。例如,设置N = 2048 会给出以下图表。
如您所见,尖峰的位置发生了变化。现在保持N = 1024 并设置limit = 100 也会改变结果。
如何才能使频率轴始终正确缩放?
【问题讨论】:
标签: python numpy fft frequency