matlab实验报告(实验5) - 图文

发布时间 : 星期四 文章matlab实验报告(实验5) - 图文更新完毕开始阅读

学生实验报告

开课学院及实验室:机电学院 2012年12 月28日

机电学学院 年级、专院 业、班 姓名 学号 实验课程名称 MATLAB程序设计 成绩 实验项目名称 实验5:MATLAB语言的程序设计 指导老师 一、 实验目的 1、 掌握M脚本文件和函数文件的创建方法,理解两者在形式上和运行上的区别; 2、 理解基本空间和函数空间的含义。 3、 掌握以控制流进行MATLAB程序设计的方法以及向量化程序设计方法,了解两者之间的异同; 二、 实验原理 1、 M脚本文件和函数文件 用MATLAB语言编写的程序,称为M文件。M文件是一个文本文件,它可以用任何编辑程序来建立和编辑,而一般常用且最为方便的是使用MATLAB提供的文本编辑器。 M文件可以根据调用方式的不同分为两类:脚本文件(Script File)和函数文件(Function File)。 M 文件是MALTAB从前到后顺序执行文件所写的指令,只是一串按用户意图排列而成的MATLAB指令集合。脚本文件执行后,所产生的所有变量都驻留在MALTAB基本工作空间;只要用户不用clear指令加以清除,且不退出MATLAB,这些变量一直保存在基本工作空间中。基本工作空间随着MATLAB的启动而产生;只有关闭MATLAB时,该基本空间才被删除。 类似于C语言中函数的定义,M函数文件是专门用于对函数进行定义的。对外界来看,只需关心函数的输入参量和送出来的计算结果,内部运作可以不需知道。M函数文件与脚本文件在形式上和运行上都不同。函数文件第一行总是以”function”引导的“函数声明行”形式书写 function [x,y,z]=fun(a,b,c) 函数声明行罗列出函数与外界的联系的全部输入输出宗量,输入输出宗量的数目没有限制(可以很多,也可以没有)。 每当函数文件运行,MATLAB就会专门为它开辟一个临时工作空间,该控制称为函数工作空间。所有中间变量都存放在函数工作空间中,当执行完文件最后一条指令时,或遇到return,就结束该函数文件的运行,同时该函数空间及其所有的中间变量就立即被清除。函数空间随具体M函数文件的被调用而产生,随调用结束而删除。在MATLAB整个运行期间,可以产生任意多个临时函数空间。假如在函数文件中,发生对某脚本文件的调用,那么该脚本文件运行产生的所有变量都存放于该函数空间中,而不是存放在基本空间。 3、MATLAB控制流 与C语言一样,MATLAB提供了控制程序流的结构,包括: (1) for循环 (2) while循环 (3) if-else-end分支结构 (4) switch-case结构 (5) try-catch结构 各种结构的使用方法与C语言中基本相同,在此不再赘述。 三、 实验内容 本实验利用MATLAB对连续信号在时域和频域上进行分析。回顾《信号与系统》中关于傅里叶变换的理论基础,完成以下内容: 1、 利用MATLAB进行编程,绘制矩形脉冲 ? f(t)???1|t|?1?2 ?0其他 的波形(t?[-1,1]),其中时域抽样点数为N=200。 利用实验内容2的结果,根据上式使用for循环结构计算t?[-1,1]上f(t)的200个时域抽样点的值,并画出f(t)的图形。 4、利用MATLAB的画图功能,把实验内容1和实验内容3的图形画在同一个图形窗口中,并使用legend函数标明图例。对比两个图形,你是否看到了由于信号抽样而导致的Gibbs现象? 5、式(2.1)的累加和可以用内积实现,即一个行矢量右乘一个列矢量,将已知时域抽样值f(t1)、f(t1??t)、、f(t2??t)写成列矢量,则(2.1)式可以改写为 T?j(?1?k??)t1?j(?1?k??)(t1??t)F(?1?k??)?[eeN 同样,式(2.2)可改写为 ?f(t1)??f(t??t)??e?j(?1?k??)(t2??t)]?1?? ??f(t??t)?2??F(?1)??F(????)?1?ej(?2???)(t1?n?t)]??? ???F(?2???)?2、 如果时域信号f(t)的取值区间为[t1,t2],则其傅里叶变换的表达式为 F(?)?????f(t)e?j?tdt??f(t)e?j?tdt t1N?1n?0t2?f(t1?n?t)?[ej?1(t1?n?t)ej(?1???)(t1?n?t)2?K 为了利用MATLAB计算f(t)的傅里叶变换,可以取f(t)的N个点,并把上式改写为 T F(?)?N?f(t1?n?t)e?j?(t1?n?t) 其中,T?t2?t1为信号持续时间区间长度。使用上式可以算出任意频点的傅里叶变换值。假设F(?)的主要取值区间为[?1,?2],要计算其区间均匀抽样的K个值,则有 TF(?1?k??)?N其中,????f(tn?0N?11?n?t)e?j(?1?k??)(t1?n?t) (2.1) ?为频域抽样间隔,???2??1为带宽。 K根据以上两个等式,利用MATLAB编程,使用向量化计算的方法重新完成实验内容2和实验内容3,并把计算结果与实验内容2和实验内容3的结果进行比较是否相同(通过计算两者之间的最大绝对误差,观察其值是否接近0)。 6、利用实验内容5的代码,把傅里叶变换和傅里叶逆变换分别写为两个M函数文件,函数定义形式为: function [F, w] = Fourier_lab2(f, N, T, K) function [f, t] = iFourier_lab2(F, K, W, N) 其中,f为时域信号,t为对时域信号f的采样点(即采样时刻),N为对时域信号f的采用点数,T为f的持续时间,K为频域采样点数,F为f的傅里叶变换,w为对F的频域采样点,W为F的频域带宽。 利用以上两个函数,写出M脚本文件重新完成实验内容5。 四、实验报告要求 1、简述实验目的、实验原理及其要点; 2、把所有实验内容涉及的指令都以M文件方式创建并运行,保存实验结果图形。 3、总结实验中的主要结论。 按照实验内容1定义的f(t)及时域采样方式,并取频域抽样点数K=100,利用MATLAB编程,使用for循环结构计算F(?)在??[?8?,8?]在各个频域采样点的值,并画出其频谱图形。 3、与实验内容2类似,若F(?)的频带主要位于[?1,?2],则傅里叶逆变换可以近似表达为 1 f(t)?2??F(?)ed?????2?K?j?t 五、心得体会 Matlab有许多地方与c语言很相似,同样是操作命令。但同时我们也需要细心找出其中的不同点,区分两种语言,归纳总结。比如:百分号% 在c语言中的意义为:(1)、取模运算符;(2)、转义符。但在matlab语言中则是注释说明的符号。而在c语言中,注释说明所用符号为/* */ 又比如,分号“;”在matlab中有抑制计算结果显示的作用,而在c语言中并无此作用。 在做matlab的时候,要极其注意细节,即使只是一个标点符号的错漏,也会造成计算结果的错误。 ?F(?k?0K?11?k??)ej(?1?k??)t 若只关心f(t)在时域抽样点上的值,则有 ?f(t1?n?t)?2?Kj(?1?k??)(t1?n?t)F(??k??)e?1k?0K?1 (2.2)

联系合同范文客服:xxxxx#qq.com(#替换为@)