• 1.23 MB
  • 2022-04-22 13:36:58 发布

基于Matlab的信号系统实平台设计毕业论文.doc

  • 47页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'石河子大学学士学位论文基于Matlab的信号系统实平台设计毕业论文目录第一章引言11.1概述11.2基于Matlab的信号与系统实验平台开发现状11.3研究意义21.4本文的主要工作2第二章系统分析32.1引言32.2需求分析32.3可行性分析42.3.1技术可行性42.3.2经济可行性42.3.3操作可行性42.4系统主要目标及功能42.4.1系统目标42.4.2系统主要功能42.5小结5第三章方案选取63.1引言63.2界面工具的选取63.3模拟信号实验的软件工具选择63.4设计方案选择615 石河子大学学士学位论文第四章开发运行环境74.1系统开发环境和运行环境74.2开发语言和开发工具介绍74.2.1WindowsXP74.2.2Matlab7.074.2.3图形用户界面(GUI)8第五章系统软件平台的设计105.1引言105.2系统整体框图105.3系统设计步骤115.4系统模块115.4.1模块划分简介115.4.2模块具体设计115.5生成可执行文件265.6小结26第六章系统测试276.1引言276.2测试背景276.3测试概要276.3.1测试结果276.3.2测试分析346.4小结34第七章结论35致谢37参考文献38附录:主要代码3915 石河子大学学士学位论文1.1概述随着计算机的普及应用以及科技的发达,现代社会是信息的社会,对信息的研究变得非常重要,而对信号波形的模拟可以方便研究人员研究。以前的信号模拟是用硬件,对仪器和实验室的要求较高,不便于广泛应用,而且信号处理具有内容繁多、概念抽象、设计复杂等特点,学生在学习时常常会感到枯燥,难以理解和掌握。硬件模拟信号波形对设备要求较高,有时候受仪器或操作不对等因素的影响将无法正确直观的看到波形,参数改变时不能立即看到波形变化。而用软件的形式对信号波形进行仿真有着界面可视性强,操作简单方便;便于数据修改,文件保存,实验效率高,实验内容丰富,结果直观易懂,便于分析;而且系统容易扩展新的实验项目。所以仿真很有必要而且急为迫切。因而选择此课题作为我们的毕业设计。1.2基于Matlab的信号与系统实验平台开发现状Matlab在全世界内都很是流行,特别是在工程计算领域。近年来越来越多的国人也喜爱上了这一套软件。Matlab的toolbox中也含有概率统计方面的库函数。概率方面的库函数主要有各种常见分布的分布函数、概率密度、分布率以及生成服从各种分布随机数的函数.统计方面的库函数含盖了简单随机样本下常见的参数估计(点估计、区间估计),假设检验等等。研究了基于Matlab软件的信号与系统实验平台,弥补了教学中的不足.通过实验,加强学生对信号与系统课程的理解和掌握[7]。基于MATLABWebServer的远程仿真系统具有交互性强和使用简单方便等优点。介绍了MatlabWebServer的基本原理及系统配置方法,并结合通信原理远程仿真程序的开发实例,重点讨论了仿真系统的三个基本组成部分:M文档,HTML输入文档和HTML输出文档开发的关键步骤和代码,最后,给出了AM调制的仿真结果[21]。认为Matlab是一种高性能的用于工程计算的编程软件,它具有强大的数学计算、算法推导、建模仿真、图形绘制等功能,但是这些功能只能在Matlab本身所提供的平台上使用,且具有代码执行速度慢的缺点。文中提出了实现Matlab与其它编程语言之间接口的方案,并且对与VC之间的接口进行了验证,解决了Matlab函数只能在其本身所提供的平台上使用的问题,使得代码的执行速度和安全保密性都大大提高。周传胜等基于Matlab的Simulink工具箱、webserver工具箱、虚拟现实工具箱和虚拟现实语言(VRML)构建了网络交互式虚拟现实实验系统,系统由一个服务器和若干个客户机组成。学生在客户机上通过互联网可浏览服务器上的虚拟演示实验,并可根据需要在客户端实时地修改实验参数,这些参数通过网络传到服务器后,服务器会将更新的虚拟的实验现象和实验结果传到客户机,从而完成交互式虚拟现实实验过程[20]。15 石河子大学学士学位论文1.3研究意义Matlab作为编程语言和可视化工具,用Matlab开发的实验为学生提供了“信号分析”、“信号抽样”、“系统仿真”、“系统特性”、“滤波器设计”及“傅立叶变换”等实验模块。它的界面演示框如同通用示波器,显示了信号分析与系统设计的动态仿真过程,给人以直观的感受[1]。在教学中它能为同学们提供了大量的实例,同时它也为同学们留下了动在实验中同学们可以改变信号、模块、仿真子系统等的参数,并观察信号与系统的相应变化.在实验过程中,同学们对所学的书本知识会有感性的认识和直观的验证,加深对“信号与系统”原理的理解。本课题能避开硬件系统的不足,巧妙的运用软件来仿真硬件才能实现的实验结果,大大降低了实验设备要求,节约了人力和财力,而且有很多的库函数可以在实验时直接调用,避免了用硬件做实验的局限性。可以更方便的做信号系统实验,为教学和研究提供了方便。还能够锻炼一个人在面对一个具体的项目时,遇到问题,分析问题,解决问题的能力;获得独立策划、实施课题,并按照既定计划进行开发的经验,以及查找相关文献的能力。通过自己的努力使得对于Matlab有一个全面的、深刻的认识,并且对Matlab做界面的软件有了一定的了解,对系统规划有了初步的认识。为以后研发工作打下坚实的基础,积累宝贵的经验。1.4本文的主要工作本文主要是针对以Matlab为软件平台的信号系统实验平台的设计,用Matlab语言编程开发一个适合小型的信号系统实验平台,方便学生学习。具体的工作主要有:1)通信模拟仿真系统的设计分析。2)通信模拟仿真系统的总体框架。3)通信模拟仿真系统的设计与实现。4)系统测试与分析。5)编写文档。15石河子大学学士学位论文15石河子大学学士学位论文15 第二章系统分析第二章系统分析2.1引言现代社会,通信与传感、仿真计算技术紧密结合,信息成为社会的高级“神经中枢”,随着我国科学技术的发展和国内外合作的加强,对通信水平的要求也日益增加,如果通信水平跟不上,社会成员之间的合作程度就受到限制,生产力的发展也必然受到限制,可见通信在现代生活中扮演的角色越来越重要,本课题以此为出发点,采用Matlab语言为工作环境,Matlab语言称为第四代编程语言,程序简洁、可读性很强而且调试十分容易,自1984年由美国MathWorks公司推向市场以来,历经十几年的发展,现已成为国际公认的优秀科技应用软件,是数字信号处理方面得天独厚优势图形开发工具.本软件设计目标是以配合教学为出发点,主要是面对通信工程专业的初学者,用简单,可视化的仿真模拟图形给大家演示部分基本波的传输特性,以及在信道中的传输特性。使他们直观,感性地了解和掌握通信系统的概念、传输性能等[3]。为了规范和条理的进行本系统的设计以及使后续的开发维护工作变得有趣而轻松,故编写本系统需求分析说明书;旨在开发过程中进行参考,使系统在需求的规范之内,避免重复劳动,加快开发进度以及提高开发效率;同时也是为以后系统维护服务提供指南;由于时间仓促,错误之处在所难免,请见谅。2.2需求分析通信在现今生活中已是普遍存在,在经济发展,政治军事活动,个人生活中的应运以是相当普遍,是社会发展不可缺少的工具,自1844年莫而斯在华盛顿和巴尔的摩之间发送世界第一份电报以来,通信已经经历了150多年,发展到目前数字通信趋于替代模拟通信的趋势。《信号与系统》课程,是高等理工科类院校通信与电子信息工程等专业中一门十分重要的基础理论课,也是电子信息工程专业许多后续课程的重要理论基础。以前的信号模拟是通过硬件,对仪器和实验室的要求较高,不便于广泛应用,而且信号处理具有内容繁多、概念抽象、设计复杂等特点,学生在学习时常常会感到枯燥,难以理解和掌握。基于此种需求,本系统设计为教学演示型软件,运用Matlab软件开发,便于学生直观观察信号系统中涉及的波形及特性的原理图,15 第二章系统分析为后续课程的学习,以及独立分析和设计新的系统,打下基础。2.3可行性分析2.3.1技术可行性本课题所涉及的研究目标,在国内外已经有相当成熟的理论基础和技术基础。通过开发人员的文献调查,对于Matlab做用户图象界面和信号模拟所涉及到的技术问题进行细致的分析,很大一部分可以使用电子信息工程的专业知识进行构建,其他的部分则可以通过自学,调用已经开发好的一些功能模块来完成课题涉及到的技术要求。2.3.2经济可行性本课题通过对既有开发平台的使用,能够设计出比较完善的信号系统实验平台,没有任何经济上的负担,本课题可以自主开发信号系统实验平台,为实验提供了灵活性,摆脱了硬件可以看到实验结果,而且又可脱离Matlab来进行仿真.为教学和研究提供了方便,在经济上节约了实验开支,锻炼了学生的自我研发意识和自己动手的能力。2.3.3操作可行性Matlab程序流程简单明了,开发率高,并且能够结合其他多种开发工具,共同实现信号模拟功能。它易学易用,不需大量编程,能创作出一些高水平的模拟平台作品,对于非专业的开发人员和专业开发人员都是一个好的选择。从可操作性的角度来讲,完全可行。2.4系统主要目标及功能2.4.1系统目标本课题开发目标是利用Matlab软件开发一套集可视化图形与动态仿真为一体的教学演示型软件,主要是面对初学者,用可视化的仿真模拟图形配合老师的讲课内容给大家演示《信号与系统》课程中部分信号的传输波形、卷积、傅立叶变换以及滤波器设计等,帮助他们直观、感性地了解和掌握信号系统的概念、基本特征等,深化对通信概念的理解。2.4.2系统主要功能15 第二章系统分析本系统主要功能包括基本序列计算、基本信号产生、卷积、傅立叶变换、滤波器设计。简单基础地涵盖了《信号与系统》部分主要章节,用可视化的仿真模拟图形为大家演示部分基本信号的传输波形和调制变换,部分交互式界面可直接输入合适的值使大家更直观、感性地了解和掌握信号系统的概念、传输性能、基本特征等,为课程的学习打下基础。界面上的文字说明帮助大家了解本图形的特性或功能。整套系统采取图文并茂、循序渐进、从感性到理性的方式,首先让初学者在掌握基本信号模拟和运算。2.5小结一个系统在开发之前就需要进行需求分析和可行性分析,本章重点阐述本设计的需求分析、可行性分析和目的,对这个系统的需求有了一个比较有力的证明。15 第二章系统分析第三章方案选取3.1引言本设计研究的信号系统实验平台是一个可执行的系统,可以脱离它的开发软件Matlab而独立运行。本系统的关键是实现参数的传递和生成可执行文件,这对刚接触Matlab的我们来是说比较困难,老师为我们提出了一些参考方案来完成设计,本章将在根据我们实力的基础上,给出本课题最适合选用的一种方案。3.2界面工具的选取由于我们的课题是基于Matlab的信号系统平台,所以在选择做界面的工具的时候也选择Matlab。如果用VB做界面的话在后面实现信号波形的时候需要建立VB和Matlab的链接,那样会增加工作量和工作难度,而且我们对他们的链接也是知之甚少,实际链接的时候会很麻烦,所以在权衡了各方面的因素我们选择用Matlab做界面。3.3模拟信号实验的软件工具选择我们在学习《信号与系统》和《数字信号处理》课程时,做实验的时候用的是Matlab软件来实现信号波形的模拟以及处理,可以比较直观准确的看到波形,对Matlab软件也有了初步的认识,也可以用它编写一些比较简单的程序来。在信号波形模拟的领域中,我们只接触过Matlab软件,所以在编写模拟信号波形这个模块中我们选择Matlab软件。Matlab是Math和Works公司推出的一个为工程计算和数据分析而专门设计的高级交互式软件包,利用它能容易地解决在系统仿真领域教学与研究中遇到的问题。3.4设计方案选择在本系统的设计中,界面布局设计采用自顶向下的设计方法,即先设计引导界面和主界面,再设计各个实验子界面。界面设计完成后,只是一些静态的画面而已,没有什么内涵,还不能用于实验操作,要想达到实验目的,必须借助于函数调用。在设计中,各个回调函数的编写顺序则是采用自底向上的设计方法,即先编制各个实验子界面的回调函数,再编写主界面和引导界面的回调函数。15第二章系统分析15 第四章开发运行环境第四章开发运行环境4.1系统开发环境和运行环境1)硬件环境能运行普通大型应用程序的计算机一台(要求能接入网络);2)软件环境操作系统:WindowsXP开发工具:Matlab7.0MatlabGui4.2开发语言和开发工具介绍4.2.1WindowsXPWindowsXP,或视窗XP是微软公司最新发布的一款视窗操作系统。它发行于2001年10月25日,原来的名称是Whistler。微软最初发行了两个版本,家庭版(Home)和专业版(Professional)。家庭版的消费对象是家庭用户,专业版则在家庭版的基础上添加了新的为面向商业的设计的网络认证、双处理器等特性。且家庭版只支持1个处理器,专业版则支持2个。字母XP表示英文单词的“体验”(experience)。WindowsXP是基于Windows2000代码的产品,同时拥有一个新的用户图形界面(叫做月神Luna),它包括了一些细微的修改,其中一些看起来是从Linux的桌面环境(desktopenvironmen)诸如KDE中获得的灵感。带有用户图形的登陆界面就是一个例子。此外,WindowsXP还引入了一个“基于人物”的用户界面,使得工具条可以访问任务的具体细节。它包括了简化了的Windows2000的用户安全特性,并整合了防火墙,以用来确保长期以来以着困扰微软的安全问题。4.2.2Matlab7.0Matlab(MATrixLABoratory)语言是美国的CleveMoler博士构思并开发集命令翻译、科学计算于一身的一套交互式软件系统,是目前国际工程控制界应用最广、最流行的一种控制系统计算机辅助设计的软件工具,15 第四章开发运行环境它集成了计算功能,符号运算,数据可视化等功能,具有功能强大、界面友好、配套工具箱完善等特点,其SIMULINK仿真环境及S函数的应用为我们提供了有效实用的设计方法,该软件先前的版本与VisualC++和VisualBasic等可视化编程软件相比功能较差,但是新版的MATLAB7.0软件已经在这方面向这些软件靠近,其可视化编程能力有了很大程度的提高.该软件最突出的特点就是简洁的,开放式代码。提供了更为直观,符合人们思维习惯的代码,现简单介绍该软件的主要特点。1)语言简单,代码灵活,极其丰富的库函数资源。在程序设计中该软件对代码的书写形式没有很严格的限制,同时利用丰富的库函数简化了子程序的编写任务,利用极其丰富的库函数可以使程序开发避免繁杂的子程序编程任务避免了一些不必要的错误,提高了程序的可靠性。2)丰富灵活的运算符。Matlab提供了和C语言一样多的运算符,使用这些运算符可使程序短小、灵活。3)面向对象编程和结构化控制功能。尤其是新版的MATLAB7.0软件在可视化方面较以前版本有了很大程度的提高,使得界面编程更加自由,方便。4)程序设计自由度大。在新版的MATLAB7.0软件中,用户无须对矩阵进行预定义就可以使用,对数组和变量的应用也得到很大程度的扩展。5)程序可移植性好,基本上可以不作修改就可以在各种型号的计算机和操作系统上运用。6)分门别类的工具箱是该软件的又一大特点。核心工具箱和学科类的工具箱。这些工具箱都是该学科的高水平的专业人士所编,所以用户可以直接使用。提高了编程效率。7)开放的共享源代码。开放性的代码是该软件最受欢迎的另一大特点。所有的核心文件和工具箱文件都是可读可该的源代码。所以matlab语言被称为第四代编程语言[3]。4.2.3图形用户界面(GUI)图形用户界面(GUI)是用户与计算机程序之间的交互方式,是用户与计算机进行信息交流的方式。计算机在屏幕显示图形和文本,若有扬声器还可产生声音。用户通过输入设备,如:键盘、鼠标、跟踪球、绘制板或麦克风,与计算机通讯。用户界面设定了如何观看和如何感知计算机、操作系统或应用程序。通常,多是根据悦目的结构和用户界面功能的有效性来选择计算机或程序。图形用户界面或GUI是包含图形对象,如:窗口、图标、菜单和文本的用户界面。以某种方式选择或激活这些对象,通常引起动作或发生变化。最常见的激活方法是用鼠标或其它点击设备去控制屏幕上的鼠标指针的运动。按下鼠标按钮,标志着对象的选择或其它动作。Matlab在demo命令中包含了GUI功能的极好例子。Matlab15 第四章开发运行环境为表现其基本功能而设计的演示程序demo是使用图形界面的最好范例。Matlab的用户,在指令窗中运行demo打开那图形界面后,只要用鼠标进行选择和点击,就可浏览那丰富多彩的内容。如:>>demo  研究该命令,以了解uimenu和uicontrol如何给MATLAB函数提供交互输入。  在运行了demo例子后,很可能会问“为什么要在MATLAB中建立一个GUI?”这是一个很好的问题,简单的回答是可能并不需要.使用MATLAB来分析数据,求解问题,绘制结果的绝大多数的人,并不会发现GUI工具很有用。但另一方面,GUI可以在MATLAB中生成非常有效的工具和应用程序,或是建立演示工作的交互式界面。对“句柄图形”的理解是设计和实现GUI的先决条件。  由图形命令生成的每一事物是一个图形对象。图形对象不仅包括uimenu和uicontrol对象,而且还包括图形、坐标轴和他们的子对象。让我们从另一个角度来看这一层次结构。计算机的屏幕本身是根结点,图形是根对象的子对象,坐标轴,uimenu,uicontrol是图形的子对象。根可以包括多个图形,每个图形含有一组或多组坐标轴以及其子对象,每个图形也可以有一个或多个与坐标轴无关的uimenu和uicontrol。虽然uicontrol对象无子对象结点,但他们确实具有多种类型。uimenu对象常将其它的uimenu对象作为其子对象。15第四章开发运行环境15第四章开发运行环境15第四章开发运行环境15第四章系统分析15 第五章系统软件平台的设计第五章系统软件平台的设计5.1引言信号系统实验繁多、复杂,许多实验还需要输入参数,若将系统设计成一个界面,使得系统繁重、拥挤,不能够实现友好、美化的界面的设计要求。因此,在设计界面的时候,采用一个主界面和若干子界面,每个子界面是一个模块,实现一个实验或功能,并通过主界面调用子界面的设计方法。5.2系统整体框图本实验系统整体结构设计由两部分组成:界面模块设计和菜单模块设计。其中,界面模块总共包括八个模块:开始引导模块、主模块、序列基本计算模块、基本信号的产生模块、卷积模块、傅里叶变换模块、滤波器设计模块和说明模块。一个实验界面模块下面又有下一级实验界面模块,如滤波器设计模块下面还有FIR滤波器设计模块和IIR滤波器设计模块,其中FIR滤波器模块又包含FIR滤波器线性的判断实验界面、窗函数的频率响应实验界面和FIR滤波器的设计实验界面;IIR滤波器模块又包含完全IIR滤波器的设计实验界面和典型IIR滤波器实验界面;主界面中还包含了说明模块。在菜单设计时,在实验子界面中除使用系统约定的菜单条外,还增加了几个控制背景和退出实验的菜单。系统的整体结构如图5-1所示。开始引导界面开始界面滤波器设计傅立叶变换卷积卷积基本信号产生序列基本计算系统说明图5-1系统的整体结构15 第五章系统软件平台的设计5.3系统设计步骤设计的具体步骤如下:1)运用Matlab的图形用户界面(GUI)设计方法,设计整个实验系统的开始引导界面、实验主界面及其实现信号处理课程中具体实验的各个子界面。2)运用Matlab的图形用户界面(GUI)设计方法,设计系统的说明界面及其各个实验的说明界面。3)分别编写各个子界面的各个控件对象的回调函数,来实现控件相应控制功能,达到直接通过界面上各个控件就可以控制数据的输入输出,并可以方便地对实验结果的数据及其图形进行读取和分析的目的。4)编写主界面的回调函数,将各个实验子界面整合在信号处理系统实验主界面中,即通过主界面就可以进入任何一个实验子界面进行实验。5)编写开始引导界面的回调函数,实现从引导界面直接进入主界面。5.4系统模块5.4.1模块划分简介本系统根据要实现的实验类别、个数的要求来规划模块,在设计的时候本着界面美观、简洁的原则。各个模块可以相互切换,每个实验时可以完成参数的传递,5.4.2模块具体设计1)系统欢迎模块。可视调用的方法有pushbuttondownfcncloserequestfcncreatefcndelectfcnkeypressfcnresizefcn,在label选框中为其命名,调用某一个m函数,functionUntitledcallball中写入函数名。主窗体对象的层次图如图5-2。图5-2主窗体对象的层次图系统欢迎界面如图5-3所示。15 第五章系统软件平台的设计图5-3系统主界面图5-3中可以看出这个系统的主要模块,简洁明了,对每个模块都有详细的说明,在做实验之前可以参考说明以便能顺利的进行实验,在主界面上选择任何一个实验都可以切换到它的子界面。2)序列基本计算模块A.序列基本计算模块界面如图5-4所示。图5-4序列基本计算模块界面由图5-4可以看出在这个模块里包括了单位脉冲序列、单位阶跃序列、指数序列一共三个序列,并且还给出了序列卷积这个运算。下面来主要介绍这单位阶跃序列和指数序列及其设计方法。a.单位阶跃序列单位阶跃序列的公式(5-1)15 第五章系统软件平台的设计类似于连续时间系统中的单位阶跃信号,但应注意在点发生跳变,往往不予定义(或定义为),而在=0点明确规定为。在该子界面的单位阶跃序列那栏里输入位移量3如图5-5所示。图5-5单位阶跃变量输入框然后点击“单位阶跃序列”按钮,即出现如图5-6所示的波形。图5-6位移量为3的单位阶跃序列单位阶跃序列关键程序:functionpushbutton2_Callback(hObject,eventdata,handles)t=str2num(get(handles.edit2,"String"));k=[t-3:t+7];fk=[(k-t)>=0];stem(k,fk)title("单位阶跃序列")a.指数序列指数序列是公式是(5-2)当>1时序列是发散的,<1时序列收敛,>0序列都取正值,<0序列在正负摆动。此外还有的序列。15 第五章系统软件平台的设计在该子界面的指数序列那栏里输入底数2如图5-7所示。图5-7指数序列变量输入框然后点击“指数序列”按钮,出现如图5-8波形图5-8底数为2时的指数序列指数序列模块关键程序:functionpushbutton3_Callback(hObject,eventdata,handles)t=str2num(get(handles.edit3,"String"));k=[0:10];fk=t.^k;stem(k,fk)title("指数序列")c.序列卷积在该栏里若输入5,即卷积幅度是5,则出现图5-9波形。15 第五章系统软件平台的设计图5-9卷积幅度为5时的波形序列卷积模块关键程序:functionpushbutton4_Callback(hObject,eventdata,handles)t=str2num(get(handles.edit6,"String"));k1=-1:3;k2=-1:3;f1=[01320];f2=[04321];y=t*conv(f1,f2);k0=k1(1)+k2(2);k3=length(f1)+length(f2)-2;k=k0:k0+k3;stem(k,y)title("卷积序列")3)基本信号产生模块A.基本信号产生模块的窗体创建启动matlab7.0,在命令窗口输入guide,打开GUI制作窗口,在窗体上有界面制作工具。在pushbutton下单击右键callback,打开callbackfunction,调用MATLAB内部提供的函数,square函数,sawtooth函数,sinc函数,diric函数,rectpuls函数,tripuls函数,pulstran函数,chip函数在GUI制作窗口,axes是用来显示图形,当单击pushbutton,运行结果,会在axes中显示出来。简单函数基本性质的模块,通过人机交互方式进行设计,在信号1和信号2中输入幅值,频率,初相,移位不同的值,对其信号相加,信号相乘,信号移位使信号在axes窗口中,显示出来。仿真的波形有正弦波,三角波,指数函数,抽样函数,脉冲函数等。Popupmenu函数中用switchval1case1来调用不同的波形,)设置句柄get(handles.popupmenu).用strdouble(get(handles.edit,’string’)15 第五章系统软件平台的设计来输入测试数据,达到直观仿真模拟图.A.基本信号产生模块的子界面如图5-10所示:图5-10基本信号产生模块子界面在子界面中可以实现正弦信号、指数信号、符号函数、单位冲激、单位阶跃、抽样信号、矩形脉冲、三角脉冲等八类波形,在这个子界面的右边有参数设置,可以输入角度、相位等参数,参数变化时,波形会有相应的变化。B.下面举例子:l例一:正弦信号a.正弦信号的公式。正弦信号,一般写做(5-3)式中K为振幅,是角频率,为初相位。弦信号是周期信号,其周期T与角频率和频率满足下列关系式(5-4)b.正弦信号的运行结果如图5-11所示:图5-11正弦函数运行界面15 第五章系统软件平台的设计c.正弦信号产生部分程序:functionpushbutton2_Callback(hObject,eventdata,handles)clcA=str2num(get(handles.edit3,"String"));W=str2num(get(handles.edit2,"String"));P=str2num(get(handles.edit1,"String"));t=0:.001:10;ft=A*sin(W*t+P);plot(t,ft),gridtitle("A*sin(W*t+P)")l例二:指数信号a.指数信号的表示式为(5-5)在式中,a是实数。若a>0,信号将随着时间而增长,若a<0,信号则随时间衰减。常数K表示指数信号在t=0点的初始值。b.指数信号的运行结果如图5-12所示:图5-12指数函数运行界面c.指数信号的部分程序:functionpushbutton1_Callback(hObject,eventdata,handles)clcA=str2num(get(handles.edit6,"String"));a=str2num(get(handles.edit4,"String"));t=0:.001:10;ft=A*exp(a*t);plot(t,ft),gridtitle("A*exp(a*t)")l例三:符号函数a.符号函数的公式符号函数(或称正负号函数)以符号记,其表示式为15 第五章系统软件平台的设计(5-6)由式(5-6)可以看出,这种信号不满足绝对可积条件,但它却存在傅立叶变换。b.符号函数的运行界面如图5-13所示图5-13符号函数运行界面c.符号信号部分程序:functionpushbutton5_Callback(hObject,eventdata,handles)t=str2num(get(handles.edit7,"String"))-1:.001:str2num(get(handles.edit7,"String"))+1;ft=sign(t-str2num(get(handles.edit7,"String")));axis([str2num(get(handles.edit7,"String"))-2,str2num(get(handles.edit7,"String"))+2,-1.2,1.2])plot(t,ft),gridtitle("sgn(t-t0)")4)卷积模块A.卷积定义对于任意两个信号和,两者做卷积运算定义为(5-7)做一变量代换不难证明(5-8)式中是两函数作卷积运算的简写符号,也可以写成。这里的积分取和,这是由于对和的作用时间范围没有加以限制。15 第五章系统软件平台的设计实际由于系统的因果性或激励信号存在时间的局限性,其积分限会有变化,这一点借助卷积的图形解释可以看得很清楚。可以说卷积积分中积分限的确定是非常关键的。B.卷积模块的子界面如图5-14所示:图5-14卷积子界面c.卷积部分程序:functionpushbutton4_Callback(hObject,eventdata,handles)clct=str2num(get(handles.edit1,"String"));t11=0;t12=1;t21=0;t22=2;t1=t11:0.001:t12;ft1=2*rectpuls(t1-0.5,1);t2=t21:0.001:t22;ft2=t2;t3=t11+t21:0.001:t12+t22;ft3=conv(ft1,ft2);ft3=t*ft3*0.001;plot(t3,ft3)title("f1(t)*f2(t)")5)傅立叶变换模块A.傅立叶变换的原理如果以周期矩形信号为例,当周期T1无限增大时,则周期信号就转化为非周期性的单脉冲信号。所以可以把非周期信号看成是周期T1趋于无限大的周期信号。当周期信号的周期T1增大时,谱线的间隔变小,若周期T115 第五章系统软件平台的设计无限大,则谱线的间隔趋于无限小,这样,离散频谱就变成连续频谱了。同时,由于周期趋于无限大,谱线的长度趋于零。这就是说,频谱将化为乌有,失去应有的意义。但是,从物理概念上考虑,既然成为一个信号,必然含有一定的能量,无论信号怎样分解,其所含能量是不变的。所以不管周期增大到什么程度,频谱的分布依然存在。或者从数学角度看,在极限情况下,无限多的无穷小量之和,仍可等于一有限值,此有限值的大小取决于信号的能量。设有一周期信号及其复数频谱,将展成(5-9)两边乘以T1,得到(5-10)对于非周期信号,重复周期,重复频率,谱线间隔,而离散频率变成连续频率。在这种极限情况下,,但量可望不趋于零,而趋近于有限值,且变成一个连续函数,通常记作,这样式(5-8)在非周期信号的情况下将变成(5-11)同样,傅立叶级数(5-12)在极限的情况下,傅立叶级数变成积分形式,它等于(5-13)通常式(5-11)称为傅立叶正变换,式(5-13)称为傅立叶逆变换。B.傅立叶变换的公式通常式称为傅立叶正变换,式称为傅立叶逆变换。为书写方便习惯上采用如下符号:傅立叶正变换(5-14)傅立叶逆变换(5-15)15 第五章系统软件平台的设计信号的傅立变换模块是将时域信号通过傅立叶变换转变为频域信号.它分为连续信号的傅立叶变换窗体和离散信号窗体的傅立叶变换调用窗体是通过控件pushbutton回调exp3_1.m和exp3_2.m。c.傅立叶变换模块的子界面如图5-15所示:图5-15傅立叶变换子界面若想求方波傅立叶变换,则只需要在第一栏里输入方波的幅度,比如输入2,即出现以下波形:图5-16幅度为2时的方波傅立叶变换另外的快速傅立叶变换和离散傅立叶变换的操作和方波傅立叶分析一样。A.傅立叶变换部分程序:a.方波傅立叶分析:functionpushbutton9_Callback(hObject,eventdata,handles)%p13715 第五章系统软件平台的设计clc1.f=str2num(get(handles.edit3,"String"));t=0:0.01:2*pi;y=f*sin(t);plot(t,y),holdony=f*(sin(t)+sin(3*t)/3);plot(t,y),holdony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5);plot(t,y),holdony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7);plot(t,y),holdony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7+sin(9*t)/9);plot(t,y),holdony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7+sin(9*t)/9+sin(11*t)/11);plot(t,y),gridtitle("方波傅立叶分析")b.快速傅立叶变换:functionpushbutton8_Callback(hObject,eventdata,handles)N=str2num(get(handles.edit2,"String"));x0=sin(N*2*pi*[1:8]/8)*5;dt=2*pi/8;w=linspace(0,2*pi,1000)/dt;x0=x0*exp(-j*[1:length(x0)]"*w)*dt;plot(w,abs(x0))title("快速傅立叶变换")c.离散傅立叶变换:functionpushbutton2_Callback(hObject,eventdata,handles)%xp70t=str2num(get(handles.edit1,"String"));n=-5:5;x=t.^n;k=-200:200;w=(pi/100)*k;X=x*(exp(-j*pi/100)).^(n"*k);p=abs(X);plot(w/pi,p),gridtitle("离散傅立叶变换");6)滤波器设计模块滤波器是数字信号处理的重要基础,是使用最为广泛的一种线性系统。描述数字滤波器的结构只需要三种基本元件:加法器,乘法器,延迟元件。模拟滤波器的设计是其他滤波器设计的基础,模拟低通滤波器的设计,主要包括巴特沃斯滤波器,切比雪夫滤波器和椭圆滤波器。数字滤波器是数字信号处理的重要基础,是使用最为广泛的一种线性系统。是完成信号滤波处理功能的,用有限精度算法实现的离散时间线性非时变系统。其输入是一组模拟信号取样的数字量,其输出是15 第五章系统软件平台的设计另一组数字量。在此系统中我们设计了低通FIR滤波器、高通FIR滤波器和巴特沃斯高通滤波器。A.滤波器设计模块的子界面如图5-17。图5-17滤波器设计界面从图5-17可以看出,这个模块包括低通FIR滤波器、高通FIR滤波器和巴特沃斯高通滤波器三个部分。若想观察低通FIR滤波器的波形,可以在这一栏里输入截止频率WC,再点击“低通FIR滤波器”按钮,左边出现相应波形,例:输入截止频率12,则波形如图5-18所示。图5-18截止频率为12的FIRB.滤波器设计模块关键程序:a.低通FIR滤波器:15 第五章系统软件平台的设计functionpushbutton4_Callback(hObject,eventdata,handles)wc=str2num(get(handles.edit6,"String"))*pi;N=21;n=0:N-1;r=(N-1)/2;hdn=sin(wc*(n-r))/pi./(n-r);ifrem(N,2)~=0hdn(r+1)=wc/pi;endwn1=boxcar(N);hn1=hdn.*wn1";wn2=hamming(N);hn2=hdn.*wn2";hw=fft(hdn,512);w=2*[0:511]/512;plot(w,20*log10(abs(hw)));gridtitle("低通FIR滤波器")b.高通FIR滤波器:functionpushbutton1_Callback(hObject,eventdata,handles)t=str2num(get(handles.edit2,"String"));f=[0,t,t,1];m=[0,0,1,1];b=fir2(30,f,m);n=0:30;[h,w]=freqz(b,1,256);plot(w/pi,20*log10(abs(h)));gridtitle("高通FIR滤波器")7)实验系统说明模块A.本系统所设计的帮助模块主要是解释每个实验的原理,帮助系统使用人员更清楚实验的原理和步骤,可以更轻松的操作。这个模块是每个系统必须的它的界面如图5-19所示。15 第五章系统软件平台的设计图5-19帮助模块界面比如点击基本信号产生说明则弹出它的界面如图5-20所示,它介绍了正弦函数、指数函数等基本信号的公式,并对公式内每个参数进行说明,让使用者一目了然。图5-20基本信号产生说明界面B.本模块主要程序functionvarargout=help(varargin)gui_Singleton=1;gui_State=struct("gui_Name",mfilename,..."gui_Singleton",gui_Singleton,..."gui_OpeningFcn",@help_OpeningFcn,..."gui_OutputFcn",@help_OutputFcn,..."gui_LayoutFcn",[],..."gui_Callback",[]);ifnargin&&ischar(varargin{1})gui_State.gui_Callback=str2func(varargin{1});end8)系统退出模块系统退出界面如图5-21所示:图5-21系统退出界面15 第五章系统软件平台的设计5.5生成可执行文件本系统要求最终结果要脱离开发工具(Matlab)软件独立运行,我们在做GUI的时候主要参考了别人生成可执行文件的方法。首先在matlab命令行窗口中输入guide,打开gui设计的图形界面。然后拖入所要的图形控件,按需要修改外观直至满足要求。点击guide界面上方的Run按钮,会生成一个fig文件,一个m文件,其中fig文件是你界面的图形,m文件是你界面的回调函数,在m文件里每个控件的回调函数都已经自动生成,把我们自己的m代码填在相应的回调函数里即可。我们在做本系统的时候,主要按照以下步骤:首先,使用mcc编译得到.exe文件,具体参数见帮助文件;其次,将.exe文件及相关资源文件以及一个称为mglinstaller.exe的软件包一起拷到别的机器上,运行mglinstaller.exe,并添加环境变量path,即可执行.exe文件。第三,在MATLAB环境,执行命令mcc  -m  -B   sgl  file.m  或者mcc -p  -B  sglcpp  file.m  请键入help  mcc看帮助。在做的过程中我们还用到了打包等细节技术,打包的步骤是在matlab下的workspace里打comtool,点file-open project将我们先前建好的comtest.cbl工程文件打开,再点component--package component就实现了打包,此时到comtestdistrib文件夹里看,生成的comtest.exe就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的_install.bat就可以实现安装。另外,把gui生成exe 还有其他方法,比如1)在matlab的command窗口中输入 mcc -B sgl GUI.m 2)将上步生成的文件包括*m 文件和*.fig文件一起考到待运行的机器 此时仍需matlab所必需的动态连接库。3) 将 /extern/lib/win32/mglinstallar.exel拷贝到到待运行机器上4)在机器上先运行mglinstallar.exe, 然后选择解压目录,将在指定目录下解压缩出bin和toolbox两子目录,其中在binwin32目录下就是数学库和图形库脱离MATLAB运行所需的所有动态连接库,共有37个。可以将这些.dll考入system32, 也可以直接放在应用程序目录下。而toolbox目录则必须与应用程序同一目录。5)大功告成。 5.6小结本章讨论了软件平台的整体设计,给出了系统整体框图和各模块的界面和设计方法,详细介绍了各个模块产生波形的原理,并分析了最后生成可执行文件的方法。15第六章系统测试15 第六章系统测试第六章系统测试6.1引言经过为期六周的紧张工作,我们终于按照用户要求完成了一系列的程序设计,为了更好的对本软件的正确性做出客观公正的评价,为了更进一步的对本软件进行验证,为了能给用户一个满意的软件,让用户更好的使用本软件,也为了发现软件本身隐蔽的一系列问题从而提高用户的工作效率。为此本测试组对此软件做了详细的测试。本报告最终的用户是此软件的开发者以及此软件的最终维护者,为软件以后升级和修改提供参考。特此对以下模块进行了测试:基本序列计算模块,基本信号产生模块,卷积仿真模块,信号的傅立叶分析模块,通过多次测试作以下说明。注:本测试报告在系统经过较为严格测试的基础上编写。6.2测试背景被测试软件的名称为:信号与系统实验平台。石河子大学信息科学与技术学院信号与系统实验平台已经调试成功,在未正式运行之前,完全有必要进行全面的测试,以检验软件的可靠性,正确性,及稳定性。这也是开发项目的最基本规范。软件的测试具有真实性,所以本系统测试有较强的说服力。6.3测试概要6.3.1测试结果1)测试界面链接测试本系统最主要的就是看能否正确实现信号的模拟并且动态的反映参数改变时波形的变化。双击已经生成的可执行文件后出现主界面如图6-1,可以看到此系统的主要模块,在主界面里可以链接到其他子界面。如在主界面内点击按钮“傅立叶变换”则弹出它的子界面如图6-2。15 第六章系统测试图6-1系统主界面图6-2傅立叶变换子界面主界面和各子界面的链接可以实现,并且各个模块可以很容易的切换,这部分符合要求。2)测试波形。下面具体测试各个模块的波形A.基本序列计算模块。在本模块中,我们选择指数序列为例。测试一:能否正确显示波形。在第五章我们已经介绍过了指数序列的公式,根据公式我们可以轻松的得到它的波形。在本系统的主界面里点击“序列基本计算”按钮,出现序列基本计算模块的子界面,在指数序列那栏内输入底数3,出现如图6-3波形:15 第六章系统测试图6-3底数为3时的指数序列根据公式可以知道改波形显示正确。测试二:参数改变时看波形能否正确的相应变化。在本系统的主界面里点击“序列基本计算”按钮,出现序列基本计算模块的子界面,在指数序列那栏内输入底数6,出现如图6-4所示波形:图6-4底数为6时的指数序列根据图6-3和6-4可知波形出现变化,根据公式n=10时,由可得,图示波形正确无误。B.基本信号产生模块。由于此系统中做的基本信号类型比较多,在这里我们选择正弦信号为例。测试一:能否正确显示波形。正弦信号,一般写做(6-1)式中K为振幅,是角频率,为初相位。15 第六章系统测试正弦信号是周期信号,其周期T与角频率和频率满足下列关系式(6-2)在初中我们就开始接触正弦信号了,可以根据函数来轻易画出波形。在式(6-1)中如果我们取=1,=1,=0的时候式(6-1)就可以写成(6-3)这是最简单的正弦函数,它的波形应该如图6-5所示。图6-5的波形在本系统的基本信号产生模块中,正弦信号的输入参数如图6-6所示,在A,W,P各自的编辑框内输入值会即可出现相应的波形,其中A,W,P分别为式(6-1)中的K,,,在编辑框按图6-5内输入1,1,0即和式(6-3)是一个函数。图6-6正弦信号变量输入框图6-7正弦信号变量输入1,1,1输入参数后点击“正弦信号”按钮即可看见波形如图6-8所示:15 第六章系统测试图6-8的波形可以看出图6-5和图6-8所描绘的波形是同一个函数,即波形准确。测试二:参数改变时看波形能否正确的相应变化。在图6-6所示的编辑框A,W,P内分别输入2,2,2,即如图6-9所示,此时的正弦函数是(6-4)然后点击“正弦信号”按钮,出现波形如图6-10所示。图6-9图6-10的波形15 第六章系统测试可以轻易的看出图6-8和图6-10的区别,后者的频率和振幅均变大了2倍,且向左移了两个单元。则波形可以正确的根据参数的变化而变化。C.卷积模块卷积方法的原理就是将信号分解为冲激信号之和,借助系统的冲激响应,求解系统对任意激励信号的零响应。在设计的时候我们限定了两个函数,改变参数的时候只能改变卷积幅度。测试一:能否正确显示波形。在卷积子界面内输入卷积幅度3,出现如图6-11所示波形:图6-11卷积幅度为3时的f1(t)*f2(t)在界面里可知函数1和函数2的表达式,利用卷积定义可知结果正确。测试二:参数改变时看波形能否正确的相应变化。在卷积子界面中把卷积幅度修改为6,即出现如图6-12的波形::图6-12卷积幅度为6时的f1(t)*f2(t)15 第六章系统测试比较图6-11和6-12可知幅度增加了一倍,可以实现此功能。D.傅立叶变换分析模块本系统设计了方波傅立叶变换、快速傅立叶变换和离散傅立叶变换三个实验。在这个模块里我们以快速傅立叶变换为例来测试。测试一:能否正确显示波形。在本系统的主界面里点击“傅立叶变换”按钮,出现傅立叶变换模块的子界面,在离散傅立叶变换那栏内输入周期延拓数-0.9,出现以下波形:图6-13底数为-0.9时的离散傅立叶变换测试结果正确。测试二:参数改变时看波形能否正确的相应变化。在周期延拓数后的编辑框内把-0.9修改为-0.6,出现如下波形:图6-14底数为-0.6时的离散傅立叶变换在图6-13和图6-14里比较,结果正确。15 第六章系统测试6.3.2测试分析1)序列基本计算模块的测试:可以基本完成要求的功能。2)基本信号产生模块的测试:能够实现的波形较丰富,可以实现参数的传递,能清楚、直观的看见波形随这参数的改变而呈现相应的变化,从整体来说,满足实验要求,可以基本完成要求的功能。3)卷积模块的测试:可以实验一些基本函数的卷积,可以方便的看到实验结果,方便分析波形变化。可以基本完成要求的功能。5)傅立叶变换模块的测试:可以完成一些简单函数的快速傅立叶变换、离散傅立叶变换、连续傅立叶变换,呈现出它们的傅立叶变换波形。可以基本完成要求的功能。6.4小结我们完成的功能是仿真,对信号波形的动态仿真、基本序列计算、基本信号的产生过程、傅立叶变换分析、信号卷积等。基本序列的人机交互,基本信号产生模块的人机交互,卷积分析的人机交互,滤波器设计模块的人机交互,信号的傅立叶变换模块的人机交互。当输入数据之后,结果会以可视化的方式显示出来。其他的就是一些静态的演示图,通过编程显示出来,主要实现的内容包括基本信号的波形产生例如正弦波形,三角波形,脉冲波形。各种滤波器的设计低通滤波器、高通滤波器和巴特沃斯滤波器。通过测试,本软件具有良好的系统稳定性。经过大量数据测试,我们发现了一些问题,并及时地对其作了修改,我们边测试边调试。目前系统能够完全按要求正常运行,通过测试也使我们明白了:编写一个功能完善的软件是需要经过多次的测试调试才能够正常运行的。程序编写的完成只是整个开发过程中的小部分,我们所进行的单元测试和集成测试是软件的开发过程中较为繁重的一个环节。在测试过程中出现的某些故障都是出乎意料的,有些问题的解决也许并不困难,但要周密的考虑过程。15第七章结论15 第七章结论第七章结论在孙小齐老师的指导下,本次毕业设计,就要画上一个句号了。通过对信号与系统实验平台这个课题的开发,我们在开发能力上有了实质性地提高。鉴于本文开发的信号与系统实验平台为个人计算机,其性能有限,故暂不能做大规模的精确系统测试。虽然信号与系统实验平台已经顺利完工并能够正常运行,但想要成为一个能够在大范围内广泛应用的实验平台,本系统还需要投入更多的人力和物力,引入更多的技术才能进一步完善,使得系统更加健壮。Matlab实验平台发展到现在,虽然时间不长,然现如今已经发展成为信息产业中一个大的研究热点。更是由于次实验系统的复杂性和所具有的挑战性,才使得有更多的Matlab爱好者投身其中,为基于Matlab的信号与系统实验平台的发展贡献力量。希望通过本文,给喜欢Matlab的爱好者提供一些可以借鉴的材料,以此共勉!1)团队开发的认识。要在最短的时间内做出最成功的软件,仅靠个人的能力是不够的。软件英雄时代已经结束。Matlab软件有这很好的图象处理功能,。其特点是开发效率高,和其他工具软件配合较好。我们此次的毕业设计就是在Matlab环境中开发的。如果所实现的波形较多则可显示出非常高的效率和使用价值。2)编程和系统规划的认识。熟练使用开发工具不等于编程,或许掌握一种开发工具并不容易。使用开发工具并不能提高编程水平。我们的程序是利用Matlab的用户图象功能来编写界面,并且规划了这个系统的各个板块,各个板块互相独立,条理清晰,能方便快捷的在各个板块中切换。这次毕业设计是我们第一次尝试这做一个系统,一个比较完整和优秀的系统是有很好的规划的。虽然是第一次尝试,可也大概实现了一个具备的条理和功能。在编程的时候我们遇到一些麻烦,因为对Matlab软件本来就很陌生,且并不是任何工具都可以写出高效的代码。当然这是我们的弱项,我们或许无权去评判。3)不足和提高。毕业设计期间,我们对自己有了更加理性的了解,我们的软件工程的思想是有限的,软件需求的能力也是有限的,编程能力和系统规划能力有待提高。尽管这样,我们还是尽量运用了软件工程的思想。我们的编程能力在开发当中得到了很大提高,可以写出高效紧凑的代码,当然这是我们每个人都可以做到的。4)设计心得大学毕业设计是我们所必须面对的。15 第七章结论过几周的奋战我的毕业设计终于完成了。在没有做毕业设计以前觉得毕业设计只是对这几年来所学知识的单纯总结,但是通过这次做毕业设计发现自己的看法有点太片面。毕业设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。通过这次毕业设计使我明白了自己原来知识还比较欠缺。自己要学习的东西还太多,以前老是觉得自己什么东西都会,什么东西都懂,有点眼高手低。通过这次毕业设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。毕业设计过程中所学到的东西是这次毕业设计的最大收获和财富,使我终身受益。15致谢15 致谢致谢本论文是在我们导师孙小齐的悉心指导下完成。都给我们留下了很深的印象。在整个作课题的过程中,孙老师不时给予我们热情的鼓励和实验设施上的大力支持,这是我们的课题顺利完成的保障。首先,我要向我的导师孙小齐老师,表示最衷心的感谢。从本论文一开始设计,到系统的最初规划,程序编写以及最后的论文撰写过程中都给于了我许多得建议和指正。另外,还要感谢这四年来所有老师对我的辛苦培育。还有这四年来所有关心我的人。15 致谢参考文献[1]苏中义.MATLAB简介[J].上海电机技术高等专科学院学报,2003,4:78.[2]杨建强,罗先香.MATLAB软件工具箱简介[J].水科学进展,2001,12(2):237~242.[3]刘瑞桢.MATLAB简介[J].电脑编程技巧与维护,1997,7(1):48~51.[4]杨世文,许小健.MATLAB优化工具箱在结构优化设计中的应用[J].科学技术与工程,2008,8(5):1347~1349.[5]刘勤让,罗小武.基于MATLAB的信号处理仿真[J].信息工程大学学报,2000,1(1):38~40.[6]高飞,汪浩.基于MATLAB的“信号与系统”仿真实验及其性能分析[J].南民族学院学报(自然科学版),2001,10(2):266~269.[7]林月美,陈仁安,基于MATLAB的信号与系统软件实验平台[J].集美大学学报,2001,6(3):51~254.[8]夏平.基于matlab的信号与系统、数字信号处理实验体系[J].教学实验,2004,26(5):73~76.[9]李蕴华.基于Matlab的《信号与系统》频域分析[J].武汉科技学院学报,2006,19(5):21~24.[10]任亚莉.MATLAB在信号与系统仿真实验中的应用[J].编程园地,2006,16(2):34~36.[11]许艳惠.基于MA丁LAB的信号系统仿真及应用[J].仪器仪表用户,2006:96~97.[12]吕锋,刘泉,江雪梅.基于MATLAB的信号与系统软件实验平台[J].理工高教研究,2006,4(25):98~99.[13]罗朝明,李文,李延平,刘杰.基于Matlab和VB的《信号与系统》虚拟实验系统[J].湖南理工学院学报(自然科学版),2007,20(1):59~62.[14]马蕾,任全会.基于MATLAB的信号与系统频域方面仿真教学[J].SCIENCE&TECHNOLOGYINFORMATION,2007,10:361~362.[15]肖军,张伟宏.MATLAB软件及其应用[J].《软件工程师》,1998,4:25~27.[16]陈金.什么是MATLAB.振动、测试与诊断[J].1999,15:56~57.[17]初秀琴.Matlab外部接口的研究与实现[J].计算仿真,2002,19(1):107~109.[18]李健.基于matlab的数字图像处理WEB实验平台的开发[J].2003,23(10):80~84.[19]姜长元.vc和Matlab混合编程的方法及实现[J].编程园地,2004.[20]周传胜.基于MATLAB的网络交互式虚拟现实实验系统的研究[J].实验技术与管理.[21]李世银,辛晓丽,罗驱波,岳婷.基于MATLABWebServer的通信原理远程仿真系统开发[J].电气电子教学学报,2005,3(6):103~105.15 附录附录:主要代码15附录1.基本序列计算functionvarargout=xljbjs(varargin)gui_Singleton=1;gui_State=struct("gui_Name",mfilename,..."gui_Singleton",gui_Singleton,..."gui_OpeningFcn",@xljbjs_OpeningFcn,..."gui_OutputFcn",@xljbjs_OutputFcn,..."gui_LayoutFcn",[],..."gui_Callback",[]);ifnargin&&ischar(varargin{1})gui_State.gui_Callback=str2func(varargin{1});endifnargout[varargout{1:nargout}]=gui_mainfcn(gui_State,varargin{:});elsegui_mainfcn(gui_State,varargin{:});endfunctionxljbjs_OpeningFcn(hObject,eventdata,handles,varargin)handles.output=hObject;guidata(hObject,handles);functionvarargout=xljbjs_OutputFcn(hObject,eventdata,handles)varargout{1}=handles.output;functionpushbutton1_Callback(hObject,eventdata,handles)t=str2num(get(handles.edit1,"String"));k=[t-5:t+5];fk=[(k-t)==0];stem(k,fk)title("ì")functionpushbutton2_Callback(hObject,eventdata,handles)t=str2num(get(handles.edit2,"String"))2.基本信号产生functionvarargout=jbxhcs(varargin)gui_Singleton=1;gui_State=struct("gui_Name",mfilename,..."gui_Singleton",gui_Singleton,..."gui_OpeningFcn",@jbxhcs_OpeningFcn,..."gui_OutputFcn",@jbxhcs_OutputFcn,..."gui_LayoutFcn",[],..."gui_Callback",[]);ifnargin&&ischar(varargin{1})gui_State.gui_Callback=str2func(varargin{1});endifnargout[varargout{1:nargout}]=gui_mainfcn(gui_State,varargin{:});elsegui_mainfcn(gui_State,varargin{:});endfunctionjbxhcs_OpeningFcn(hObject,eventdata,handles,varargin)15 附录handles.output=hObject;guidata(hObject,handles);functionvarargout=jbxhcs_OutputFcn(hObject,eventdata,handles)varargout{1}=handles.output;functionpushbutton1_Callback(hObject,eventdata,handles)clcA=str2num(get(handles.edit6,"String"));a=str2num(get(handles.edit4,"String"));t=0:.001:10;ft=A*exp(a*t);plot(t,ft),gridtitle("A*exp(a*t)")functionpushbutton2_Callback(hObject,eventdata,handles)clcA=str2num(get(handles.edit3,"String"));W=str2num(get(handles.edit2,"String"));P=str2num(get(handles.edit1,"String"));t=0:.001:10;ft=A*sin(W*t+P);plot(t,ft),gridtitle("A*sin(W*t+P)")functionpushbutton4_Callback(hObject,eventdata,handles)dt1=str2num(get(handles.edit12,"String"))-str2num(get(handles.edit13,"String"));%dt2=str2num(get(handles.edit12,"String"))+str2num(get(handles.edit13,"String"));t=dt1:0.001:dt2;ft=rectpuls(t-str2num(get(handles.edit12,"String")),str2num(get(handles.edit13,"String")));plot(t,ft)title("")functionpushbutton5_Callback(hObject,eventdata,handles)t=str2num(get(handles.edit7,"String"))-1:.001:str2num(get(handles.edit7,"String"))+1;ft=sign(t-str2num(get(handles.edit7,"String")));axis([str2num(get(handles.edit7,"String"))-2,str2num(get(handles.edit7,"String"))+2,-1.2,1.2])plot(t,ft),gridtitle("sgn(t-t0)")functionpushbutton6_Callback(hObject,eventdata,handles)t=-3*str2num(get(handles.edit11,"String"))*pi:pi/100:3*str2num(get(handles.edit11,"String"))*pi;ft=sinc((t-str2num(get(handles.edit11,"String")))/pi);axis([str2num(get(handles.edit11,"String"))-10,str2num(get(handles.edit11,"String"))+10,-1,1])plot(t,ft)title("¨¨")functionpushbutton7_Callback(hObject,eventdata,handles)t1=str2num(get(handles.edit8,"String"));t=t1-1:0.01:t1+1;n=length(t);x=zeros(1,n);x(1,(n-1)/2)=1;3.卷积functionvarargout=juanji(varargin)gui_Singleton=1;gui_State=struct("gui_Name",mfilename,..."gui_Singleton",gui_Singleton,..."gui_OpeningFcn",@juanji_OpeningFcn,..."gui_OutputFcn",15 附录@juanji_OutputFcn,..."gui_LayoutFcn",[],..."gui_Callback",[]);ifnargin&&ischar(varargin{1})gui_State.gui_Callback=str2func(varargin{1});endifnargout[varargout{1:nargout}]=gui_mainfcn(gui_State,varargin{:});elsegui_mainfcn(gui_State,varargin{:});endfunctionjuanji_OpeningFcn(hObject,eventdata,handles,varargin)handles.output=hObject;guidata(hObject,handles);functionvarargout=juanji_OutputFcn(hObject,eventdata,handles)varargout{1}=handles.output;functionpushbutton1_Callback(hObject,eventdata,handles)clct=str2num(get(handles.edit1,"String"));t11=0;%f1tt12=1;%f1tt21=0;%f2tt22=2;%f2tt1=t11:0.001:t12;ft1=2*rectpuls(t1-0.5,1);t2=t21:0.001:t22;ft2=t2;t3=t11+t21:0.001:t12+t22;ft3=conv(ft1,ft2);%¨ft3=t*ft3*0.001;plot(t3,ft3)title("f1(t)*f2(t)")functionpushbutton2_Callback(hObject,eventdata,handles)clcclearallclose4.傅立叶变换functionvarargout=flybh(varargin)gui_Singleton=1;gui_State=struct("gui_Name",mfilename,..."gui_Singleton",gui_Singleton,..."gui_OpeningFcn",@flybh_OpeningFcn,..."gui_OutputFcn",@flybh_OutputFcn,..."gui_LayoutFcn",[],..."gui_Callback",[]);ifnargin&&ischar(varargin{1})gui_State.gui_Callback=str2func(varargin{1});endifnargout[varargout{1:nargout}]=gui_mainfcn(gui_State,varargin{:});elsegui_mainfcn(gui_State,varargin{:});endfunctionflybh_OpeningFcn(hObject,eventdata,handles,varargin)handles.output=hObject;guidata(hObject,handles);functionvarargout=flybh_OutputFcn(hObject,eventdata,handles)varargout{1}=handles.output;functionpushbutton1_Callback(hObject,eventdata,handles)functionpushbutton2_Callback(hObject,eventdata,handles)15 附录t=str2num(get(handles.edit1,"String"));n=-5:5;x=t.^n;k=-200:200;w=(pi/100)*k;X=x*(exp(-j*pi/100)).^(n"*k);p=abs(X);plot(w/pi,p),gridxlabel("frequencyinunitsofpi");ylabel("|X|");title("magnitude");functionedit1_Callback(hObject,eventdata,handles)functionedit1_CreateFcn(hObject,eventdata,handles)ifispcset(hObject,"BackgroundColor","white");elseset(hObject,"BackgroundColor",get(0,"defaultUicontrolBackgroundColor"));endfunctionpushbutton6_Callback(hObject,eventdata,handles)clcclearallclosefunctionpushbutton7_Callback(hObject,eventdata,handles)SAVEAS(handles.axes1,"FILENAME","fig")functionpushbutton8_Callback(hObject,eventdata,handles)N=str2num(get(handles.edit2,"String"));x0=sin(N*2*pi*[1:8]/8)*5;dt=2*pi/8;w=linspace(0,2*pi,1000)/dt;x0=x0*exp(-j*[1:length(x0)]"*w)*dt;plot(w,abs(x0))functionedit3_Callback(hObject,eventdata,handles)functionedit3_CreateFcn(hObject,eventdata,handles)ifispcset(hObject,"BackgroundColor","white");elseset(hObject,"BackgroundColor",get(0,"defaultUicontrolBackgroundColor"));endfunctionpushbutton9_Callback(hObject,eventdata,handles)clcf=str2num(get(handles.edit3,"String"));t=0:0.01:2*pi;y=f*sin(t);plot(t,y),holdony=f*(sin(t)+sin(3*t)/3);plot(t,y),holdony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5);plot(t,y),holdony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7);plot(t,y),holdony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7+sin(9*t)/9);plot(t,y),holdony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7+sin(9*t)/9+sin(11*t)/11);plot(t,y)5.滤波器设计functionvarargout=lbqsj(varargin)gui_Singleton=1;gui_State=struct("gui_Name",mfilename,..."gui_Singleton",gui_Singleton,..."gui_OpeningFcn",@lbqsj_OpeningFcn,..."gui_OutputFcn",@lbqsj_OutputFcn,..."gui_LayoutFcn",[],...15 附录"gui_Callback",[]);ifnargin&&ischar(varargin{1})gui_State.gui_Callback=str2func(varargin{1});endifnargout[varargout{1:nargout}]=gui_mainfcn(gui_State,varargin{:});elsegui_mainfcn(gui_State,varargin{:});endfunctionlbqsj_OpeningFcn(hObject,eventdata,handles,varargin)handles.output=hObject;guidata(hObject,handles);functionvarargout=lbqsj_OutputFcn(hObject,eventdata,handles)varargout{1}=handles.output;functionpushbutton1_Callback(hObject,eventdata,handles)t=str2num(get(handles.edit2,"String"));f=[0,t,t,1];m=[0,0,1,1];b=fir2(30,f,m);n=0:30;[h,w]=freqz(b,1,256);plot(w/pi,20*log10(abs(h)));gridfunctionpushbutton2_Callback(hObject,eventdata,handles)functionpushbutton3_Callback(hObject,eventdata,handles)clcclearallclosefunctionpopupmenu1_Callback(hObject,eventdata,handles)functionpopupmenu1_CreateFcn(hObject,eventdata,handles)ifispcset(hObject,"BackgroundColor","white");elseset(hObject,"BackgroundColor","white");elseset(hObject,"BackgroundColor",get(0,"defaultUicontrolBackgroundColor"));endfunctionedit3_Callback(hObject,eventdata,handles)functionedit3_CreateFcn(hObject,eventdata,handles)ifispcset(hObject,"BackgroundColor","white");else15'