基于MATLAB的信号分析与处理仿真软件设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第30卷第2期温州大学学报·\u33258X然科学版2009年4月Vol30,No2JournalofWenzhouUniversity·NaturalSciencesApr,2009基于MATLAB的信号分析与处理仿真软件设计蔡晓津,李晗(温州大学物理与电子信息学院,浙江温州325035)摘要:利用MATLAB软件,结合其图形用户界面(GUI),设计了具有良好人机界面的信号分析与处理仿真软件.着重介绍了该仿真软件图形用户界面的建立及其各个模块功能的实现,说明了该软件的使用方法,并给出了演示结果.关键词:MATLAB;仿真软件;信号分析处理中图分类号:TP391文献标志码:A文章编号:1674-3563(2009)02-0038-06DOI:10.3875/j.issn.1674-3563.2009.02.08本文的PDF文件可以从xuebao.wzu.edu.cn获得信号本身是抽象不可见的,在实际应用中,往往需要从频域、时域等多方面进行综合分析,才能得到信号的准确信息与特征.当信号经过一个系统,我们必须得到这个系统的相位响应、频率响应和冲击响应等信息,才能分析出这个信号在通过这个系统后所发生的变化.完成以上这些工作需要借助大量的数学运算和波形分析.MATLAB语法规则简单、接近人的思维方式、编程效率高[1-2],其图形用户界面GUI(GraphicUserInterface)的开发效率比其它语言高很多[3].本文将采用MATLAB软件来实现这些分析与处理.实现MATLAB可视化界面一般有两种方法,一是直接通过编辑M脚本文件产生图形用户界面GUI,二是通过MATLAB图形用户界面开发环境GUIDE(GraphicalUserInterfaceDevelopmentEnvironment)来形成相应文件.两者各有优势,本文采用直接通过编辑M脚本文件实现可视化界面的方法.1系统结构的设计本系统的总体框架见图1.结构包含:信号发生、FIR滤波器设计、图形用户界面控制、频域分析、卷积分析、滤波分析六大模块.其中FIR滤波器设计模块包含滤波器的阶数设置、类型设置、窗口函数选择等功能.下面介绍各个模块的功能.1)信号发生模块:根据用户的输入参数,产生各种函数信号.两路信号叠加组合,可灵活应用.2)FIR滤波器设计模块:根据输入参数设计滤波器,可生成低通、高通、带通、带阻类型的不同阶数滤波器.可选择的窗口函数有矩形窗、布莱克曼窗、哈曼窗、汉宁窗等[4-6].收稿日期:2008-07-07作者简介:蔡晓津(1987-),男,浙江瑞安人,研究方向:电子信息蔡晓津等:基于MATLAB的信号分析与处理仿真软件设计393)用户图形控制界面:人机对话的窗口,包含显示界面和控制功能函数,提供信号和滤波器相频特性的预览,提供频域分析、卷积分析、滤波分析的演示.4)频域分析模块:对信号发生模块产生的信号进行频域分析.5)卷积分析模块:对信号发生模块产生的两路信号相卷.6)滤波分析模块:用于模拟信号去噪,评估滤波器功能等.输入信号通过所设定的滤波器,可得到前后对比的结果.图1系统总体框架Fig1OverallFrameofSystem2系统的实现下面将讨论系统的具体实现,简述各个模块的设计及使用方法.2.1图形用户控制界面的设计根据系统的框架要求,显示界面设计信号发生功能区、FIR滤波器设计功能区、演示分析功能区.界面中包括图表、功能按钮、输入框、说明文本等元素.不同的元素可以通过不同的图形句柄语句来实现.下面是通过编辑M脚本文件产生图形用户界面的实现方法.2.1.1主界面的初始化主界面的初始化程序代码[]:H=axes('unit','normalized','position',[0,0,1,1],...'visible','off');%定义当前屏幕的性质,如大小、单元、是否可见等.set(gcf,'currentaxes',H);%设置当前屏幕的坐标.str='\fontname{隶书}基于MATLAB的信号分析与处理仿真软件';%设置当前屏幕的标题.text(0.20,0.96,str,'fontsize',34);%标题的大小和位置.h_fig=get(H,'parent');%将句柄H赋值给h_fig.set(h_fig,'unit','normalized','position',...[0.00,0.034,1,0.93]);%改变句柄的值,从而改变输出窗口的大小.本文通过上面的代码定义了屏幕的性质、标题和输出窗口的大小,完成了程序界面的初始化.用户可以根据实际需要改变句柄中的参数对界面属性进行修改.402.1.2图表元素的设计温州大学学报·\u33258X然科学版(2009)第30卷第2期界面中的图表具有提供预览和结果演示的功能,是实现人机对话的重要环节.图表元素可通过如下程序实现:h_axes1=axes('parent',h_fig,'unit','normalized',...'position',[0.05,0.7,0.2,0.2],xlim',[030],'ylim',..[05],'fontsize',8);%设置一个图表.上面的代码设计了一个在屏幕左上方的图表元素,设计者可以通过增加句柄数量增加界面中图表的数量.2.1.3功能按钮的设计按钮提供动作事件,通过嵌入函数可实现相应功能.下面是一个按钮句柄的示例:h_push2=uicontrol(h_fig,'style','push','unit',...'normalized','position',[0.65,0.38,0.13,0.07],...'string','卷积变化','callback',...['zf=z1;','zf2=z2;','set(gcf,''currentaxes'',h_axes3);','plot(abs(conv(zf,zf2)));',...'legend(''output'');']);%产生一个卷积变化的命令按钮并在输出窗口中输出.以上是一个带有卷积功能的按钮.2.1.4说明文本的设计良好的界面说明可以提高界面的可读性,方便用户的使用.下面是一段文本的图形句柄:h_text1=uicontrol(h_fig,'style','text','unit',...'normalized','position',[0.26,0.85,0.15,0.05],...'horizontal','left','string',{'输入序列','x1(n)='});%产生一个文本框.这个句柄的功能是在界面上显示一个文本框,内容为“输入序列x1(n)=”.2.1.5输入框的设计输入框提取用户输入信息,提供给系统任务进行调用,下面是一个输入框图形句柄:h_edit1=uicontrol(h_fig,'style','edit','unit',...'normalized','position',[0.26,0.78,0.15,0.05],...'horizontal','left','callback',...['z1=str2num(get(gcbo,''string''));']);%一个简单的文本框.输入框将输入值传递给变量z1.2.2信号发生模块的设计本信号发生模块包括两个文本说明框、两个输入框、两个图表、两个网格开关按钮(用于控制图表网格属性).最终效果如图2所示.输入框输入的波形函数,产生信号.信号波形可通过旁边的预览框实时预览.输入框句柄中,插有返回函数,其中图表等其它界面元素的设计可参考2.1图形用户控制界面的设计内容.2.3FIR滤波器设计模块的设计界面通过滤波器阶数、类型、窗函数及采样频率和中心频率的设置,模拟产生各种滤波器.滤波器参数设置部分通过输入框控制,文本框提供必要说明,功能按钮调用函数,从而计算得到返回滤波器参数并在图表中显示滤波器的相频特性.FIR滤波器模块最终效果如图3所示.蔡晓津等:基于MATLAB的信号分析与处理仿真软件设计图2信号发生模块的设计图3FIR滤波器设计模块设计Fig2SignalGeneratingDeviceModuleDesignFig3FiniteImpulseResponseFilterModuleDesign2.4频域分析模块的设计41通过界面上的“离散傅立叶变换”功能按钮,触发fft函数,对输入信号进行傅立叶变换,并在演示区显示.功能按钮代码如下:h_push1=uicontrol(h_fig,'style','push','unit',...'normalized','position',[0.5,0.38,0.13,0.07],...'string','离散傅里叶变化','callback',...['z=z1+z2;','n=length(z);','m=1:1:n;','zf1=fft(z1);','zf2=fft(z2);',…'set(gcf,''currentaxes'',h_axes3);','plot(m,abs(zf1),''b'',m,abs(zf2),''r'');',...'legend(''n1[]'',''n2[]'');']);%产生一个傅里叶离散变化的命令按钮并在输出窗口中输出.2.5卷积分析模块的设计通过界面上的“卷积变换”功能按钮,实现两个输入信号的卷积变换,原理同频域分析模块的设计部分.2.6滤波分析模块的设计通过界面上的“滤波”功能按钮,调用系统函数,实现频率分析功能.模块的输入是信号发生模块两路输出的叠加,滤波器参数是通过FIR滤波器设计模块得到的.“滤波”功能按钮的代码如下:h_push3=uicontrol(h_fig,'style','push','unit',...'normalized','position',[0.8,0.38,0.13,0.07],...'string','滤波','callback',...['[H,f,B]=ezfir16_1(order,fres,wtype,fs,fc);','z=z1+z2;','n=length(z);','m=1:1:n;','y=filter(B,1,z);','set(gcf,''currentaxes'',h_axes3);',...'plot(m,y,''b'',m,z,''y--'');','legend(''滤波后'',''滤波前'');']);%产生一个滤波变化的命令按钮并在输出窗口中输出.3系统的演示3.1频域分析的演示首先,在信号发生模块输入相应的数值,输入信号1为cos(pi*2*5*(1:299)/300),输入信号242温州大学学报·\u33258X然科学版(2009)第30卷第2期为cos(pi*2*20*(1:299)/300),分别代表归一化频率为5和20的两个正弦信号(在信号发生模块的输入效果见图2).然后,点击界面上“傅立叶变换”按钮在演示区可得到如图4的结果.在图4中,左边5与20刻度处有两个尖峰,分别对应两路输入信号的频率,右侧的尖峰实际上是表示的负频率的值,实际中并不存在.3.2滤波器设计的演示首先,在界面滤波器设计模块部分的输入框里分别输入50、2、1、300、80,意义是设计一个50阶、高通、哈明窗、采样频率为300、中心频率为80的滤波器.然后,点击界面上的“生成滤波器”按钮,可得到如图3所示结果.3.3滤波分析的演示图4频域分析Fig4Frequency-domainAnalysis首先,在信号发生模块输入相应的数值,输入信号1为cos(pi*2*5*(1:299)/300),输入信号2为cos(pi*2*50*(1:299)/300),分别代表归一化频率为5和50的两个正弦信号.然后,设置滤波器,在界面滤波器设计模块部分的输入框里分别输入50、1、1、300、20.意义是设计一个50阶、低通、哈明窗、采样频率为300、中心频率为20的滤波器.点击界面上的“生成滤波器”按钮生成滤波器,通过观察预览窗口观察滤波器特性是否适合.最后,

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功