快速傅里叶变换np.fft.fft的使用
np.fft.fft进行快速傅里叶变换,需要特别注意的是,默认是对最后一个维度的数据进行fft变换,若你输入的是一维数组,请忽略后面,如果你是二维列矢量,如果不将数据变为行矢量或将axis参数设为0,将得到与输入相同的结果,导致后续的计算无缘无故出错。
二话不说,直接上代码,产生一个正弦信号,并对其进行fft变换,对应的频率点可通过np.fft.fftfreq计算得到,需要输入的两个参数分别是FFT的长度和采样时间间隔。
需要注意的是fft计算出来的幅度一般与真实的是不一样的,在ifft中会考虑这个因素,因此ifft恢复的信号与原来的信号是相同的。如果需要获得真实结果则需要乘以“2/FFT长度” 这个因子。
得到的频谱关于奈奎斯特频率对称,实际只需要取前一半的频谱信号即可。
import numpy as np import matplotlib.pyplot as plt # 产生正弦信号 Ts=0.001 t = Ts*np.array(range(10000)) x = np.sin(2*np.pi*325*t) # FFT变换 X=np.fft.fft(x,np.size(x,0),axis=0)/x.size*2 freq=np.fft.fftfreq(np.size(x,0),Ts) plt.figure(1) plt.plot(t,x) plt.show() plt.figure(2) plt.plot(freq,np.real(X)) plt.show()
图1 原始信号
图2 fft频谱图
