这里有一个例子。在

首先用预先确定的采样间隔创建一个正弦波。我们将组合频率为20和40的两个正弦波。记住,如果时间间隔很长,高频可能会出现混叠。在#Import the necessary packages

from scipy import fftpack

import matplotlib.pyplot as plt

import numpy as np

# sampling freq in herts 20Hz, and 40Hz

freq_sampling1 = 10

freq_sampling2 = 20

amplitude1 = 2 # amplitude of first sine wave

amplitude2 = 4 # amplitude of second sine wave

time = np.linspace(0, 6, 500, endpoint=True) # time range with total samples of 500 from 0 to 6 with time interval equals 6/500

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()

5XPNZ.jpg

请注意,在图中,两个正弦波是叠加的。一个频率为10,振幅为2,另一个频率为20,振幅为4。在

^{pr2}$

pyUOk.jpg

注意,在振幅谱中,当其他频率的振幅为零时,这两个频率被恢复。振幅值也分别为2和4。在

您可以使用fftpack.fftfreq来获得频率轴,如tom10所建议的那样

因此,代码更改为yf = fftpack.fft(y, time.size)

amp = np.abs(yf) # get amplitude spectrum

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]

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐