这是一个例子。
首先,要创建一个正弦波,采样间隔需要预先确定。我们将结合两个频率分别为20和40的正弦波。请记住,如果时间间隔较大,高频率可能被混淆。
from scipy import fftpack
import matplotlib.pyplot as plt
import numpy as np
freq_sampling1 = 10
freq_sampling2 = 20
amplitude1 = 2
amplitude2 = 4
time = np.linspace(0, 6, 500, endpoint=True)
y = amplitude1*np.sin(2*np.pi*freq_sampling1*time) + amplitude2*np.sin(2*np.pi*freq_sampling2*time)
plt.figure(figsize=(10, 4))
plt.plot(time,y, 'k', lw=0.8)
plt.xlim(0,6)
plt.show()
请注意图中两个正弦波的叠加,一个频率为10,振幅为2,另一个频率为20,振幅为4。
这段文字讲述了一个图示,其中叠加了两个不同频率和振幅的正弦波。
yf = fftpack.fft(y, time.size)
amp = np.abs(yf)
freq = np.linspace(0.0, 1.0/(2.0*(6/500)), time.size//2)
plt.figure(figsize=(10,6))
plt.plot(freq, (2/amp.size)*amp[0:amp.size//2])
plt.show()
请注意,在幅度谱中,恢复了两个频率,而其他频率的振幅为零。振幅值分别为2和4。
您可以使用fftpack.fftfreq
来获取频率轴,正如tom10所建议的那样。
因此,代码需要更改为
yf = fftpack.fft(y, time.size)
amp = np.abs(yf)
freq = fftpack.fftfreq(time.size, 6/500)
plt.figure(figsize=(10,6))
plt.plot(freq[0:freq.size//2], (2/amp.size)*amp[0:amp.size//2])
plt.show()
我们只绘制振幅谱的正部分
[0:amp.size//2]
。
numpy.fft.fftfreq
或rfftfreq
(视情况而定)。 - tom10