代码语言:javascript复制
import numpy as np#主要用于信号处理相关操作
from scipy.fftpack import fft#主要用于对信号进行傅里叶变换相关的操作
import matplotlib.pyplot as plt#主要用于数据可视化操作
t=np.linspace(0,1,1000)
#定义正弦波信号,其中包含3个频率分量:120Hz、300Hz和500Hz
sig=7*np.sin(2*np.pi*120*t) 2.8*np.sin(2*np.pi*300*t) 5.1*np.sin(2*np.pi*500*t)
#对信号进行快速傅里叶变换,得到变换后的复数信号
sig_fft=fft(sig)
#对信号频谱取绝对值
abs_sig=abs(fft(sig))
#对信号进行归一化处理
normal_sig=abs(fft(sig))/len(t)
#根据信号的对称性,取其中一半区间
half_sig=normal_sig[range(int(len(t)/2))]
x1=np.arange(len(sig))
x2=x1
x3=x1[range(int(len(t)/2))]
plt.figure(figsize=(9,9))
#显示原始信号
plt.subplot(221)
plt.plot(t[0:100],sig[0:100])
plt.title('Original wave')
#显示信号频谱的绝对值,滤除负信号频谱
plt.subplot(222)
plt.plot(x1,abs_sig,'b')
plt.title('Absolute Frequency Spectrum')
#显示归一化后的信号频谱
plt.subplot(223)
plt.plot(x2,normal_sig,'y')
plt.title('Normalized Frequency Spectrum')
#根据信号的对称性,显示半个区间的归一化信号频谱
plt.subplot(224)
plt.plot(x3,half_sig,'g')
plt.title('Half Normalized Frequency Spectrum')
plt.show()
算法:快速傅里叶变换(Fast Fourier Transform,FFT)是利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称。