用MATLAB语言编程设计.doc_第1页
用MATLAB语言编程设计.doc_第2页
用MATLAB语言编程设计.doc_第3页
用MATLAB语言编程设计.doc_第4页
用MATLAB语言编程设计.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用MATLAB语言编程设计 通信仿真教学软件 【摘要】 本文介绍了一个用MATLAB语言编写的通信仿真教学软件。论述了通信的基础理论和通信仿真教学软件的设计思想以及实现的方法,并谈到了计算机辅助教学的必要性。 1.前言通信原理是通信类专业的一门极为重要的基础理论课程,主要研究信息传递的一系列变换的机理和属性,它包括:信号分析、调制解调、同步、检测过滤、纠错编码、信号特性等理论方面的内容,其内容抽象难懂促使我们应用MATLAB程序语言设计制作了这套通信仿真CAI课件。意在利用计算机一类智能设备来实现该课程的机辅教学,帮助学生理解相关的知识难点。 2.通信仿真教学软件的设计思想 在通信原理中,常常借助于各种信号的时域波形图以及频谱图来说明系统的原理,指出相应的电路设计应达到的目标。欲将寄载消息的信号保质保量的传送给接收者,就必须对它们进行加工处理,对相应的部件进行分析和研究,而这种研讨过程中会用到大量的数学计算。由于 “MATLAB”是Matrix Laboratory(矩阵实验室)的缩写,顾名思义,它是以矩阵,数组为基本处理对象,矩阵的维数不需要预先指定,且随时可变,具有丰富的矩阵运算功能。因此,选用MATLAB作为开发环境无疑能够减轻系统分析与设计的编写负担,另外因MATLAB是一个开放性的系统,具有模块化的结构,任何用户自己已定义的函数都可作为MATLAB函数进行调用。仿真功能我们采用了MATLAB语言编程,以Windows 和MATLAB为软件运行环境。将通信原理中的知识点用MATLAB来实现。通过灵活的菜单和界面设计使某些参数可调。同时运用Simulink软件包,使波形在仿真的同时显示系统。更加有利于在课堂上使用。3理论基础31有关通信基础理论方面 通信中的常见技术如调制解调,多址与复用,同步,模拟信号数字化,噪声中的信号检测,差错控制等在通信原理这门课程中都要有所涉及,因此,必须将与这些技术相关的专业基础理论知识融汇与本课件的编程设计工作中,便使我们的CAI软件真正起到辅助教学的作用。32 有关MATLAB的文件编写方面321 数组运算数组加减运算 符号或,既表示矩阵运算又表示数组运算。数组乘除运算 在MATLAB中,符号.*表示数组乘法运算,若a,b具有相同的维数,则a.*b为a和b对应元素的简单乘积,符号.或./表示数组除法的运算,而且这两种都是对应元素相除,这与矩 阵的左除或右除的含义不同。关系运算: MATLAB中提供了6个关系运算符,用于相同维数两个矩阵进行比较。这6个运算符为: 小于 大于 =大于等于等于 不等于322绘图连续形式: x,y均为向量,这时以向量x作为x轴,向量y作为y轴,绘制典型的二维曲线,调用格式为plot(x,y)。323菜单对菜单的调用如下: 菜单项句柄uimenu(窗口句柄,属性1,属性值1,. . .); 子菜单项句柄uimenu(菜单项句柄,属性1,属性值1,. . .);其功能是在窗口句柄所代表的窗口下建立一个菜单项(由菜单项句柄代表),并在该菜单项下建立一个子菜单项(由子菜单项句柄代表)。其中uimenu()函数的属性又很多种,但最基本的必须有一下两条:.Label属性:它为菜单提示名称;.Callback属性:它定义了回调函数,当该菜单项被选中之后,MATLAB将自动调用此回调函数作为相应菜单项的响应。设计出来的本软件的主界面菜单如图1所示。 图1 主菜单界面324控制流语句for循环语句它允许一条语句或一组语句被重复执行预先确定的次数。它的格式如下 for variable=StartVal:StepVal:EndVal statements end while循环语句 它可以使一条或一组语句能够在一定条件下反复执行多次。格式如下:while expressionstatements endif语句: 是一种简单的条件转移语句。其格式为:if expression Statementsend暂停语句: pause 功能是暂时停止程序的执行,直到用户按任意键之后,才继续执行程序;回显控制语句: echo on/off控制是否在屏幕上回显MATLAB正在执行的语句,系统所默认的状态是不回显。325 M文件编程1函数定义行函数文件的第一行要求用关键字“function”把该文件定义为函数,并指定函数的名字必须与存盘的文件名相同。同时这一语句也定义了输入与输出参数。2函数体 函数体是函数的主体部分,它完成了函数的主要功能。函数体中有流程控制、定义变量、数值运算、符号运算、交互输入输出等功能,也可以调用其它函数和脚本3函数说明 函数说明是对本函数完成功能的简要说明,通常当某个函数过于复杂时,我们给出函数说明以方便使用。4注释 注释是夹杂在函数体中的语句,它以%开头,出现%的行,%后的语句均为注释性的。33有关SIMULINK方面Simulink是一个用来对动态系统进行建模,仿真,分析的软件包。他支持线性和非线性系统,连续和时间模型,或者是两者的混合,系统还可以是多采样频率的,比如系统的不同部分拥有不同的采样频率。对于建模,Simulink提供了一个图形化的用户界面,可以用鼠标点击和拖拉模块的图标建模。图形界面可以将系统模型和图形同时展示出来。这是以前需要用编程语言明确的用公式表达微分方程的仿真软件包所远远不能相比的。Simulink包括一个复杂的由接收器,信号源,线性和非线性组件以及连接件组成的模块库,当然也可以定制或者创建用户自己的模块。所有模型都是分级的,因此可以采取自上而下或者自下而上的方法来建立模型。可以在最高层面上查看一个系统,然后通过双击系统中的各个模块进入到系统的低一级层面以查看到模型的更多的细节。这一方法提供了一个了解模型是如何组成以及它的的各个部分是如何相互联系的方法。定义完一个模块后,就可通过Simulink的菜单或者在MATLAB的命令窗口输入命令对他仿真。菜单对于交互式工作非常方便,而命令行方式对于处理成批的仿真比较应用。使用Scopes或者其他的显示模块,可以在运行仿真时观察到仿真的结果。另外,可以在仿真时改变参数并且立即就可以看到有什么变化。仿真的结果可以放在MATLAB(workspace)的工作空间中进一步的处理或者可视化。4通信仿真的实现41数字基带信号数字通信中一般以单极性非归零码,单极性归零码型,双极性非归零码,双极性归零码,数字双相码,条件双相码和密勒码几种码来表示二元信息序列。由于数字基带信号是数字信息的电脉冲表示,不同形式的数字基带信号具有不同的频谱结构,合理设计数字基带信号可将数字信息变换为适合于给定信道传输的形式,这种变换又称为数字信息的码型转换。譬如单极性非归零码是用高电平表示二元信息中的1,用低电平表示二元信息中的0,电平在整个码元的时间里保持不变。其MATLAB主要源程序如下:grid=300t=0:1/grid:length(x);for i=1:length(x), 计算码元的值 if(x(i)=1), 如果信息为1 for j=1:grid, 该码元对应的点值取1 y(i-1)*grid+j)=1; end else for j=1:grid, 反之,信息元为0,码元对应点值取0 y(i-1)*grid+j)=0; end;end;endy=y,x(i); 为了画图,将y序列加上最后一位 调用后效果图如图2所示,由该图可见,主要将序列10011000101对应的单极性非归零波形形象的展示了出来。图2 单极性非归零码的波形演示再如双极性归零码,这是一种占空比小于100的双极性数字基带信号。因此它具有三个电平,严格说来是一种伪三元码(电平1,0,1)。双极性归零码实现的其主要程序段如下: grid=300;t=0:1/grid:length(x); 定义对应时间序列for i=1:length(x) 进行编码 if(x(i)=0) 若输入信息为1 for j=1:grid/2 y(grid/2*(2*i-2)+j)=1; 定义前半时间为1 y(grid/2*(2*i-1)+j)=0; 定以后半时间为0 end else for j=1:grid/2 反之,输入信息为0 y(grid/2*(2*i-2)+j)=-1; 定义前半时间为1 y(grid/2*(2*i-1)+j)=0; 定义后半时间为0 end;end;end 又如密勒码,它是数字双相码的变形。它采用码元中央时刻的跳变来表示信息1,即前半时间的电平同前一码元后半时间的电平相同,中央跳变。遇到信息0作如下处理:首先对0的码元在整个码元的时间内都保持同一电平值,其次若此0前一信息是1,则码元的电平同前面信息1的码元后半时间电平相同,若前一信息为0,则与前面码元的电平相反。为此,我们用MATLAB编写了下述程序段来加以演示:grid=100; t=0:1/grid:length(x); 定义时间序列i=1; 由于第一码元的编码不定,我们直接给出if(x(i)=1) 输入为1,则 for j=1:grid/2 y(grid/2*(2*i-2)+j)=0; 前半时间为0 y(grid/2*(2*i-1)+j)=1; 后半时间为1 end else for j=1:grid 反之,输入为0 y(grid*(i-1)+j)=0; 所有时间为0 end end for i=2:length(x) 开始进行密勒编码 if(x(i)=1) 输入信息为1 for j=1:grid/2y(grid/2*(2*i-2)+j)=y(grid/2*(2*i-3)+grid/4);前半时间与前一码元后半时间取值相同y(grid/2*(2*i-1)+j)=1-y(grid/2*(2*i-2)+j);后半时间与前半时间相反 end else if(x(i-1)=1) 反之,若前一信息为1,输入信息0 for j=1:gridy(grid*(i-1)+j)=y(grid/2*(2*i-3)+grid/4);所有时间与前一码元后半时间值相同 end else 否则,前一信息为0 for j=1:gridy(grid*(i-1)+j)=1-y(grid/2*(2*i-3)+grid/4);所有时间与前一码元后半时间值相反 end;end; end;end. . . 调用后的效果图见图3 图3 密勒码 该图清楚的展示了信息序列及其相应的密勒码的相应波形42幅度调制幅度调制(又称线性调制),这是一种让正弦载波的幅度随着调制信号而改变的调制方案 。这一类调制方案包括DSB(抑制载波的双边带幅度调制),AM(常规双边带调幅),SSB调制(单边带幅度调制)以及VSB调制(残留边带幅度调制)。在DSB调制中,调制信号和已调载波振幅间的函数关系非常简单,而在SSB调制或VSB调制中要复杂些。线性调制器的一般模型如图所示。它由模拟乘法器和冲激响应为h(t)的带通滤波器组成。 h(t) m(t) 图4 线性调制器的一般模型调幅信号的解调可有两种,相干解调和非相干解调。图5和图6分别给出了DSB系统及相干解调的性能和AM系统及非相干解调的性能演示。在此,我们用了理想的限带白噪声来代替高斯白噪声通过接收机前置带通滤波器之后的噪声。由此可以看出,运用Simulink进行仿真,不仅能够向学生展示仿真出来的图形,而且,它又同时把相应的原理图也展现在了大家的面前,这样更有利于课堂教学。 图5 DSB系统及相干解调性能演示 4.2.1 DSB调制DSB信号的时域表达式为: u(t)=Acm(t)cos(2fct) (4.2.1)其中 c(t)=Accos(2fct)为载波,m(t)是被调信号。对式(4.2.1)进行傅立叶变换,而DSB信号的频谱表达式为:图6 AM系统及非相干解调性演示 U(f)=M(f-f)+ M(f+f)由此可见,这种调制方式使得模拟基带信号的频谱搬移到载频fc附近,且形成了上下两个边带。用Simulink中的一些模块进行适当的处理,就可得到对应的DSB信号波形。如图5所示422 调幅系统的抗噪声性能 然而,任何一种通信系统都难免有加性噪声和乘性干扰,大部分服从高斯分布的加性噪声对调幅波会产生什么影响?接收端输入信噪比的大小对相干与非相干解调的性能有何影响?这些都需要用相应的波形来加以演示说明,为此,我们利用Simulink中的几个模块,对它们的参数等按需要做了相应的设计和改变后,按原理框图连接起来获得了相应的仿真结果,见图5及图6。423单边带调幅 单边带调幅方式的时域表达式比较复杂,有上边带(USB)和下边带(SSB)两种方式,表达式分别如下:S(t)= m(t)coswtm()sinwtS (t)= m(t)coswtm ()sinwt其中f()为f(t)的希尔伯特变换,从时域上来讲两者有以下关系式:从频域上来讲两者的关系式是:F()=-jsgn(w)F(w)在本软件中,我们使用的未调制信号为: 式中t取2s,载波C(t)=cos2t,=100。它的MATLAB实现如下:c=cos(2*pi*fc.*t); 定义载波同相分量b=sin(2*pi*fc.*t); 定义载波正交分量 v=m.*c+imag(hilbert(m).*b; 计算出下边带调幅分量u=m.*c-imag(hilbert(m).*b; 计算出上边带调幅变量M,m,dfl=fftseq(m,ts,df); 傅立叶变换M=M/fs;U,u,dfl=fftseq(u,ts,df); 傅立叶变换U=U/fs;V,v,dfl=fftseq(v,ts,df); 傅立叶变换则由此编程设计所得结果图形用界面演示如图7所示。在这里载频我们取得是100,是为了更好的能在课堂上演示,实际上,载频是远远的大于100。从时域波形可以看出,单边带调幅波形的包络已经不能反映未调信号的幅度了,所以只能采用相干解调方式。另外,上下边带的调制波形区别不是很大,因为它们的频谱具有某种对称性。原信号的频谱如图8所示图7 单边带调幅波形演示效果图 图8 未调信号的频谱图则调制信号的频谱图如图9所示 图9 SSB信号频谱图43 抽样定理的证明 PCM是模拟信号数字化的基本方式之一。其包含了三个重要变换:抽样,量化和编码,而抽样定理则是在对模拟信号进行抽样时必须遵循的准则,是接收端从已抽样信号中重建模拟信号的保正。设有一个频带限制在赫的模拟信号m(t):可作出时域图象和频谱图如图10所示 图10 被抽样信号的时域波形与频谱图从图象来看,信号在时域内衰减较快,大约在0.1s时就衰减为0,从频谱分布来看,原信号的频谱为一带限信号,在高频没有分量,低频从零频率开始。将m(t)与周期冲激函数相乘,如图(a)所示,乘积是已抽样信号,收端可用低通滤波器来重建m(t) 低通滤波器 m(t) m(t) (a) (b)图11 抽样与恢复 先分别用两种采样频率对信号进行抽样,f1=100Hz,f2=200Hz,按此原理,我们用MATLAB编程实现的MATLAB脚本文件如下:实现上述图象的MATLAB脚本文件如下:t0=10; 定义时间长度ts=0.001; 采样周期ts1=0.01; 欠采样周期ts2=0.005; 正确采样周期fs=1/ts; fs1=1/ts1; fs2=1/ts2;df=0.5; 定义频率分辨力t=-t0/2:ts:t0/2; 定义时间序列x=sin(200*t); m=x./(200*t);w=t0/(2*ts)+1; 确定t=0的点m(w)=1; t=0点的信号值为1m=m.*m; m=50.*m;M,mn,dfy=fftseq(m,ts,df); 傅立叶变换M=M/fs;f=0:dfy:dfy*length(mn)-dfy-fs/2; 定义频率系列这里有两点需要说明:(1) 在上述MATLAB的脚本文件中,我们首先定义信号时采用了该信号的函数表达式的形式,值得注意的是,由于有计算sin(t)/t这一式子,在t=0时MATLAB会得出此时的函数值为NaN,如果不加以修正的话,在后面计算傅立叶变换时就会出错。(2) 在MATLAB中求连续信号的频谱,我们应用的是离散傅立叶变换,这样实际运算的仍是对连续信号的采样结果,这里我们给予了足够高的采样频率,把其作为连续信号来考虑。对于一个频带在(0, )的连续信号,则该信号可用等间隔的采样值;来唯一的表示。而采样间隔必须不大于1/2,或者说是最低采样频率为2。从物理概念上可对采样定理作如下解释,由于一个频带受限的信号波形决不可能在很短的时间内产生独立的实质的变化,它的最高变换速度受最高频率分量的限制。因此,为了保留这一频率分量的全部信息,一个周期的间隔内至少要采样两次。对采样来说,等于将信号与一系列冲击脉冲相乘,f1=100Hz时,其表达式如下:原信号的频谱相应有移动,在f1的条件下,作出的图象如图11所示: 由于f12,此次的采样是成功的,它能够恢复原信号,从时域波形可看出,比上面采样所得的冲激脉冲串包含的细节要多,在频域中也没出现频谱的交叠,这样我们可以利用低通滤波器m(t)得到无失真的重建。4.4量化 量化就是将一个有连续幅度取值得信号映射成幅度离散信号的过程,从这个定义可以看出,由于是将连续的值改为离散的值,量化是一定有误差的,在此过程中丢失的信息是无法重新恢复的。所以说研究量化的误差并找到使之最小的方案是一个主要问题。量化方案可分为标量量化和矢量量化,标量量化中每个信源被分别量化,它分为均匀量化和非均匀量化。均匀量化的量化区域是等长的,非均匀量化则是不等长的,正因为如此,非均匀量化的性能要优于均匀量化。在标量量化中,随机标量X的定义域划分为N个互不重叠的区域Ri,i=1,2,. . .,N,R称为量化间隔,在每个区域选择一个点作为量化基础,用xi表示。落在该区域的点都用xi表示,这样会带来误差。该均方误差为: 其中f(x)是信源随机变量的概率密度函数。我们定义信号量化噪声比为: 在均匀量化方式中除第一个和最后一个区域,其他的所以区域是等长的,即: 每一级都有一个重建电平,既落在该区域中的不同值都会被化为同一值,通常每个量化间的重建电平也都取均匀分布的值。在本软件系统中我们的输入信号为正弦信号,其幅度为Am,现将其进行均匀量化,量化器的范围是(-V,V),共分为L级电平。(这里Am1,V=1.5,L=64和8)。)8级电平(如图14所示)。 图14 8级量化波形MATLAB的实现如下:x=0:0.004:4*pi; 定义时间序列 y=sin(x); 计算原信号图值 w=junyun(y,1,8); 计算量化值从图上看,量化后的值与原曲线值相差较小,阶梯形的量化曲线与原曲线比较吻合,较好的完成了任务。在量化范围(-V,V)中,量化间隔数为L个,均匀量化器的量化间隔由上面可以得到。求量化噪声功率的公式在此可以简化为: 而由前述可知: 所以因此,均匀量化器的不过载噪声(信号的幅度小于V)与信号统计特性无关,只与量化间隔和量化的最大值由关系。本软件系统中,使用64级电平的量化噪功率为: nq=8.1380e-005该量化器的信噪比(信号认为是正弦信号)为: SNR=则计算出:snr=1.5*(1/1)2*642snr=6144 %计算信噪比snr=10*log(snr)/log(10)snr=37.8845 将信噪比改为dB表示但使用8级电平的情况会完全不同,效果大大变坏。可以看出,噪声功率提高了几个数量级,量化效果明显变差。 在本软件中,我们用Simulink来实现量化误差及量化噪声的演示。通过量化前和量化后的信号相减可得量化误差,然后经理想LPF得到量化噪声。因为量化误差和对应的量化噪声都很小,为方便老师在课堂上向学生演示所以我们将量化误差和量化噪声进行了放大。图15就是我们仿真出来的量化误差及量化噪声。 图15 量化误差及量化噪声的演示4.5数字调制 数字调制方式有:幅度键控,移频键控和移相键控等三种。在幅度键控中,载波信号的幅度是随着调制信号而变化的。最简单的形式是载波在数字基带信号1或0的控制下通或断。设信息源发出的是由二进制符号0,1组成的序列,且假定0符号出现的概率为P,1符号出现的概率为1P,且彼此独立,则二进制振幅键控信号可以表示成一个单极性非归零波形s(t)与正弦载波相乘,即: 通常,二进制振幅键控信号的调制方法有两种,模拟幅度调制方法和键控方法。 我们对二元序列10110010,画出2ASK的波形,其中载频为码元速率的10倍。即表明在一个符号的时间里,载波刚好为5个周期。它的MATLAB实现的主要程序断如下所示: y=sin(10*pi*t); 载波x=ones(1,100),zeros(1,100),ones(1,100),ones(1,100),zeros(1,100),zeros(1,100),ones(1,100),zeros(1,101);定义一个与二元序列对应的时间序列z=x.*y; 幅频键控 图16 振幅键控将数字信号调制在载波的频率上的调制方法称为移频键控(FSK),它包括二电平频移键控和多电平频

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论