FFT原理
原理目前还未搞懂
FFT程序
安装以下这几个库,(cmd下输入pip install matplotlib)
import numpy as np
from scipy.fftpack import fft,ifft
import matplotlib.pyplot as plt
import seaborn
1、生成一个0到1的等差序列 列表,用来表示X轴,即采样点。还有另一个意义,1刚好表示1秒,则列表的长度,就是采样频率Fs
例如:以下是生成10个点的等差数列,即采样频率Fs=10Hz
2、生成纵坐标y值, 这是x的函数
6----表示的是正弦波的幅值
当10x等于1的时候,括号里的值就是 2pi1, 刚好是一个周期的正弦波,如下图。如果x=1,则括号里是 10个2pi,则是10个周期正弦波。所以10是正弦波的频率。
3、调用函数对 y进行傳里叶变换, 每一个y值对应一个复数,所以变换出来的也是一个列表
4、分别对变换出来的复数,取实部, 虚部,取模
yy=fft(y) #快速傅里叶变换
yreal = yy.real # 获取实数部分
yimag = yy.imag # 获取虚数部分
yf=abs(yy) # 取模
5、归一化
如果需要归一化,则进行归一化,不然可以不归一化
yf1=yf / ((len(x)/2)) #归一化处理
归一化就是用模除以 采样点个数的一半, 没想明白?
yf2 = yf1[range(int(len(x)/2))] #由于对称性,只取yf1 列表的一半区间
6、生成X轴坐标
xf = np.arange(len(y)) # 这里就是生成一个0-n的列表
xf1 = xf
xf2 = xf[range(int(len(x)/2))] #取一半区间
7、画出FFT图,并显示出来
plt.plot(xf2,yf2,‘b’)
plt.show()