问题描述
以下 Python 代码使用 numpy 生成正弦图的频率图:
import numpy as np
import matplotlib.pyplot as plt
import scipy.fftpack
# Number of samplepoints
N = 600
# sample spacing
T = 1.0 / 800.0
x = np.linspace(0.0,N*T,N)
y = np.sin(50.0 * 2.0*np.pi*x) + 0.5*np.sin(80.0 * 2.0*np.pi*x)
yf = scipy.fftpack.fft(y)
xf = np.linspace(0.0,1.0/(2.0*T),N//2)
fig,ax = plt.subplots()
ax.plot(xf,2.0/N * np.abs(yf[:N//2]))
plt.show()
根据上面的代码,我们绘制了一个具有两个频率的正弦波,一个频率为 50Hz,另一个频率为 80Hz。您可以清楚地看到傅立叶变换图显示了这两个频率的峰值。
我的问题:如何修改上面的代码,使 x 轴的范围为 0-100Hz?
如果我改变了
xf = np.linspace(0.0,N//2)
到
xf = np.linspace(0.0,100,N//2)
然后我的图表看起来像:
但是图表现在显示了我在 11 和 20Hz 左右的峰值,这是不正确的。当我改变我的轴时,峰值应该不会改变。
我做错了什么?
解决方法
import numpy as np
import matplotlib.pyplot as plt
import scipy.fftpack
# Number of samplepoints
N = 600
# sample spacing
T = 1.0 / 800.0
x = np.linspace(0.0,N*T,N)
y = np.sin(50.0 * 2.0*np.pi*x) + 0.5*np.sin(80.0 * 2.0*np.pi*x)
yf = scipy.fftpack.fft(y)
xf = np.linspace(0.0,1.0/(2.0*T),N//2)
fig,ax = plt.subplots()
ax.plot(xf,2.0/N * np.abs(yf[:N//2]))
ax.set(
xlim=(0,100)
)
plt.show()
只需添加 xlim