matlab课程设计.docx
《matlab课程设计.docx》由会员分享,可在线阅读,更多相关《matlab课程设计.docx(27页珍藏版)》请在冰豆网上搜索。
matlab课程设计
MATLAB工具箱里面的函数为用户进行数字信号的处理提供了极大的方便。
不仅仅如此,它还为很多重要的函数提供了更加简单、更加直观的数字信号处理方式——信号处理的图形用户界面工具:
SPTool工具和FDATool工具。
信号处理工具箱为用户提供了一个交互式的图形用户界面工具——SPTool,用来执行常见的信号处理任务。
它是一个图形环境,为信号处理工具箱中的很多函数提供了易于使用的界面,只需要操纵鼠标就可以载入、观察、分析和打印数字信号,分析、实现和设计数字滤波器,以及进行谱分析等。
用户界面是用户与计算机进行信息交流的方式。
图形用户界面(或GUI)是包含图形对象,如:
窗口、图标、菜单和文本的用户界面。
MATLAB把构成图形的各个基本要素称为图形对象。
这些对象包括计算机屏幕、图形窗口(Figure)、坐标轴(Axes)、用户菜单(Uimenu)、用户控件(Uicontrol)、曲线(Line)、曲面(Surface)、文字(Text)、图像(image)、光源(Light)、区域块(Patch)和方框(Rectangle)。
系统将每一个对象按树型结构组织起来。
每个图形对象都可以被独立地操作。
MATLAB在创建每一个图形对象时,都为该对象分配唯一的一个值,称其为图形对象句柄(Handle)。
句柄是图形对象的唯一标识符。
计算机屏幕作为根对象由系统自动建立,其句柄值为0
图形窗口对象的句柄值为一正整数,并显示在该窗口的标题栏,其他图形对象的句柄为浮点数。
MATLAB提供了若干个用于获取已有图形对象句柄的函数。
常用的如下表:
函数
功能
gcf
获取当前图形窗口的句柄(getcurrentfigure)
gca
获取当前坐标轴的句柄(getcurrentaxis)
gco
获取最近被单击的图形对象的句柄(getcurrentobject)
gcbo
获得当前正在执行调用的对象的句柄
gcbf
获取包括正在执行调用的对象的图形句柄
delete
删除句柄所对应的图形对象
findobj
获取具有指定的属性值的对象的句柄
(1)图形窗口对象
图形窗口是MATLAB中很重要的一类图形对象。
MATLAB中的一切图形图像的输出都是在图形窗口中完成的。
掌握好图形窗口的控制方法,对于充分发挥MATLAB的图形功能和设计高质量的用户界面是十分重要的。
建立图形窗口对象使用figure函数,其调用格式为:
H=figure(属性名1,属性值1,属性名2,属性值2,…)
MATLAB通过对属性的操作来改变图形窗口的形式。
也可使用:
figure或H=figure
按MATLAB缺省的属性值建立图形窗口。
还可以通过:
figure(窗口句柄)
调用来显示指定窗口或将之设定为当前窗口。
要关闭图形窗口使用:
close(H)%closeall关闭所有的图形窗口
MATLAB为每个图形窗口提供了很多属性。
这些属性及其取值控制着图形窗口对象。
除前面的公共属性外,常用的还有:
1)Name属性——取值可以是任何字符串,它的缺省值为空。
这个字符串作为图形窗口的标题。
一般情况下,其标题形式为:
FigureNo.1:
字符串。
2)NumberTitle属性——取值是on(缺省值)或off。
决定着在图形窗口的标题中是否以“FigureNo.n:
”为标题前缀,这里n是图形窗口的序号,即句柄值。
3)MenuBar属性——取值可以是figure(缺省值)或none。
用来控制图形窗口是否应该具有菜单条。
如果它的属性值为none,则表示该图形窗口没有菜单条。
4)Resize属性——确定是否可以改变图形窗口的大小。
5)ToolBar属性——是否显示工具条。
6)Position属性——设定对象的位置和大小,为1×4向量,前两个值为窗口左下角横纵坐标值,后两个元素值为窗口的宽度和高度,其单位由units属性设定。
7)units属性——取值是下列字符串中的一种:
pixels(象素,默认)、points(磅)、inches(英寸)、centimeters(厘米)和normalized(相对单位)。
该属性定义图形窗口使用的长度单位,从而决定窗口的大小与位置。
除normalized以外,其它单位都是绝对度量单位。
相对单位normalized将屏幕左下角对应为(0,0),而右上角对应为(1.0,1.0)。
该属性将影响一切定义的属性项。
8)KeyPressFcn属性、WindowButtonDownFcn属性、WindowButtonMotionFcn属性、WindowButtonUpFcn属性——均为字符型,取值为某M文件名或一小段程序,分别用于键盘按下、鼠标按下、鼠标移动、鼠标释放、创建对象时与取消对象时加以执行。
9)Pointer属性——设置鼠标的显示形式。
取值及意义如下表:
选项
意义
选项
意义
选项
意义
crosshair
arrow
(缺省)
watch
topl
topr
botl
botr
circle
cross
fleur
custom
自定义
图形用户界面设计工具GUIDE
为了更方面简洁地进行界面设计,MATLAB提供了一个可视化图形界面开发环境GUIDE(GraphicalUserInterfaceDevelopmentEnvironment)。
这种开发环境如同VB、VC++等程序,设计用户交互界面的过程就是把需要的控件从控件模板拖或复制到界面编辑区,直观、方便,实现了“所见即所得”的可视化设计。
用户要进入图形用户界面设计窗口,可以在MATLAB环境下:
选择File→New→GUI子菜单或在命令窗口键入:
guide
即可得到下图:
一:
创建图形用户界面
在主窗口中输入guide后回车可快速开始GUI设计
MATLAB为GUI设计一共准备了4种模板,分别是BlankGUI(默认)、GUIwithUicontrols(带控件对象的GUI模板)、GUIwithAxesandMenu(带坐标轴与菜单的GUI模板)与ModalQuestionDialog(带模式问话对话框的GUI模板)。
当用户选择不同的模板时,在GUI设计模板界面的右边就会显示出与该模板对应的GUI图形。
单击OK后,便可以进入GUIDE设计主窗口
选择第一个BlankGUI(default)出现如下界面
图形用户界面GUI设计窗口由菜单栏、工具栏、控件工具栏以及图形对象设计区等4个
功能区组成。
GUI设计窗口的菜单栏有File、Edit、View、Layout、Tools和Help6个菜单项,使用其中的命令可以完成图形用户界面的设计操作。
编辑工具在菜单栏的下方,提供了常用的工具;设计工具区位于窗口的左半部分,提供了设计GUI过程中所用的用户控件;空间模板区是网格形式的用户设计GUI的空白区域。
在GUI设计窗口创建图形对象后,通过双击该对象,就会显示该对象的属性编辑器。
添加3个PushButton。
然后调整它们的大小和位置,放完后如下图所示。
添加1个axes2,如下图所示
点击运行按键,会出现如下图的显示:
用鼠标左键双击各个实体可改变它们显示的属性,标签等信息。
如下图所示。
然后,把相应的程序输入到下面所显示的图当中去
输入后,结果如下图所示,
点击正弦波的按键,将会出现如下图所示的正弦波;
按下方波的按键,就会出现如下图所示的矩形波
然后用同样的方法,可以实现锯齿波等等,自己想要实现的功能。
每个实体的属性修改完后显示的效果如下图所示。
设置完后点击保存,将名字存为wangjun.m。
软件自动生成m文件的主体。
二:
在生成的m文件下,对函数各个模块的具体内容写进去。
通过f和t的输入改变函数的时域图像和频谱。
时域图像画在下面的坐标,频谱画在上面的坐标。
使用Guide进行GUI的界面设计,就像在纸上绘制界面一样简单。
一般来说,具体的GUI开发过程可分为5个步骤:
GUI界面的设计和布局、GUI的编程、菜单的设计和布局、菜单的编程以及调试运行并保存。
当界面设计好并进行保存后,系统将生成.fig与.m文件,其中的M文件由以下几部分构成:
1)系统初始化文件,其中包括GUI设计
2)各种控件的响应函数,其中的回调函数为空,用户需插入相应的代码。
在编写调用的函数文件中,handles变量非常重要,实际上它是一个结构数组,它存储所有在图形界面中的控件、菜单和轴对象的句柄,而每个对象的句柄被存储在handles结构数组的一个字段中,名称与对象的Tag相同。
为了添加控件,可以从GUI设计窗口的控件面板中选择一个对象,然后以拖曳方式在客户区建立该对象。
在GUI设计窗口创建对象后,通过双击该对象,就会显示该对象的属性查看器,通过它可以设置该对象的属性值。
在选中对象的前提下,单击鼠标右键,会弹出一个快捷菜单,可以从中选择某个子菜单进行相应的操作。
在对象设计区右击鼠标,会显示与图形窗口有关的快捷菜单。
开发好一个程序的过程主要有两个重要的内容:
布局好图形用户界面控件和给这个用户界面编写代码。
GUIDE环境把建立好的GUI文件保存为两个伴随文件:
FIG文件(保存用户界面设计的代码)和M文件(保存着GUI进行调用的各种函数和代码)。
GUIDE常用工具:
布局编辑器(LayoutEditor)
Cut:
对选中的控件进行剪切操作。
Copy:
复制选中的控件。
Paste:
粘贴复制的控件。
Delete:
删除选中的控件。
Duplicate:
对选中的控件进行复制并粘贴。
PropertyInspector:
对选中的控件打开属性编辑窗口。
ObjectBrowser:
打开对象浏览窗口。
ButtonDownFcn:
按下鼠标时控件回调的函数。
Callback:
单击鼠标时控件回调的函数或功能。
CreateFcn:
定义控件在创建阶段执行的回调例程。
DeleteFcn:
定义在对象的删除阶段执行的回调例程。
属性编辑器(PropertyInspector)
可查看每个对象的属性值,也可修改设置对象的属性值。
(1)控件风格和外观
BackgroundColor:
设置控件背景颜色,使用[RGB]或颜色定义。
CData:
在控件上显示的真彩色图像,使用矩阵表示。
ForegroundColor:
文本颜色。
String属性:
控件上的文本,以及列表框和弹出菜单的选项。
Visible:
控件是否可见。
(2)对象的常规信息
Enable:
表示此控件的使能状态,设置为on”,表示可选,为“off”时则表示不可选。
Style:
控件对象类型。
Tag:
控件表示(用户定义)。
TooltipString:
提示信息显示。
当鼠标指针位于此控件上时,显示提示信息。
UserData:
用户指定数据。
Position:
控件对象的尺寸和位置。
Units:
设置控件的位置及大小的单位
有关字体的属性,如FontAngle、FontName等。
(3)控件回调函数的执行
BusyAction:
处理回调函数的中断。
有两种选项:
即Cancel:
取消中断事件,queue:
排队(默认设置)。
ButtonDownFcn属性:
按钮按下时的处理函数。
CallBack属性:
是连接程序界面整个程序系统的实质性功能的纽带。
该属性值应该为一个可以直接求值的字符串,在该对象被选中和改变时,系统将自动地对字符串进行求值。
CreateFcn:
在对象产生过程中执行的回调函数。
DeleteFcn:
删除对象过程中执行的回调函数。
Interruptible属性:
指定当前的回调函数在执行时是否允许中断,去执行其他的函数。
(4)控件当前状态信息
ListboxTop:
在列表框中显示的最顶层的字符串的索引。
Max(Min):
最大(小)值。
Value:
控件的当前值。
对象浏览器(ObjectBrowser)
对象浏览器里面列出了所有对象的树状结构,这些结构就是当前正在设计的GUI程序中用到的所有对象。
利用它可观察当前设计阶段的各个句柄图形对象,也可以单击该对象以打开相应的属性编辑器。
M文件的内容如下:
functionvarargout=wangjun(varargin)
%WANGJUNM-fileforwangjun.fig
%WANGJUN,byitself,createsanewWANGJUNorraisestheexisting
%singleton*.
%
%H=WANGJUNreturnsthehandletoanewWANGJUNorthehandleto
%theexistingsingleton*.
%
%WANGJUN('CALLBACK',hObject,eventData,handles,...)callsthelocal
%functionnamedCALLBACKinWANGJUN.Mwiththegiveninputarguments.
%
%WANGJUN('Property','Value',...)createsanewWANGJUNorraisesthe
%existingsingleton*.Startingfromtheleft,propertyvaluepairsare
%appliedtotheGUIbeforewangjun_OpeningFcngetscalled.An
%unrecognizedpropertynameorinvalidvaluemakespropertyapplication
%stop.Allinputsarepassedtowangjun_OpeningFcnviavarargin.
%
%*SeeGUIOptionsonGUIDE'sToolsmenu.Choose"GUIallowsonlyone
%instancetorun(singleton)".
%
%Seealso:
GUIDE,GUIDATA,GUIHANDLES
%Edittheabovetexttomodifytheresponsetohelpwangjun
%LastModifiedbyGUIDEv2.518-May-201217:
17:
36
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',@wangjun_OpeningFcn,...
'gui_OutputFcn',@wangjun_OutputFcn,...
'gui_LayoutFcn',[],...
'gui_Callback',[]);
ifnargin&&ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
});
end
%Endinitializationcode-DONOTEDIT
%---Executesjustbeforewangjunismadevisible.
functionwangjun_OpeningFcn(hObject,eventdata,handles,varargin)
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%varargincommandlineargumentstowangjun(seeVARARGIN)
%Choosedefaultcommandlineoutputforwangjun
handles.output=hObject;
%Updatehandlesstructure
guidata(hObject,handles);
%UIWAITmakeswangjunwaitforuserresponse(seeUIRESUME)
%uiwait(handles.figure1);
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=wangjun_OutputFcn(hObject,eventdata,handles)
%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Getdefaultcommandlineoutputfromhandlesstructure
varargout{1}=handles.output;
%---Executesonbuttonpressinplot_button.
functionplot_button_Callback(hObject,eventdata,handles)
%hObjecthandletoplot_button(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%GetuserinputfromGUI
f1=str2double(get(handles.f1_input,'String'));
t=eval(get(handles.t_input,'String'));
%Calculatedata
x=sin(2*pi*f1*t);
y=fft(x,512);
m=y.*conj(y)/512;
f=1000*(0:
256)/512;
%Createfrequencyplotinproperaxes
plot(handles.frequency_axes,f,m(1:
257))
set(handles.frequency_axes,'XMinorTick','on')
gridon
%Createtimeplotinproperaxes
plot(handles.time_axes,t,x)
set(handles.time_axes,'XMinorTick','on')
gridon
functionf1_input_Callback(hObject,eventdata,handles)
%hObjecthandletof1_input(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Hints:
get(hObject,'String')returnscontentsoff1_inputastext
%str2double(get(hObject,'String'))returnscontentsoff1_inputasadouble
%Validatethatthetextinthef1fieldconvertstoarealnumber
f1=str2double(get(hObject,'String'));
ifisnan(f1)||~isreal(f1)
%isdoublereturnsNaNfornon-numbersandf1cannotbecomplex
%DisablethePlotbuttonandchangeitsstringtosaywhy
set(handles.plot_button,'String','Cannotplotf1')
set(handles.plot_button,'Enable','off')
%Givetheedittextboxfocussousercancorrecttheerror
uicontrol(hObject)
else
%EnablethePlotbuttonwithitsoriginalname
set(handles.plot_button,'String','Plot')
set(handles.plot_button,'Enable','on')
end
functiont_input_Callback(hObject,eventdata,handles)
%hObjecthandletot_input(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Hints:
get(hObject,'String')returnscontentsoft_inputastext
%str2double(ge