1、 基于 MATLAB 的图形用户界面设计摘 要本文概述了利用 Matlab 软件提供的图形用户界面创建具有人机交互、界面友好的图形用户界面。本文采用 Matlab 的图形用户界面设计功能, 设计出了各个实验界面。在该软件中, 实现了对某虚拟信号处理实验箱的操作平台界面的设计。 Matlab 语言是一种广泛应用于工程计算及数值分析领域的新型高级语言,Matlab 功能强大、简单易学、编程效率高,深受广大科技工作者的喜爱。特别是 Matlab 还具有信号分析工具箱,不需具备很强的编程能力,就可以很方便地进行信号分析、处理和设计。通过数字信号处理课程的理论知识的综合运用。从实践上初步实现对数字信号的
2、处理。关键字 信号处理 MATLAB 图形用户界面目 录 1 绪论 11.1 概述 11.2 本文的主要工作 11.3 研究意义 12 系统分析与方案选取 22.1 引言 22.2 系统主要目标及功能 22.3 模拟信号实验的软件工具选择 22.4 设计方案选择 23 系统软件平台的设计 33.1 引言 33.2 系统整体框图 33.3 系统设计步骤 33.4 模块具体设计 43.5 基本序列表示 73.6 基本信号产生 83.7 卷积 .104 信号仿真演示 .124.1 基本序列表示仿真演示 .124.2 基本信号产生仿真演示 .124.3 卷积模块仿真演示 .13结束语 .14致 谢 .
3、15参考文献 .1601 绪论1.1 概述随着计算机的普及应用以及科技的发达,现代社会是信息的社会,对信息的研究变得非常重要,而对信号波形的模拟可以方便研究人员研究。以前的信号模拟是用硬件,对仪器和实验室的要求较高,不便于广泛应用,而且信号处理具有内容繁多、概念抽象、设计复杂等特点,让人难以理解和掌握。硬件模拟信号波形对设备要求较高,有时候受仪器或操作不对等因素的影响将无法正确直观的看到波形,参数改变时不能立即看到波形变化。而用软件的形式对信号波形进行仿真有着界面可视性强,操作简单方便;便于数据修改,文件保存,实验效率高,实验内容丰富,结果直观易懂,便于分析;而且系统容易扩展新的实验项目。1.
4、2 本文的主要工作本文主要是针对以 Matlab 为软件平台的信号系统实验平台的设计,用 Matlab 语言编程开发一个适合小型的信号系统实验平台,具体的工作主要有: 1)在欢迎界面,具有进入功能模块,返回模块和退出模块。2)在功能模块中,包括参数设置区、图形显示区和数据显示区等组成单元,可以完成对指定功能的设置,显示和实现。3)设置三个功能模块,实现一定的信号和系统的设计或分析。1.3 研究意义Matlab 作为编程语言和可视化工具 , 它的界面演示框如同通用示波器 , 显示了信号分析与系统设计的动态仿真过程 , 给人以直观的感受。它可以改变信号、模块、仿真子系统等的参数 , 并观察信号与系
5、统的相应变化. 在实验过程中 , 我们对所学的书本知识会有感性的认识和直观的验证 , 加深对“信号与系统”原理的理解。本课题能避开硬件系统的不足,而且有很多的库函数可以在实验时直接调用,避免了用硬件做实验的局限性。可以更方便的做信号系统实验,还能够锻炼一个人在面对一个具体的项目时,遇到问题,分析问题,解决问题的能力;获得独立策划、实施课题,并按照既定计划进行开发的经验,以及查找相关文献的能力。而且对系统规划有了初步的认识。为以后研发工作打下坚实的基础,积累宝贵的经验。12 系统分析与方案选取2.1 引言Matlab 语言称为第四代编程语言,程序简洁、可读性很强而且调试十分容易,自1984 年由
6、美国 MathWorks 公司推向市场以来,历经十几年的发展,现已成为国际公认的优秀科技应用软件,是数字信号处理方面得天独厚优势图形开发工具.用简单,可视化的仿真模拟图形给大家演示部分基本波的传输特性,以及在信道中的传输特性。使他们直观,感性地了解和掌握通信系统的概念、传输性能等。2.2 系统主要目标及功能本课题开发目标是利用 Matlab 软件开发一套集可视化图形与动态仿真为一体的软件。表现出信号与系统课程中部分信号的产生、图形,卷积等,实现一定的信号和系统的设计和分析,可以直观、感性地了解和掌握信号系统的概念、基本特征等,深化对通信概念的理解。本系统主要功能包括基本序列计算、基本信号产生、
7、卷积设计等。简单基础地涵盖了信号与系统部分主要章节, 用可视化的仿真模拟图形演示部分基本信号的传输波形和调制变换,部分交互式界面可直接输入合适的值使大家更直观、感性地了解和掌握信号系统的概念、传输性能、基本特征等,让课程的学习和实践相结合。界面上的文字说明帮助大家了解本图形的特性或功能。2.3 模拟信号实验的软件工具选择我们在学习信号与系统和数字信号处理课程时,做实验的时候用的是Matlab 软件来实现信号波形的模拟以及处理,可以比较直观准确的看到波形,对Matlab 软件也有了初步的认识,也可以用它编写一些比较简单的程序来。在信号波形模拟的领域中,我们只接触过 Matlab 软件,所以在编写
8、模拟信号波形这个模块中我们选择 Matlab 软件。2.4 设计方案选择在本系统的设计中, 界面布局设计采用自顶向下的设计方法, 即先设计引导界面和主界面, 再设计各个实验子界面。界面设计完成后, 只是一些静态的画面而已, 没有什么内涵, 还不能用于实验操作, 要想达到实验目的, 必须借助于函数调用。在设计中, 各个回调函数的编写顺序则是采用自底向上的设计方法, 即先编制各个实验子界面的回调函数, 再编写主界面和引导界面的回调函数。23 系统软件平台的设计3.1 引言信号系统实验繁多、复杂,许多实验还需要输入参数,若将系统设计成一个界面,使得系统繁重、拥挤,不能够实现友好、美化的界面的设计要求
9、。因此,在设计界面的时候,采用一个主界面和若干子界面,每个子界面是一个模块,实现一个实验或功能,并通过主界面调用子界面的设计方法。3.2 系统整体框图本实验系统整体结构设计由两部分组成: 界面模块设计和菜单模块设计。其中, 界面模块总共包括四个模块: 开始引导模块、序列基本计算模块、基本信号的产生模块、卷积模块。在菜单设计时, 在实验子界面中除使用系统约定的菜单条外, 还增加了几个控制背景和退出实验的菜单。系统的整体结构如图 3-1 所示。图 3-1 系统整体架构3.3 系统设计步骤设计的具体步骤如下:1)运用 Matlab 的图形用户界面 (GUI)设计方法, 设计整个实验系统的开始引导界面
10、、实验主界面及其实现信号处理课程中具体实验的各个子界面。2)分别编写各个子界面的各个控件对象的回调函数, 来实现控件相应控制功能, 达到直接通过界面上各个控件就可以控制数据的输入输出, 并可以方便地对实验结果的数据及其图形进行读取和分析的目的。开始引导界面开始界面基本序列计算 基本信号产生 卷 积33)编写主界面的回调函数, 将各个实验子界面整合在信号处理系统实验主界面中, 即通过主界面就可以进入任何一个实验子界面进行实验。4)编写开始引导界面的回调函数, 实现从引导界面直接进入主界面。3.4 模块具体设计1)系统欢迎模块。系统欢迎界面如图 3-2 所示。图 3-2 系统欢迎界面2)基本序列表
11、示模块 序列基本表示模块界面如图 3-3 所示:4图 3-3 序列基本表示模块由图 3-3 可以看出在这个模块里包括了单位脉冲序列,单位阶跃序列,指数序列一共三个序列,可以看出这个系统的主要模块,简洁明了,对每个模块都有详细的说明,在做实验之前可以参考说明以便能顺利的进行实验,在主界面上选择任何一个实验都可以切换到它的子界面。3)基本信号产生模块基本信号产生模块的窗体创建启动 matlabR2012B,在命令窗口输入 guide,打开 GUI 制作窗口,在窗体上有界面制作工具。在 pushbutton 下单击右键 callback,打开 callback function,调用 MATLAB
12、内部提供的函数:sin 函数 , exp 函数, pulstran 函数 ,chip 函数在 GUI 制作窗口,axes 是用来显示图形,当单击 pushbutton,运行结果,会在 axes中显示出来。简单函数基本性质的模块,通过人机交互方式进行设计,在信号 1 和信号 2 中输入幅值,频率,初相,移位不同的值,对其信号相加,信号相乘,信号移位使信号在axes 窗口中,显示出来。仿真的波形有正弦波,指数函数,抽样函数,矩形脉冲函数。Popupmenu 函数中用 switch val1case 1 来调用不同的波形,)设置句柄5get(handles.popupmenu). 用 strdoub
13、le(get(handles.edit,string)来输入测试数据,达到直观仿真模拟图. 基本信号的产生模块如图 3-4 所示:图 3-4 基本信号产生模块4)卷积模块:卷积模块如图 3-5 所示:图 3-5 卷积模块63.5 基本序列表示a.单位阶跃序列单位阶跃序列的公式)0(1nu类似于连续时间系统中的单位阶跃信号 ,但应注意 在 点发生跳变,往往ttu0不予定义(或定义为 ) ,而 在 =0 点明确规定为 。21tu1单位阶跃序列的关键程序:function pushbutton2_Callback(hObject, eventdata, handles)t=str2num(get(h
14、andles.edit2,String); k=t-3:t+7; fk=(k-t)=0; stem(k,fk)title(单位阶跃序列)b.单位脉冲序列:单位脉冲序列的公式:时 )( 当 时当 0)n(10)(n单位脉冲序列关键程序:function pushbutton2_Callback(hObject, eventdata, handles)t=str2num(get(handles.edit1,String); k=t-3:t+7; fk=(k-t)=0; stem(k,fk)title(单位冲激序列)7c.指数序列指数序列公式:nuax当 1 时序列是发散的, 0 序列都取正值, 0
15、,信号将随着时间而增长,若 a0,信号则随时间衰减。常数K 表示指数信号在 t=0 点的初始值。指数信号的关键程序:function pushbutton1_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)c.抽样信号:抽样信号公式:nTtxstx)(0)((n 为整数)式中 X(nT)为 t=nT 时 X(
16、t)的值。均匀抽样还可以是用连续时间函数 X(t)对一冲激序列进行的脉冲幅度调制。设冲激序列 P(t)为一串单位冲激,而相邻冲激的时间间隔为T,则nTttp)()(于是9nns TtXnt )()()抽样信号 XS(t)是用 X(t)与单位冲激序列 P(t)相乘的结果。抽样信号的关键程序:function pushbutton7_Callback(hObject, eventdata, handles)clct=-3*pi:pi/100:3*pi;ft=sinc(t/pi);axis(str2num(get(handles.edit9,String)-10,str2num(get(handle
17、s.edit9,String)+10,-0.5,1.2)plot(t,ft),gridtitle(sinc(t/pi)d.矩阵脉冲:矩阵脉冲的关键程序:function pushbutton8_Callback(hObject, eventdata, handles)clct=0:0.001:4;T=1;ft=rectpuls(t-2*str2num(get(handles.edit10,String),2*str2num(get(handles.edit12,String);plot(t,ft),gridtitle(rectpuls(t-2*T,2*T)3.7 卷积对于任意两个信号 和 ,两
18、者做卷积运算定义为tf1tf2d做一变量代换不难证明tftftftf 12112 *式中 是两函数作卷积运算的简写符号,也可以写成 。这里的积tf21* 210分取 和 ,这是由于对 和 的作用时间范围没有加以限制。实际由于系统tf1tf2的因果性或激励信号存在时间的局限性,其积分限会有变化,这一点借助卷积的图形解释可以看得很清楚。可以说卷积积分中积分限的确定是非常关键的。卷积的关键程序: function pushbutton2_Callback(hObject, eventdata, handles)clct=str2num(get(handles.edit1,String);t11=0;
19、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)114 信号仿真演示4.1 基本序列表示仿真演示例 1:单位脉冲序列如图 4-1:图 4-1 单位脉冲序列4.2 基本信号产生仿真演示例 2:正弦信号如图 4-2:12图 4-2 正弦信号例 3:抽样信号如图 4-3:图 4-3 抽样信号4.3 卷积模块仿
20、真演示例 3:卷积模块如图 4-3:13图 4-3 卷积模块本章主要表现了信号仿真演示过程,可以直观形象的表现出本软件所具备的具体功能。14结束语这次课程设计历时一个星期,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次设计,进一步加深了对数字信号处理的了解,让我对它有了更加浓厚的兴趣。但是在编写程序时,也遇到了不少问题,特别是程序语法,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够
21、的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。总的来说,这次课程设计还是比较成功的,在设计中遇到了很多问题,最后在老师的辛勤的指导下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。最后,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢。15致 谢本论文是在我们导师郭淑婷的悉心指导下完成
22、的。给我们留下了很深的印象。在整个作课题的过程中,郭老师不时给予我们热情的鼓励和实验设施上的大力支持,这是我们的课题顺利完成的保障。首先,我要向我的导师郭淑婷老师,表示最衷心的感谢。从本论文一开始设计,到系统的最初规划,程序编写以及最后的论文撰写过程中都给于了我许多得建议和指正。另外,还要感谢所有老师对我的辛苦培育,还有所有关心我的人。16参考文献1、 数字信号处理教程(第三版) ,程佩青著,清华大学出版社,2007.2、 数字信号处理教程MATLAB 释义与实现(第二版) ,陈怀琛著,电子工业出版社,2008.3、 MATLAB 及在电子信息课程中的应用(第四版) ,陈怀琛等著,电子工业出版社,2013.4、 MATLAB 软件工具箱简介 ,杨建强等著,水科学进展, 2001.5、 基于 MATLAB 的信号处理仿真 ,刘勤让,罗小武著,信息工程大学学报, 2000.6、 MATLAB 在信号与系统仿真实验中的应用 , 任亚莉著,编程园地,2006.7、 基于MATLAB的信号系统仿真及应用 ,许艳惠著,仪器仪表用户 ,2006.8、 基于MATLAB 的信号与系统软件实验平台 ,吕锋,刘泉,江雪梅著,2006.