FFT在matlab中的用法
一、FFT的物理意义
FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。另外,FFT可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。 虽然很多人都知道FFT是什么,可以用来做什么,怎么去做,但是却不知道FFT之后的结果是什意思、如何决定要使用多少点来做FFT。 一个模拟信号,经过ADC采样之后,就变成了数字信号。采样定理告诉我们,采样频率要大于信号频率的两倍,这些我就不在此罗嗦了。 采样得到的数字信号,就可以做FFT变换了。N个采样点,经过FFT之后,就可以得到N个点的FFT结果。为了方便进行FFT运算,通常N取2的整数次方。
二、计算序列的FFT变换
求序列{2,3,3,2}的DFT变换。
>> N=4;
>> n=0:N-1;
>> xn=[2 3 3 2];
>> xk=fft(xn)
运算结果如下:
xk =
10.0000 + 0.0000i -1.0000 - 1.0000i 0.0000 + 0.0000i -1.0000 + 1.0000i
带入公式检验:
X[k]=∑n=0N−1X[n]WNnkX[k]=\sum_{n=0}^{N-1}X[n]W_N^{nk}X[k]=n=0∑N−1X[n]WNnk
X[0]=2W40+3W40+3W40+2W40=10X[0]=2W_4^{0}+3W_4^{0}+3W_4^{0}+2W_4^{0}=10X[0]=2W40+3W40+3W40+2W40=10
X[1]=2W40+3W41+3W42+2W43=−1−iX[1]=2W_4^{0}+3W_4^{1}+3W_4^{2}+2W_4^{3}=-1-iX[1]=2W40+3W41+3W42+2W43=−1−i
X[2]=2W40+3W42+3W44+2W46=0X[2]=2W_4^{0}+3W_4^{2}+3W_4^{4}+2W_4^{6}=0X[2]=2W40+3W42+3W44+2W46=0
X[3]=2W40+3W43+3W46+2W49=−1+iX[3]=2W_4^{0}+3W_4^{3}+3W_4^{6}+2W_4^{9}=-1+iX[3]=2W40+3W43+3W46+2W49=−1+i
公式运算结果与matlab仿真结果一致。
xk与xn的维数相同,共有4个元素。xk的第一个数对应于直流分量,即频率值为0,在傅里叶级数的叠加中,它仅仅影响全部波形相对于数轴整体向上或是向下而不改变波的形状。
三、计算三角信号的FFT变换
1、分析采样点N的数量对FFT结果的影响
做n个点的FFT,表示在时域上对原来的信号取了n个点来做频谱分析,n点FFT变换的结果仍为n个点。
信号一:y=0.5sin(2pi20t)+2sin(2pi40t)
可以很容易的看出信号的由频率为20和40的两个分量组成,其中最高频率为40,根据奈科斯特定律,
在这里我将抽样信号fs设定为100HZ,采样点N分别设定为128和2048。
N=128
>> fs=100;
>> N=128;
>> n=0:N-1;
>> t=n/fs;
>> y=0.5*sin(2*pi*20*t)+2*sin(2*pi*40*t);
>> x=fft(y,N);
>> m=abs(x);
>> f=n*fs/N;
>> subplot