1、基于MATLAB的信号系统实验平台设计 摘 要本文概述了信号仿真系统的需求、总体结构、基本功能。重点介绍了利用MATLAB软件设计实现信号仿真系统的基本原理及功能,以及利用MATLAB软件提供的图形用户界面(Graphical User Interfaces ,GUI)设计具有人机交互、界面友好的用户界面。本文采用MATLAB的图形用户界面设计功能, 开发出了各个实验界面。在该实验软件中, 集成了信号处理中的多个实验, 应用效果良好。本系统是一种演示型软件,用可视化的仿真工具,以图形和动态仿真的方式演示部分基本信号的传输波形和变换,使学习人员直观、感性地了解和掌握信号与系统的基本知识。关键词:
2、 信号处理,MATLAB,图形用户界面,实验软件28The experimental platform design of signal System which bases on Mat Lab AbstractThe writer of this article summarizes the Signal Simulation Systems demand, general structure, basic function. In this thesis, the author focuses on using MATLAB software design to come true th
3、e basic principles and functions of the signal simulation system and pays attention to making use of Graphical User interface (Graphical User Interfaces, GUI) MATLAB software provides to design human-computer interactive and friendly User interface. Based on the design function of MATLAB Graphical U
4、ser Interface, many experiment interfaces are developed. During in the experience of this software, some experimentations of the signal processing are integrated and its applicable effect is good. This system is demonstrative software. By the ways of graphics and dynamic simulation, this system uses
5、 visual simulation tools to demonstrate the transmission waveform and transformation of some basic signals, making learners intuitively and perceptually understand and grasp the basic knowledge of signal and system. Key words: signal processing, MATLAB, the Graphical User Interface, experimental sof
6、tware目录摘 要3Abstract41 绪论51.1 易用性51.2平台独立性51.3机制独立的画图51.4 用户图形界面52 GUI简介83系统分析93.1引言93.2需求分析93.3可行性分析93.3.1技术可行性93.3.2操作可行性103.4系统目标103.5系统主要功能104系统软件平台的设计114.1系统整体设计介绍114.2系统设计步骤115系统模块125.1基本信号产生125.1.1正弦信号125.1.2指数信号125.1.3符号函数135.1.4单位冲激系列145.1.5单位阶跃系列145.1.6抽样信号155.1.7矩形脉冲155.1.8三角脉冲165.2离散信号基本运
7、算165.3卷积模块175.4频谱分析模块185.5时不变连续系统的时域和频域分析模块195.6离散时不变系统分析195.7离散系统Z域分析205.7.1离散系统的稳定性;205.7.2离散系统的频率特性(幅频响应和相频响应)。20附录一:21参考文献33致 谢341 绪论1.1 易用性MATLAB是种解释型语言,它简单易用程序可用作便笺簿打在命令行处表达式的值,也可执行预先写好的大型程序。在MATLAB 集成开发环境下,程序可以方便的编写,修改和调试。这是因为这种语言极易使用,对于教育应用和快速建立新程序的原型,它是一个理想的工具。1.2平台独立性MATLAB 支持许多的操作系统,提供了大量
8、的平台独立的措施。在一个平台上编写的程序,在其它平台上一样可以正常运行,在一个平台上编写的数据文件在其它平台上一样可以编译。因此用户可以根据需要把MATLAB 编写的程序移植到新平台。1.3机制独立的画图与其他语言不同,MATLAB 有许多的画图和图象处理命令。当MATLAB 运行时,这些标绘图和图片将会出现在这台电脑的图像输出设备中。此功能使得MATLAB 成为一个形象化技术数据的卓越工具。1.4 用户图形界面MATLAB 允许程序员为他们的程序建立一个交互式的用户图形界面。利用MATLAB 的这种功能,程序员可以设计出相对于无经验的用户可以操作的复杂的数据分析程序。2 GUI简介在MATL
9、AB中创建图形用户界面的方法有两种图形句柄和GUIDE,这两种实现的方法都需要使用M语言编程,但是技术的侧重点不同。其实GUIDE创建图形用户界面的基础也是图形句柄对象,只不过是具有很好的封装,使用起来简便,而且还能够做到可视化的开发,对于一般的用户使用GUIDE创建图形用户界面应用程序已经足够了。MATLAB提供了基本的用户界面元素,包括菜单、快捷菜单、按钮、复选框、单选框、文本编辑框、静态文本、下拉列表框、列表框等。需要注意的是,MATLAB的图形用户界面程序大多数是对话框应用程序,利用MATLAB编写文档视图应用程序相对来说比较困难。使用GUIDE和图形句柄创建的图形用户界面的主要区别在
10、于,利用图形句柄创建的图形界面应用程序只有一个文件M文件,而利用GUIDE创建的图形用户界面应用程序一般由两个文件组成,一个是应用程序文件M文件,另一个是外观文件fig文件。MATLAB图形用户界面的例子非常多,不仅在MATLAB的Demos中有很多用户界面的例子,如图7-1所示,在MATLAB的工具箱中也有很多是利用GUIDE编写的小工具,不过早期的MATLAB工具多数都使用图形句柄进行开发。若MATLAB的图形用户界面功能不能够满足用户的需要,用户还可以利用Java语言的工程来扩充界面功能,不过使用Java语言来扩充MATLAB的功能属于MATLAB外部接口编程的内容,有兴趣的读者可以参阅
11、MATLAB的帮助文档或者MATLAB外部接口编程一书。3系统分析3.1引言本课题采用MATLAB语言为工作环境,MATLAB语言称为第四代编程语言,程序简洁、可读性很强而且调试十分容易,是数字信号处理方面得天独厚优势图形开发工具.本软件设计目标是以配合教学为出发点,主要是面对通信工程专业的初学者,用简单,可视化的仿真模拟图形给大家演示部分基本波的传输特性,以及在信道中的传输特性。使他们直观,感性地了解和掌握通信系统的概念。为了规范和条理的进行本系统的设计以及使后续的开发维护工作变得有趣而轻松,故编写本系统需求分析说明书;旨在开发过程中进行参考,使系统在需求的规范之内,避免重复劳动,加快开发进
12、度以及提高开发效率;同时也是为以后系统维护服务提供指南。3.2需求分析通信在现今生活中已是普遍存在,在经济发展,政治军事活动,个人生活中的应运以是相当普遍,是社会发展不可缺少的工具, 目前通信已经经历了150多年,发展到目前数字通信趋于替代模拟通信的趋势。信号与系统课程,是高等理工科类院校通信与电子信息工程等专业中一门十分重要的基础理论课,也是电子信息工程专业许多后续课程的重要理论基础。基于此种需求,本系统设计为教学演示型软件,运用MATLAB软件开发,便于学生直观观察信号系统中涉及的波形及特性的原理图, 为后续课程的学习,以及独立分析和设计新的系统,打下基础。3.3可行性分析 3.3.1技术
13、可行性本课题所涉及的研究目标,在国内外已经有相当成熟的理论基础和技术基础。对于MATLAB做用户图像界面和信号模拟所涉及到的技术问题进行细致的分析,很大一部分可以使用电子信息工程的专业知识进行构建,其他的部分则可以通过自学,调用已经开发好的一些功能模块来完成课题涉及到的技术要求。 3.3.2操作可行性MATLAB程序流程简单明了,开发率高,并且能够结合其他多种开发工具,共同实现信号模拟功能。它易学易用,不需大量编程,能创作出一些高水平的模拟平台作品,对于非专业的开发人员和专业开发人员都是一个好的选择。系统主要目标及功能3.4系统目标本课题开发目标是利用MATLAB软件开发一套集可视化图形与动态
14、仿真为一体的教学演示型软件,主要是面对初学者,用可视化的仿真模拟图形配合老师的讲课内容给大家演示信号与系统课程中部分信号的传输波形、卷积、傅立叶变换等,帮助他们直观、感性地了解和掌握信号系统的概念、基本特征等,深化对通信概念的理解。3.5系统主要功能本系统主要功能包括信号的基本运算、基本信号产生、卷积、信号的频谱分析、时不变系统分析。简单基础地涵盖了信号与系统部分主要章节, 用可视化的仿真模拟图形为大家演示部分基本信号的传输波形,部分交互式界面可直接输入合适的值使大家更直观、感性地了解和掌握信号系统的概念、传输性能、基本特征等,为课程的学习打下基础。整套系统采取图文并茂、循序渐进、从感性到理性
15、的方式,首先让初学者在掌握基本信号模拟和运算。4系统软件平台的设计信号系统实验繁多、复杂,许多实验还需要输入参数,若将系统设计成一个界面,使得系统繁重、拥挤,不能够实现友好、美化的界面的设计要求。因此,在设计界面的时候,采用一个主界面和若干子界面,每个子界面是一个模块,实现一个实验或功能,并通过主界面调用子界面的设计方法。4.1系统整体设计介绍本实验系统整体结构设计由两部分组成: 界面模块设计和菜单模块设计。其中, 界面模块总共包括七个模块: 开始引导模块、主模块、信号基本运算模块、基本信号的产生模块、卷积模块、频谱分析模块、时不变系统分析模块,一个实验界面模块下面又有下一级实验界面模块,在菜
16、单设计时, 在实验子界面中除使用系统约定的菜单条外, 还增加了几个控制背景和退出实验的菜单。4.2系统设计步骤设计的具体步骤如下:1)运用 MATLAB的图形用户界面(GUI)设计方法, 设计整个实验系统的开始引导界面、实验主界面及其实现信号处理课程中具体实验的各个子界面。2)分别编写各个子界面的各个控件对象的回调函数, 来实现控件相应控制功能, 达到直接通过界面上各个控件就可以控制数据的输入输出, 并可以方便地对实验结果的数据及其图形进行读取和分析的目的。3)编写主界面的回调函数, 将各个实验子界面整合在信号处理系统实验主界面中, 即通过主界面就可以进入任何一个实验子界面进行实验。5系统模块
17、5.1基本信号产生5.1.1正弦信号正弦信号的公式。正弦信号,一般写做式中A为振幅,W是角频率,P为初相位。图5.1.1正弦信号5.1.2指数信号a指数信号的表示式为在式中,a是实数。若a0,信号将随着时间而增长,若a=0;stem(n,x)axis(-4,11,-.2,2);title(单位阶跃系列)function dwmc_Callback(hObject, eventdata, handles)clcn0=0;nf=10;ns=3;n1=n0:nf;x1=(n1-ns)=0; stem(n1,x1)axis(-4,11,-.2,2);title(单位冲激系列)function fhhs
18、_Callback(hObject, eventdata, handles)t=str2num(get(handles.edit6,String)-1:.001:str2num(get(handles.edit6,String)+1;ft=sign(t-str2num(get(handles.edit6,String);axis(str2num(get(handles.edit6,String)-2,str2num(get(handles.edit6,String)+2,-1.2,1.2)plot(t,ft,r)title(sgn(t-t0)function jyys_Callback(hOb
19、ject, eventdata, handles)t=str2num(get(handles.edit2,String);k=t-3:t+7;fk=(k-t)=0;stem(k,fk)title(单位阶跃序列)function zsys_Callback(hObject, eventdata, handles)t=str2num(get(handles.edit3,String);k=0:10;fk=t.k;stem(k,fk)title(指数序列)function jjys_Callback(hObject, eventdata, handles)t=str2num(get(handles.
20、edit4,String);k1=-1:3;k2=-1:3;f1=0 1 3 2 0 ;f2=0 4 3 2 1 ;y=t*conv(f1,f2);k0=k1(1)+k2(2);k3=length(f1)+length(f2)-2;k=k0:k0+k3;stem(k,y)title(卷积序列)function juanjiys_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-
21、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)function fbbh_Callback(hObject, eventdata, handles)clcf=str2num(get(handles.edit1,String);t=0:0.01:2*pi;y=f*sin(t);plot(t,y),hold ony=f*(sin(t)+sin(3*t)/3);plot(t,y),hold ony=f*(sin
22、(t)+sin(3*t)/3+sin(5*t)/5);plot(t,y),hold ony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7);plot(t,y),hold ony=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7+sin(9*t)/9);plot(t,y),hold ony=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(方波傅立叶分析)function lsbh_Callbac
23、k(hObject, eventdata, handles)t=str2num(get(handles.edit2,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(离散傅立叶变换);function dwmc_Callback(hObject, eventdata, handles)m1=str2num(get(handles.edit10,string);m2=str2num(get(handles.edit11,string);m3=
24、str2num(get(handles.edit12,string);n1=str2num(get(handles.edit13,string);n2=str2num(get(handles.edit14,string);n3=str2num(get(handles.edit15,string);aa=m1 m2 m3;bb=n1 n2 n3;k1=0;k2=10;k=k1:k2;impz(bb,aa,k);xlabel(n)ylabel(h(n)function dwcj_Callback(hObject, eventdata, handles)N=str2num(get(handles.e
25、dit9,string);x1=str2num(get(handles.edit3,string);x2=str2num(get(handles.edit4,string);x3=str2num(get(handles.edit5,string);y1=str2num(get(handles.edit6,string);y2=str2num(get(handles.edit7,string);y3=str2num(get(handles.edit8,string);b=x1 x2 x3;a=y1 y2 y3;x=1 zeros(1,N-1);y=filter(b,a,x);k=0:1:N-1;
26、stem(k,y)function lztxy_Callback(hObject, eventdata, handles)a=str2num(get(handles.edit1,string);b=str2num(get(handles.edit2,string);c=str2num(get(handles.edit3,string);d=str2num(get(handles.edit4,string);e=str2num(get(handles.edit5,string);g=str2num(get(handles.edit6,string);p = a b c;q = e d g;sys
27、 = tf(q, p);td = 0.01;t = 0 : td : 10;f = exp(-t);y = lsim(sys, f, t);plot(t, y)xlabel(t(sec);ylabel(y(t);function cjxy_Callback(hObject, eventdata, handles)h1=str2num(get(handles.edit7,string);h2=str2num(get(handles.edit8,string);h3=str2num(get(handles.edit9,string);g1=str2num(get(handles.edit10,st
28、ring);g2=str2num(get(handles.edit11,string);g3=str2num(get(handles.edit12,string);p1=h1 h2 h3;q1=g1 g2 g3;figure(4)impulse(q1,p1function jyxy_Callback(hObject, eventdata, handles)i1=str2num(get(handles.edit13,string);i2=str2num(get(handles.edit14,string);i3=str2num(get(handles.edit15,string);j1=str2
29、num(get(handles.edit16,string);j2=str2num(get(handles.edit17,string);j3=str2num(get(handles.edit18,string);w1=i1 i2 i3;z1=j1 j2 j3;figure(5)stem(z1,w1)function fpxy_Callback(hObject, eventdata, handles)v1=str2num(get(handles.edit20,string);v2=str2num(get(handles.edit21,string);v3=str2num(get(handles
30、.edit22,string);s1=str2num(get(handles.edit23,string);s2=str2num(get(handles.edit24,string);s3=str2num(get(handles.edit25,string);m1= v1 v2 v3;n1= s1 s2 s3;H,w = freqs(n1,m1);Hm = abs(H);phai = angle(H);Hr = real(H);Hi = imag(H);plot(w,Hm)title(Magnitude response)xlabel(Frequency in rad/sec)function
31、 xpxy_Callback(hObject, eventdata, handles)k1=str2num(get(handles.edit26,string);k2=str2num(get(handles.edit27,string);k3=str2num(get(handles.edit28,string);u1=str2num(get(handles.edit29,string);u2=str2num(get(handles.edit30,string);u3=str2num(get(handles.edit31,string);xx = k1 k2 k3;equationyy = u1
32、 u2 u3;H,w = freqs(yy,xx);Hm = abs(H);phai = angle(H);Hr = real(H);Hi = imag(H);plot(w,phai),title(Phase response),xlabel(Frequency in rad/sec)function xptx_Callback(hObject, eventdata, handles)e1=str2num(get(handles.edit13,string);e2=str2num(get(handles.edit14,string);e3=str2num(get(handles.edit15,
33、string);f1=str2num(get(handles.edit16,string);f2=str2num(get(handles.edit17,string);f3=str2num(get(handles.edit18,string);A=e1 e2 e3;B=f1 f2 f3;H,w=freqz(B,A,400,whole);Hf=abs(H);Hx=angle(H);figure(2)plot(w,Hx)title(相频特性)function fptx_Callback(hObject, eventdata, handles)c1=str2num(get(handles.edit7
34、,string);c2=str2num(get(handles.edit8,string);c3=str2num(get(handles.edit9,string);d1=str2num(get(handles.edit10,string);d2=str2num(get(handles.edit11,string);d3=str2num(get(handles.edit12,string);A=c1 c2 c3;B=d1 d2 d3;H,w=freqz(B,A,400,whole);Hf=abs(H);Hx=angle(H);clffigure(1)plot(w,Hf)function ljd
35、_Callback(hObject, eventdata, handles)a1=str2num(get(handles.edit1,string);a2=str2num(get(handles.edit2,string);a3=str2num(get(handles.edit3,string);b1=str2num(get(handles.edit4,string);b2=str2num(get(handles.edit5,string);b3=str2num(get(handles.edit6,string);A=a1 a2 a3;B=b1 b2 b3;p=roots(A); q=root
36、s(B); p=p; q=q; x=max(abs(p q 1); x=x+0.1;y=x; clfhold onaxis(-x x -y y) w=0:pi/300:2*pi;t=exp(i*w);plot(t) axis(square)plot(-x x,0 0) plot(0 0,-y y) text(0.1,x,jImz)text(y,1/10,Rez)plot(real(p),imag(p),x) plot(real(q),imag(q),o)title(pole-zero diagram for discrete system) hold off参考文献1 苏中义.MATLAB简介
37、J.上海电机技术高等专科学院学报,2003,4:78.2 杨建强,罗先香.MATLAB软件工具箱简介J水科学进展,2001,12(2):237242.3 刘瑞桢.MATLAB简介J电脑编程技巧与维护,1997,7(1):4851.4 高飞,汪浩.基于MATLAB的“信号与系统”仿真实验及其性能分析J南民族学院学报(自然科学版),2001,10(2):266269.5 林月美, 陈仁安,基于MATLAB 的信号与系统软件实验平台J集美大学学报, 2001,6(3):51254.6 夏平基于MATLAB的信号与系统、数字信号处理实验体系J.教学实验,2004,26(5):7376.7 李蕴华基于M
38、ATLAB的信号与系统频域分析J.武汉科技学院学报,2006,19(5):2124.8 吕锋,刘泉,江雪梅基于MATLAB 的信号与系统软件实验平台J. 理工高教研究, 2006 ,4 (25):9899.致 谢本论文是在我们指导教师王龙业的悉心指导下完成。给我们留下了很深的印象。在整个作课题的过程中,王老师不时给予我们热情的鼓励和实验设施上的大力支持,这是我们的课题顺利完成的保障。首先,我要向我的指导老师王龙业表示最衷心的感谢。从本论文一开始设计,到系统的最初规划,程序编写以及最后的论文撰写过程中都给予了我许多的建议和指正。另外,还要感谢这四年来所有老师对我的辛苦培育。还有这四年来所有关心我的人。