上机实验标准报告样式Word格式.docx
《上机实验标准报告样式Word格式.docx》由会员分享,可在线阅读,更多相关《上机实验标准报告样式Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
一、实验目的
(1)进一步加深DFT算法原理和基本性质的理解(因为FFT只是DFT的一种快速算法,所以FFT的运算结果必然满足DFT的基本性质)。
(2)熟悉FFT算法原理。
(3)学习用FFT对连续信号和时域离散信号进行谱分析的方法分析误差及其原因,以便在实际中正确应用FFT。
二、实验内容
(1)x(n)=构造DFT函数计算x(n)的10点、20点DFT并画出图形。
(2)利用FFT对下列信号逐个进行谱分析并画出图形
a.x1(n)=(n)
b.x2(n)=cosn
c.x3(n)=sinn
以上3个序列的FFT变换区间为N=8,16。
(3)设一序列中含有两种频率成分,f1=2HZ,f2=2.05HZ,采样频率取为fs=10HZ,即x(n)=sin(2f1n/fs)+sin(2f2n/fs),要区分出这两种频率成份,必须满足N>400,为什么?
a.取x(n)(0≤n≤128),计算x(n)的DFTx(k)
b.将a中的x(n)以补零的方式使其加长到0≤n≤512,计算x(k)
c.取x(n)(0≤n<512)计算x(k)
(4)令x(k)=x2(n)+x3(n)用FFT计算8点和16点离散傅立叶变换并画出图形,分析DFT的线性
(5)令x(n)=x2(n)+jx3(n)用FFT计算8点和16点离散傅立叶变换并画出图形,分析DFT的对称性
三、实验原理
工程实际中能观测到的信号不可能是无限长的,只能从某时刻开始观测有限时间长度T的一段,这就相当于用一个窗函数对信号进行截断。
所谓信号的谱分析,就是对有限长的离散序列采用时域和频域的DFT算法进行变换,得到信号的离散谱。
因直接计算DFT的计算量与变换区间长度N的平方成正比,当N较大时,计算量太大,所以在快速傅里叶变换(简称FFT)出现以前,直接用DFT算法进行谱分析和信号的实时处理是不切实际的。
由于系数是一个周期函数:
且是对称的:
正是基于这样的基本思想出现了快速傅立叶变化算法。
它的算法形式有很多种,但基本可以分成两大类:
时间抽取法(DIT-FFT)和频率抽取法(DIF-FFT)。
两者算法思想基本一致,只是划分方式略有差异,所以这里以DIT-FFT算法为例进行说明。
当N是2的整数次方时,称为基2的FFT算法。
首先将序列x(n)分解为两组,偶数项为一组,奇数项为一组:
将x1(r)和x2(r)分别进行N/2点的DFT得X1(k)和X2(k),且:
重复这一过程,可得到x(n)的FFT。
在MATLAB中,可直接利用内部函数fft进行计算,它是MATLAB系统本身提供的,而且采用机器语言,而不是MATLAB指令编制的,因此执行速度很快。
Ifft函数用于计算快速傅立叶逆变换。
四、实验的程序代码
(1)编写一个M文件,以文件名sy3_1.m保存在当前路径,具体代码如下:
N=10;
n1=[0:
N-1];
x1=[ones(1,6),zeros(1,N-6)];
Xk1=dft(x1,N);
figure
(1);
subplot(2,1,1);
stem(n1,x1);
subplot(2,1,2);
stem(n1,abs(Xk1));
N=20;
n2=[0:
x2=[ones(1,6),zeros(1,14)];
Xk2=dft(x2,N);
figure
(2);
stem(n2,x2);
stem(n2,abs(Xk2));
在命令窗口中键入sy3_1并回车运行,可以得到如图3-1所示的图形。
图3-1
由图3-1可知,对一个信号进行时域补零,再进行FFT运算得到的离散谱,包络不变,但是间隔更小,相当于进行了频域的插值。
(2)编写一个M文件,以文件名sy3_2.m保存在当前路径,具体代码如下:
N=64;
n=[0:
x1=[ones(1,4),zeros(1,N-4)];
x2=cos((pi/4)*n);
x3=sin((pi/8)*n);
y1=fft(x1);
y2=fft(x2);
y3=fft(x3);
m1=abs(y1);
stem(n,x1);
stem(n,m1)
m2=abs(y2);
stem(n,x2);
stem(n,m2)
figure(3);
m3=abs(y3);
stem(n,x3);
stem(n,m3);
在命令窗口中键入sy3_2并回车运行,可以得到如图3-2所示的图形。
图3-2
由图3-2可知,FFT作谱分析时,整个频谱关于N-1/2对称。
一个矩形序列的频谱包络是Sa函数曲线,而单一频率的正弦信号和余弦信号的频谱为两根离散的谱线。
(3)编写一个M文件,以文件名sy3_3.m保存在当前路径,具体代码如下:
N=128;
x=sin(2*pi*2*n/10)+sin(2*pi*2.05*n/10);
X=fft(x);
stem(n,x);
stem(n,abs(X));
x1=[x,zeros(1,384)];
X1=fft(x1);
511];
stem(n1,abs(X1));
N1=512;
N1-1];
x2=sin(2*pi*2*n2/10)+sin(2*pi*2.05*n2/10);
X2=fft(x2);
stem(n2,abs(X2));
在命令窗口中键入sy3_3并回车运行,可以得到如图3-3所示的图形。
图3-3
由图3-3可知,第一个图中N=128,两个频率成分无法区分;
第二个图中N=128,然后再补零为512,由实验3-2知,补零无法提高频谱分辨率,所以两个频率成分还是无法区分;
第三个图,是截取了序列的512个数据点,这是得到的频谱图可以清楚看到有两个频率成分。
因为F=2.05-2=0.05;
fc=2.05,所以Nmin=fs/F=200。
(4)编写一个M文件,以文件名sy3_4.m保存在当前路径,具体代码如下:
N=16;
x1=cos((pi/4)*n)+sin((pi/8)*n);
在命令窗口中键入sy3_4并回车运行,可以得到如图3-4所示的图形。
a.x2(n)=cosnb.x3(n)=sinn
c.x3(n)=x2(n)+x3(n)
图3-4
由图3-4可知,两个相同长度的序列相加得到的新序列,对应的新频谱等于原信号的频谱对应相加。
即FFT具有线性性质。
(5)编写一个M文件,以文件名sy3_5.m保存在当前路径,具体代码如下:
x1=cos((pi/4)*n)+j*sin((pi/8)*n);
stem(n,abs(x1));
在命令窗口中键入sy3_5并回车运行,可以得到如图3-5所示的图形。
图3-5
由图3-5可知,x(n)=x2(n)+jx3(n),其频谱包含实部x2(n)对应的共轭对称部分和jx3(n)对应的共轭反对称部分。
这就是DFT的共轭对称性。
五、实验总结
MATLAB提供FFT函数,可以方便的进行信号的谱分析。
运行该MATLAB程序后,得到如上图所示的频谱。
当N太小时,由于参与FFT的信号小于一个周期,所以作其FFT得到的频谱不能表达原信号x(n)的频谱。
当N满足Nmin=2fc/F时,正好取样了x(n)信号的至少一个周期。
从频谱图中可以看出:
当周期重复延长一个信号时,其频谱变密,但谱线位置不变。
当N=128,然后添零至N=512时,从FFT得到的频谱中可以看出:
该频谱图比N=128的频谱图密4倍
注意:
(1)填零运算提供了较密的频谱,而没有增加任何新的信息,因此它不能提供高分辩率的频谱。
(2)为得到高分辨率的频谱,需从实验或观察中取得更多的有效数据。