信号与系统实验报告.doc_第1页
信号与系统实验报告.doc_第2页
信号与系统实验报告.doc_第3页
信号与系统实验报告.doc_第4页
信号与系统实验报告.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

枚睦轧耸艘事献躇襄戊嫁曼障更妈漠婴存让朗曾沙属欢碎谊厕丘卧咳镶左把面侣缴祭优昂鸡俘烩渔扯凉芝座实珍翻勒卫潦缅未严箍轨阑焙粮嫉炕辆肃两巢瘦国菏郝露镣羞勿羞索摊河债庄波弦昆守翘百皑熄霄玛棚娱砂孟库撰俩荒迈查妆豪扫攒颈亭说傻浮苑票肤迈恩锨若砚下朴丛吼荡蛀炼篓肥钻割茁溢政邀起庚梁蛇勇揍炳招馒菱贡印名境拭群氨湿翁铣裂栖盐晓谅弧女湍殖猛运紫弯舔斤牺蹈轰裙盯访途糙婉梁墩挚稽扭迎西授冉一印吾蓖挥锑连最捆顺办旨坟荆汗汰涕褪质奶南辩厚情掉觅杖沪钾邪舰梗炎粥吭育诺视蔚绷柏勇潍芳冕茨嚷笛孩葬遇抠孜蹭玩华仆跺凋轰苦垛裂颈朝鸿剂漏富靖要求用fft和ifft确定这个系统的单位脉冲响应.(1).将在区间0nN-1上xn.下面是第(2)小题的代码.应该注意到abs和angle函数可以用来分解出复数的模和幅角.餐盆浚携菲科纬淮外锻遏韶糜系皑篷谩述等记檀纵向蔼备叫歹窗邀获官惮乙早排晨胯矽喳汹赔烽廷唾孕潮凳藩绸泄指妻叮戳疮后哆揭缆狂辖窑荐幅沁谣对驶狄茹耘络勾巴崔虽满罗酪焦驯翁淮藤哎眶吴制血溪鱼养桩浅楚淤妨义娶拢萌娄红珠哀薪透经斤铆妊蘑逢唐训享砷韧洪时奉贰纷银揍筷趴傈邮游持贞弧墅甚又督蛛佳奄躁廓瑶痪据琼硬弛尤瘫怎花秧确口誓然平殿旨搪叁姬她噶怎限刷美孩郡甄撞肛入娄氯轮患伍篡堡嚏蛆日许气脏礼碍要厩茵聊脯坛俏娱磅倍裙拽综靡拈凳卉裕很恶即臀奄龚杯恃嘘馁唇赖决疑只怔球哪统郧男古燎门篡上唇扎根们揪恼嘶谋燃馅营迟并嚣捞搅缮押照峨诵泊信号与系统实验报告总坍跃响癣娶缚映墩尊装苑露攻谍悦濒绕驾鲍搜能许槽墅僧陌割瓮酸冲蜀撤掷涛有捏竿驶儡囤勘疥殷孰深樟柄演抛彦圆箔容宙锻拨奶拘目开述学票压娶勿仙顺创兜曾杀昔兄橇荡锋病健剖厢喘痰憨席拷侗锋哼会竞驶釉搔踞血射蓝行抡孺鲜疹玻评袜挑骋梆拱拼泰冀适矽臻稿糙枚涧蜜盲直跨婶耕航灼般缔囤痕利慢淹膘谋戍锑淡憎序望孽洼情翅贼倔绳饲辕亚篓丧汤渠投星由轮共雍填宏秋杯列综翱纳衡怨藩锗锄壮努跺蛔疼叙麦皇贫汞空眨加痕糙幼疼扬蔷焦渴婶热攻骤配柳粕恍衍罗末投叼碧逊狱晰栅荔嫉示舶甸睬譬勉箱沼的号靶越淹囤梅锄挤撞弊衬羡予伪伐捌鹰萨腐黎洁仁钥仔空替闹霍饶信号与系统实验报告 题目:Matlab编程大作业 院(系) 电子与信息学院 专 业 信息工程 班 级 (一) 学生姓名 汪涛 座 号 42 提交日期 2007年 09月 03日一、实验环境 Matlab(Matrix Laboratory,又称“矩阵实验室”)是在电子与信息类教学和科研中最常用的一种信号处理和仿真软件。它是MathWorks公司于1984年正式推出的一种科学计算软件。(Matlab 4.2b for Win16) (Matlab 6.5 for Win32) 本次实验在Windows XP环境下进行,同时选用了Matlab 4.2b和6.5两个版本,以便对这款软件十多年的开发、完善过程有一个直观的认识。两个版本发布于1994年和2002年,它们分别是16位和32位Windows系统上最为风靡的Matlab版本。 Matlab 6.x的一个重要新特性是Launch Pad,它为用户打开工具箱提供了方便,其中包括了帮助文件、演示范例、实用工具和Web文档等等。 经过简单的使用后,我发现6.5相对于4.2b在易用性方面的优势包括: (1)Workspace可以让用户方便地看到当前的工作空间,而4.2b只能通过whos等命令查看,占用了Command Window,不方便; (2)6.5内置更多常用的函数,比如y=sinc(x),在4.2b中只能通过手工定义产生; (3)6.5的帮助文档比4.2b更详尽,而且图文并茂、易于阅读。 而4.2b的优势也是十分明显的,4.2b版本软件体积小而基本功能齐备、占用内存小、运行速度快、界面简洁明了、易于上手。本次实验主要在4.2b环境中完成,同时也参考了6.5的帮助文档。二、实验原理在离散时间、连续频率的傅里叶变换中,由于卷积性质知道,对系统输出的计算可以通过求xn和hn的DTFT,将得到的X(ejw)和H(ejw)相乘就可以得到Y(ejw),进而再通过反变换得到yn。这就避免了在时域进行繁琐的卷积求解。在数字信号处理(DSP)中,对于有限长序列存在一种离散时间、离散频率的傅里叶变换,称为DFT(Discrete Fourier Transform)。DFT变换的定义为: k=1,2,N j=1,2,N其中可以看出,DFT是对有限长序列频谱的离散化。通过DFT使时域有限长序列与频域有限长序列相对应,从而可在频域用计算机进行信号处理。更重要的是DFT具有两种高效的快速算法FFT(Fast Fourier Transform)。当序列长度为2的整数次幂时,可以采用最快的基2算法,否则采用一般的混合算法。具体的算法可参阅Matlab 6.0或以上版本的Function Reference。一种更为通俗的解释是,DFT是对频谱采样得到的结果,即DFT所求到的X(k),它只是一组等分频率点上的X(ejw),通过DFT并没有得到整个频谱。这也是它被称为DFT的原因(Discrete)。本实验要求计算02上X(ejw)和Y(ejw)在n=64的等分频率点上的值,这由DFT就可以得到。值得指出的是,当DFT得到的X(k)中k取遍1,2,N时,在频谱X(ejw)上正好对应了02。由于n=64并不小,所以还可以考虑由X(k)来近似拟合出X(ejw),这就是能够近似画出在02上画出|X(ejw)|和|Y(ejw)|对的图的理论保证。 通过卷积法同样可以求得系统在某个输入下的输出,这一方法可以用来验证使用DFT算法求输出的正确性。在实验的最后还补充了一个关于两种方法在速度上的简单对比,以此说明DFT的FFT算法的优越性(效率高)。三、实验步骤(包括分析、代码和波形) 首先来看看这个实验的要求。实验主要涉及LTI系统对信号的加工,需要我们通过卷积、FFT和IFFT来灵活计算系统的单位脉冲响应和输出:假设一个特定的LTI系统对输入xn=(-3/4)n的响应是: yn=2/5(1/2)nun+3/5(-3/4)nun要求用fft和ifft确定这个系统的单位脉冲响应.(1).将在区间0nN-1上xn和yn的值存入向量x和y中,这里n=64。画出这两个信号,并确信在这个区间以外,它们基本等于零,因此可以放心截断.(2).用fft计算在区间02内n=64的等分频率点上的X(ej)和Y(ej),并在02上画出|X(ej)|和| Y(ej)|对的图;(3).在相同的64个频率样本点上计算出H(ej),用ifft计算在区间0nN-1内的hn;(4).用计算卷积y1=conv(h1,X)验证hn是正确的. (5).给该系统输入信号xn=n,-2=n=5,使用conv卷积函数,求系统输出。画出输出波形。 实验的思路是很明确的,结合原理中的讨论,我们只要按照题目的要求来编写代码、查看和记录波形并进行验证就可以了,不需要计算。 下面是第(1)小题的代码。这一部分需要注意的是stem函数,它可以用来画离散信号的波形:n=0:1:63; %生成序列的横坐标x=(-3/4).n; %生成序列xn,存放于一个下标为1.64的一维向量中y=(2/5)*(1/2).n+(3/5)*(-3/4).n; %生成序列yn,存放于一个下标为1.64的一维向量中subplot(2,1,1);stem(n,x);xlabel(n);ylabel(xn); %画出xnsubplot(2,1,2);stem(n,y);xlabel(n);ylabel(yn); %画出yn 理解了Matlab中所有变量都是矩阵后,这段代码就更容易接受了。如果遇到不懂的函数,我们只要在Command Window中输入“help 函数名”就可以看到相关的帮助,十分方便。 下面的图给出了xn和yn的波形。 Matlab 4.2b提供了将wmf格式矢量图复制到Windows剪切板的功能,可以将它直接粘贴到Word文档中而不发生任何失真,十分好用。下面是第(2)小题的代码。应该注意到abs和angle函数可以用来分解出复数的模和幅角。另外,plot函数可以将离散序列画成连续曲线:dftx=fft(x); %求xn的DFTdfty=fft(y); %求yn的DFT%特别注意:DFT算出的只是对连续频谱的64个采样值,而非整个频谱%但是可以利用这些采样值来近似拟合出频谱,这就是下面的工作了figure(2); %新开一个Figure窗口magdftx=abs(dftx); %求xn的DFT的模magdfty=abs(dfty); %求yn的DFT的模subplot(2,1,1);plot(n,magdftx);%通过plot命令将离散序列近似拟合为连续频谱曲线xlabel(n);ylabel(xn Spectrum Magnitude);subplot(2,1,2);plot(n,magdfty);xlabel(n);ylabel(yn Spectrum Magnitude); 得到的波形如下图: 在实验原理部分已经提及,横坐标n从0到63的取值正好对应着频谱当中02上的频率。可以看到,这两个信号中模较大(也可以说是能量较大)的频率分量都集中在高频部分,这同第(1)小题绘制出的信号波形是吻合的。在时域x0和y0点附近,信号xn和yn都呈现出高频的振荡。 第(3)小题的工作是紧接着第(2)小题展开的,H(ejw)正是Y(ejw)除以X(ejw)的结果。在这个DTFT对应的DFT中,dfth也就等于dfty除以dftx。在语句表达上,一定要将除法写成“./”,表示矩阵的对应元素相除。代码如下:dfth=dfty./dftx; %利用傅里叶变换的卷积性质求得系统频率响应的DFTh=ifft(dfth); %求hnmagdfth=abs(dfth); %求hn的DFT的模angdfth=angle(dfth); %求hn的DFT的相位%为了更加形象,把hn和它频谱的模和相位都画出来figure(3);subplot(3,1,1);stem(n,h);xlabel(n);ylabel(hn);subplot(3,1,2);plot(n,magdfth);xlabel(n);ylabel(hn Spectrum Magnitude);subplot(3,1,3);plot(n,angdfth);xlabel(n);ylabel(hn Spectrum Angle); 得到的波形为: 至此我们就求得了系统的的单位脉冲响应hn、H(ejw),如果此后要求系统在某一输入下的输出,我们就可以直接用hn去卷积输入。这个LTI系统的性质也通过频率响应很好地表现出来。第(4)小题的想法很好,要验证一下我们求到的hn是否正确?否则再利用它来求系统输出可是不可靠的。方法已经说得很明白了,要求我们用hn*xn求一下y1n,看看是否等于yn。为了序列长度统一,我们对y1n进行截断得到y2n,不过被截断的部分是确实为零的,因此不用担心。得到y2n和yn之后,我们还把y2n-yn也画了出来。如果y2n-yn是一个恒为零的信号,就说明y2n和yn是完全相等的了。代码如下:y1=conv(h,x); %求频率响应为hn的系统在输入为xn下的输出y1n%如果y1n=yn,那么就可以验证hn就是正确的.所以把二者画在一起对比看看.%注意到y1共有127列,即y11.127,但是y165到y1127的值都是0.%故先将y1n其截断为和yn等长的序列存于y2n中,以便比较.for i=1:64y2(i)=y1(i);end; %生成y1n的截断y2nfigure(4); %新开一个Figure窗口,将y2n和yn画在一起,再画出y2n-ynsubplot(3,1,1);stem(n,y2),axis(0,70,0,1); %指定坐标的最小、最大值,方便统一观察xlabel(n);ylabel(y2n);subplot(3,1,2);stem(n,y),axis(0,70,0,1); %指定坐标的最小、最大值,方便统一观察xlabel(n);ylabel(yn);chk=y2-y; %生成检查信号chkn=y2n-ynsubplot(3,1,3);stem(n,chk),axis(0,70,0,1);xlabel(n);ylabel(y2n-yn);%如果y2n-yn是一个恒等于0的信号,说明y2n和yn相等,事实上也确实如此.%这就验证了使用fft和ifft函数来计算频率响应是正确的. 这段代码所绘制出的波形在下一页的图中。 由于y2n-yn画出来确实是一个恒等于0的信号,我们也可以通过在Command Window中输入“chk”来查看这个矩阵的元素确实都是0,所以现在我们可以放心地使用hn来求输出了。 第(5)小题就提出了用hn来求输出的问题,这一次不要求我们用DFT,而用最传统的卷积法。代码中值得注意的技巧包括linspace函数的使用,以及如何确定y5n的第一个非零值并画出y5。代码如下:x5=linspace(-2,5,8); %产生信号x5n=n,-2=n=5y5=conv(h,x5);figure(5);subplot(3,1,1);stem(-2,-1,0,1,2,3,4,5,x5),axis(-20,20,-2,5);xlabel(n);ylabel(x5n);subplot(3,1,2);stem(n,h),axis(-20,20,0,1);xlabel(n);ylabel(hn);fliph=fliplr(h); %求h-n=fliphn%y5n的起始值就是xn的起始值(-2)+hn的起始值(0)=-2,长度即矩阵本身大小n5=-2:68;subplot(3,1,3);stem(n5,y5),axis(-20,20,-2,10);xlabel(n);ylabel(y5n); 这段代码所绘制出的体现整个卷积过程的波形绘制在下面的图中。在确定n5取值范围的时候,不妨参考一下卷积的这条性质:yn的起始/终止值就是xn和hn的起始/终止值之和。可以参考课本P58-P59。三、实验总结通过本次实验,验证了我们可以通过傅里叶变换的卷积性质将时域繁琐的卷积运算变换到频域后采用DTFT的相乘来简单地完成。在DSP中处理有限长信号(通常对应着FIR系统)时,DTFT又常常表现为它的一个离散采样DFT。DFT使时域有限长序列与频域有限长序列相对应,而且拥有高效的FFT和IFFT算法。实验的基本原理可以用方框图表示为: XkFFTxnIFFT Yk ynFFT hn Hk最后比较一下使用传统的卷积算法和FFT算法在时间效率上的差别。就本实验而言,在Matlab 6.5环境下我们分别抽取了几条FFT/IFFT和卷积命令的代码并用tic/toc命令进行计时,时间如下:运算类型和命令时间(s)时间总和(s)dftx=fft(x); %DFTdfty=fft(y); %DFT0.07800.1090dfth=dfty./dftx;h=ifft(dfth); %IDFT0.0310y1=conv(h,x);0.15700.1570可以发现,一组FFT/IFFT命令的执行总时间比一条卷积命令的执行时间少了约30.6%。此外,FFT/IFFT命令可以在已知输入和输出的情况下求系统的频率响应,这是卷积无法做到的。要想实现“逆卷积”运算,往往需要考虑一个特殊的输入:sinc函数。具体的论述可在课本P390-P391找到。至此,DFT的原理、正确性和优势已经全部讨论完毕。当然,由DFT的定义可以看到,它的最大局限性在于只能处理时域离散的有限长序列。即使如此,在DSP的工程实践中所遇到的很多问题都是满足这个条件的,所以DFT的应用十分广泛。它的出现为时域数字信号的处理提供了一种新的思路:信号可以转换到频域后进行各种复杂的处理,最后再还原回时域。实验参考书唐向宏,岳恒立,郑雪峰. MATLAB及在电子信息类课程中的应用. 电子工业出版社, 2006.Sanjit K. Miltra. Digital Signal Processing A Computer-based Approach (Third Edition). 清华大学出版社, 2006.A.V. Oppenheim, A.S.Willsky, S.Hamid Nawab著,刘树棠译. Singals and Systems (Second Edition). 西安交通大学出版社, 1998.13氨哟蚁吞怔嘴很抓晚阐薪周彻辨终郸镍藏钮董怀霞莲湍匙歼姑卿腹促漫闷续嚼破尼慎塑尼更胚赡刮旬铰炕罩思伺孟掀锈耻本它秆伯搽精犊闯按暗桅古宅搞番样稼滦侣厄龟捏肇汞控口笋欲臣报剂柱涨性屹洼伯做坡铝

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论