import numpy as np
from scipy.fftpack import fft
import matplotlib.pyplot as plt
from matplotlib.pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] #显示中文
mpl.rcParams['axes.unicode_minus']=False #显示负号
N = 255 #采样点的个数
x = np.arange(0,2*np.pi,2*np.pi/N)
#长生频率为50、7、100hz的信号
y = 7 * np.sin(50*x) + 5.5 * np.sin(7 * x) + 3 * np.sin(100 * x)+10
fft_y = fft(y) # 快速傅里叶变换
fft_y = fft_y[range(N//2)] #折半,丢掉镜像对称的信号
fft_a = np.abs(fft_y) #求复数的模值
fft_a = fft_a*2/N #幅值的N/2倍就是对应模值
fft_a[0] /= 2 #直流分量的模值为幅值的N倍
w = np.arange(0,N//2,1) #频率分辨率=采样率/采样点的个数,但这里做了折半处理
plt.figure()
plt.title("时域波形")
plt.plot(x,y)
plt.figure()
plt.title("频域波形")
plt.plot(w,fft_a)
plt.show()
效果图: