数字信号处理 实验一 FFT变换及其应用.docx
《数字信号处理 实验一 FFT变换及其应用.docx》由会员分享,可在线阅读,更多相关《数字信号处理 实验一 FFT变换及其应用.docx(23页珍藏版)》请在冰点文库上搜索。
数字信号处理实验一FFT变换及其应用
实验一FFT变换及其应用
一、实验目的和要求
1.在理论课学习的基础上,通过本次实验,加深对DFT原理的理解,懂得频域DFT与时域卷积的关系,进一步加深对DFT基本性质的理解;
2.研究FFT算法的主要途径和编程思路,掌握FFT算法及其程序的编写过程,掌握最基本的时域基-2FFT算法原理及程序框图;
3.熟悉应用FFT实现两个序列的线性卷积的方法,利用FFT进行卷积,通过实验比较出快速卷积优越性,掌握循环卷积和线性卷积两者之间的关系;4.熟悉应用FFT对典型信号进行频谱分析的方法,初步了解用周期图法作随机信号谱分析的方法,了解应用FFT进行信号频谱分析过程中可能出现的问题,以便在实际中正确应用FFT;
5.掌握使用MATLAB等基本开发工具实现对FFT编程。
二、实验设备和分组
1.每人一台PC机;
2.Windows2000/XP以上版本的操作环境;
3.MatLab6.5及以上版本的开发软件。
三、实验内容
(一实验准备
1.用FFT进行谱分析涉及的基础知识如下:
信号的谱分析就是计算信号的傅里叶变换。
若信号是模拟信号,用FFT进行谱分析时,首先必须对信号进行采样,使之变成离散信号,然后用FFT来对连续信号进行谱分析。
若信号本身是有限长的序列,计算序列的频谱就是直接对序列进行FFT运算求得X(k,X(k就代表了序列在[0,2]之间的频谱值。
幅度谱:
相位谱:
为避免产生混叠现象,采样频率fs应大于2倍信号的最高频率fc,为了满足采样定理,一般在采样之前要设置一个抗混叠低通滤波器。
用FFT对模拟信号进行谱分析的方框图如下所示。
图1.1FFT对模拟信号进行谱分析的方框图
2.应用FFT实现快速卷积涉及的基础知识如下:
一个信号序列x(n与系统的卷积可表示为下式:
Y(n=x(n*h(n=∑+∞
-∞
=-mmnhmx((
当是一个有限长序列,且0≤n≤N-1时,有:
Y(n=∑-=-1
((Nnmnxmh
此时就可以应用FFT来快速计算有限长度序列的线性卷积。
也就是先将输入信号x(n通过FFT变换为它的频谱采样值X(k,然后再和滤波器的频响采样值H(k相乘,最后再将乘积通过快速傅里叶变换(简称IFFT还原为时域序列,即得到输出。
如下图所示。
图1.2FFT实现卷积的过程示意图
2.1.当序列x(n和h(n的长度差不多时
设x(n的长度为N1,h(n的长度为N2,则用FFT完成卷积的具体步骤如下:
①为使两有限长序列的线性卷积可用其循环卷积代替而不发生混叠,必须选择循环卷积长度N≥N1+N2-1
②用补零方法使x(n和h(n变成列长为N的序列。
③用FFT计算x(n和h(n的N点离散傅里叶变换
④完成X(k和H(k的乘积Y(k。
⑤用FFT计算的离散傅里叶反变换得y(n
2.2当x(n长度很长时可采用分段卷积的方法即重叠相加法和重叠保留法。
(二实验项目
(1用FFT进行频谱分析
1对高斯序列进行频谱分析
代码如下:
n=0:
15;
p=8;
q=2;
x=exp(-1*(n-p.^2/q;
closeall;
subplot(3,1,1;
stem(fft(x;%利用fft函数实现傅里叶变换
subplot(3,1,2;
stem(abs(fft(x;%绘制幅度谱
subplot(3,1,3;
stem(angle(fft(x%绘制相位谱
代码是为了得出此高斯序列的快速傅里叶变换,得到DFT的频谱特征图、幅频特征图和相频特征图。
a固定信号参数P=8,改变q的值依次为2、4、8,结果如下图:
P=8,
q=2
图2-1
P=8,
q=4
图2-2
P=8,
q=8
图2-3
结果分析:
从图中可以看出,当固定p的值,改变q,可观察到:
随着q的增加,幅频图中趋近与0和等于0的个数增多。
可见q的增大使DFT幅频图中幅度平均值减小,且p是序列的对称轴,时域轴都关于n=8对称。
当q=2、4、8时,频域变化越来越快,中间水平部分越来越大,混叠减弱。
b固定信号参数q=8,改变p的值依次为8、13、14,结果如下图:
q=8,P=8
图2-4
q=8,
p=13
图2-5
p=14,
q=8
图2-6
结果分析:
当固定q的值,改变p,可观察到:
随着p的增大,图形越来越偏
离真实值,当p=14时泄漏现象较明显,频域波形随p的增大频率
分量会增多,易产生混叠。
2对正弦序列进行频谱分析
代码如下:
n=0:
15;%定义序列长度
a=0.1;
f=0.0625;
x=exp(-a*n.*sin(2*pi*f*n;
closeall;
subplot(2,1,1;
stem(x;
title('衰减正弦序列';
subplot(2,1,2;
stem(abs(fft(x;%绘制幅度谱
title('x信号的频谱'
a固定参数a=0.1,改变f,分别为0.5625、0.4375、0.0625,结果如下图:
f=0.5625
图2-7
f=0.4375
图2-8
f=0.0625
图2-9
结果分析:
观察可知,当f=0.4375,0.5625时,时域图像关于Y轴对称,频域完
全相同。
随着f值增大,时域序列周期变小。
频域序列的高频分量逐渐
增多,低频分量逐渐减少,因为所取的频率不符合采样定理,以致发
生严重的频谱混叠和泄漏。
3对三角序列进行频谱分析
代码如下:
fori=1:
4
x(i=i;
end
fori=5:
8
x(i=9-i;
end
fori=9:
16
x(i=0;
end
closeall
subplot(2,1,1;stem(x;
subplot(2,1,2;
stem(abs(fft(x%绘制幅度谱
其频谱图如下所示:
图2-10
结果分析:
此编程实现三角序列,中间两个值是相等的,然后我们根据fft函数快速求出x在各个n值上所对应的傅里叶变换值,得到结果如下:
Y=[18.46403.1605-16.3681i-5.3021-2.2394i-0.3336+0.3570i0.1333+0.0145i0.7981-0.5599i-0.0955-0.4109i0.3750–
0.0802i0.06460.3750+0.0802i-0.0955+0.4109i0.7981+0.5599i0.1333-0.0145i-0.3336-0.3570i-5.3021+2.2394i
3.1605+16.3681i]然后分别求出各点处的大小(实部的平方加虚部的平方开根号,得出来的大小和图像近似相等。
此三角序列的时域表达式为:
当1≤n≤4时x(n=n;当5≤n≤8时x(n=9-n。
a反三角序列:
代码如下:
Fori=1:
4
x(i=5-i;
end
Fori=5:
8
x(i=i-4;
end
closeall
subplot(2,1,1;stem(x;
subplot(2,1,2;
stem(abs(fft(x,16
图2-11
b半三角序列(直角三角形序列:
代码1如下:
fori=1:
8
x(i=i-1;
end
closeall
subplot(2,1,1;stem(x;
subplot(2,1,2;
stem(abs(fft(x
图2-2代码2如下:
fori=1:
8
x(i=8-i;
end
closeall
subplot(2,1,1;stem(x;
subplot(2,1,2;
stem(abs(fft(x
图2-13
c只有一个峰值:
代码如下:
fori=1:
4
x(i=i;
end
fori=5:
8
x(i=8-i;
end
closeall
subplot(2,1,1;stem(x;
subplot(2,1,2;
stem(abs(fft(x,16
图2-14
(2使用FFT实现卷积运算
已知:
x1(n=RN(n,1≤N≤10;x2(n=8sin(0.5*pi*n+41≤N≤10;x3(n=0.8*exp(3*n1≤N≤10;使用FFT实现以上3种卷积。
代码如下:
n=[1:
1:
10];
N1=length(n;
xn1=ones(1,N1;
xn2=8*sin(0.5*pi*n+4;
xn3=0.8*exp(3*n;
N=N1+N1-1;
X1k=fft(xn1,N;
X2k=fft(xn2,N;
X3k=fft(xn3,N;
Yk1=X1k.*X2k;
Yk2=X1k.*X3k;
Yk3=X2k.*X3k;
yn1=ifft(Yk1,N;
yn2=ifft(Yk2,N;
yn3=ifft(Yk3,N;
x=0:
N-1;
subplot(3,1,1;
stem(x,yn1,'.'
subplot(3,1,2;
stem(x,yn2,'.'
subplot(3,1,3;
stem(x,yn3,'.'
用FFT计算卷积,实验结果如下图:
图2-15
结果分析:
X1n=[111111111];x2n=[80-8080-8080];X1n*x2n=[0880088008008800880],其IFFT变换为8*(exp(j*2*w+exp(j*3*w+exp(j*6*w+exp(j*7*w+exp(j*10*w+exp(j*13*w+exp(j*14*w+exp(j*17*w+exp(j*18*w=8*(1+exp(j*w*(exp(j*2*w+exp(j*6*w+exp(j*13*w+exp(j*17*w+8*exp(j*10*w,Matlab运行的结果与手工计算的结果完全一致,由此可知此代码是正确的。
(3一个综合性实例
1创建简易界面
使用MATLAB中的图形用户接口功能,设计简单的操作界面,如图1.6所示。
界面中包含列表框,滑动块,按钮和静态文本。
其中列表中,包含正弦波、方波和锯齿波;移动滑动块可以改变图形的周期,且周期数在静态文本中显示;点击“退出”按钮则退出程序。
界面如下图:
图2-16
a当列表框中选择‘正弦波’,周期数为4
时,产生的时域波形和频谱图如下:
图2-17
b当列表框中选择‘方波’,周期数为4时,产生的时域波形和频谱图如下:
图2-18
c当列表框中选择‘三角波’,周期数为4时,产生的时域波形和频谱图如下:
图2-19
班级:
姓名:
学号:
d当列表框中选择‘锯齿波’,周期数为4时,产生的时域波形和频谱图如下:
图2-20四、实验小结本次实验按照实验指导书,基本是按照原有的代码和步骤基础上来做的,实验中也遇到了一系列的问题:
一,前后参数不一致,即在改变参数的时候,由于粗心使得前后参数形式不一致,而导致运行出错;二,在matlab中新建文件,若以中文命名,然后保存后运行,则系统会因为识别不了所命名的中文而导致运行会出错;三,只会用datacursor来将坐标点贴标签,仍然不会用编写代码的方式将各坐标点的数值贴标签。
当然,在试验中我也学到了一些知识:
一,使用FFT实现卷积运算时,三个序列互相形成的三个卷积可以整合一下,显示在一个图像中,这样节省了时间也提高了效率。
二,在三角序列中,可通过函数的改变来实现正三角、倒三角以及直角三角等;对于快速傅里叶变换,知道如何用MATLAB解决卷积问题,通过此次实验发现,用FFT函数变化,要比手工计算要方便的多,而且既准确又省时间;三,在编写matlab代码的时候,放在新建文件中编写,更方便去改变相应的参数。
第16页共16页