移动通信实验与实训(第二版)课件:MATLAB与通信系统仿真_第1页
移动通信实验与实训(第二版)课件:MATLAB与通信系统仿真_第2页
移动通信实验与实训(第二版)课件:MATLAB与通信系统仿真_第3页
移动通信实验与实训(第二版)课件:MATLAB与通信系统仿真_第4页
移动通信实验与实训(第二版)课件:MATLAB与通信系统仿真_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

移动通信实验与实训(第二版)绪论1.1MATLAB简介

1.2通信仿真

1.1MATLAB简介

一、MATLAB介绍

MATLAB的名字是由MATrix和LABoratory两个词的前三个字母组合而成的。它是MathWorks公司于1982年推出的一套高性能的数值计算和可视化数学软件,被誉为“巨人肩上的工具”。由于使用MATLAB进行编程运算与人进行科学计算的思路和表达方式完全一致,因此不像学习其他高级语言(如Basic、Fortran和C等)那样难于掌握,用MATLAB编写程序犹如在演算纸上排列出公式与求解问题,所以又被称为演算纸式科学算法语言。MATLAB包含一般数值分析、矩阵运算、数字信号处理、建模和系统控制与优化等应用程序,并集应用程序和图形于一个便于使用的集成环境中。在这个环境下,用户对所要求解的问题,只需简单地列出数学表达式,其结果便会以数值或图形方式显示出来。MATLAB的含义是矩阵实验室,主要用于方便矩阵的存取,其基本元素是无需定义维数的矩阵。MATLAB自问世以来就以数值计算称雄。MATLAB进行数值计算的基本单位是复数数组(或称阵列),这使得MATLAB高度“向量化”。经过多年的完善和扩充,MATLAB现已发展成为线性代数课程的标准工具。由于它不需定义数组的维数,并给出了矩阵函数、特殊矩阵等专门的库函数,使之在求解诸如信号处理、建模、系统识别、控制、优化等领域的问题时,显得大为简捷、高效、方便,这是其他高级语言所不能比拟的。美国许多大学的实验室都安装有MATLAB,供学习和研究之用。目前,MATLAB已成为攻读学位的大学生、硕士生、博士生必须掌握的基本工具之一。

MATLAB中包括了被称作工具箱(TOOLBOX)的各类应用问题的求解工具。工具箱实际上是对MATLAB进行扩展应用的一系列MATLAB函数(称为M文件),它可用来求解各类学科的问题,包括信号处理、图像处理、控制系统辨识、神经网络等。随着MATLAB版本的不断升级,其所含的工具箱的功能也越来越丰富,因此,应用范围也越来越广泛,成为涉及数值分析的各类工程师最常用的工具。

MATLAB7.0.1中包括了图形界面编辑GUI,改变了以前单一的“在指令窗通过文本形的指令进行各种操作”的状况,让用户也可以像使用VB、VC、VJ和Delphi等那样进行一般的可视化的程序编辑。在命令窗口键入SIMULINK,就会出现SIMULINK窗口。以往十分困难的系统仿真问题,用SIMULINK只需拖动鼠标即可轻而易举地解决,这也是近来MATLAB受到重视的原因所在。

二、MATLAB集成开发环境

运行MATLAB的可执行文件,将自动创建MATLAB指令窗(CommandWindow),如图0-1所示。图0-1MATLAB指令窗

在MATLAB下进行基本数学运算,只需在提示号“>>”之后直接输入运算式并按“Enter”键即可。例如:

(10*19+2/4-34)/2*3

ans

=234.7500

MATLAB会将运算结果直接存入一变数ans中,代表MATLAB运算后的答案,并在屏幕上显示其数值。如果在上述的运算式结尾加上“;”,则计算结果不会显示在指令视窗上,要得知计算值只需键入该变数值即可。

MATLAB可以将计算结果以不同精确度的数字格式显示,我们可以直接在指令视窗键入各个数字显示格式的指令,例如:

>>formatshort(这是默认的)

MATLAB利用“↑”“↓”两个游标键可以将所执行过的指令调回来重复使用。按下“↑”则前一次指令重新出现,之后再按“Enter”键,即再执行前一次的指令。而“↓”键的功用则是往后执行指令。其他在键盘上的几个键,如“→”“←”“Delete”“Insert”,其功能则显而易见,试用即知,无需多加说明。当要暂时执行作业系统(例如DOS)的指令而还要执行MATLAB时,可以利用“!”加上原作业系统的指令,例如“!dir”“!formata:”。

“Ctrl+C”(即同时按“Ctrl”及“C”两个键)可以用来中止执行中的MATLAB工作。有三种方法可以结束MATLAB:①按exit键;②按quit键;③直接关闭MATLAB的指令视窗。三、MATLAB基本操作

1.变量及其命名规则与赋值语句

MATLAB中的变量及其命名规则如下:

(1)变量名的大小写是敏感的。

(2)变量名的第一个字符必须为英文字母,而且变量名不能超过31个字符。

(3)变量名可以包含下连字符、数字,但不能为空格符、标点。

MATLAB中常用的预定义变量如表0-1所示。表0-1预定义的变量

在提示号“>>”之后键入clear,则去除所有定义过的变量名称。

MATLAB书写表达式的规则与手写算式差不多,如果一个指令过长可以在结尾加上“...”(代表此行指令与下一行连续)。例如:

3*...

6

ans=

18

2.常用数学函数

MATLAB常用数学函数如表0-2~表0-7所示。表0-2三角函数和双曲函数表0-3指数函数表0-4复数函数表0-5圆整函数和求余函数表0-6矩阵变换函数表0-7其他函数

3.MATLAB系统命令

MATLAB系统命令如表0-8所示。表0-8系统命令

4.MATLAB语言中的关系与逻辑运算

在执行关系及逻辑运算时,MATLAB将输入的不为零的数值都视为真(True)而为零的数值则视为假(False)。运算的输出值将判断为真者以1表示,而判断为假者以0表示。各个运算指令须用在两个维数相同的阵列或矩阵中。表0-9~

表0-11给出了关系运算、逻辑运算、逻辑关系函数中的各指令及其含义。表0-9关系运算表0-10逻辑运算表0-11逻辑关系函数四、MATLAB矩阵运算

MATLAB的运算事实上是以阵列(Array)及矩阵(Matrix)方式在做运算,而这二者的基本运算性质不同,阵列强调元素对元素的运算,而矩阵则采用线性代数的运算方式。

当宣告一变数为阵列或是矩阵时,如果要个别键入元素,须用中括号“[]”将元素置于其中。阵列由一维元素构成,而矩阵由多维元素构成。在MATLAB的内部资料结构中,每一个

矩阵都是一个以行为主(Column-oriented)的阵列,因此对于矩阵元素的存取,我们可用一维或二维的索引(Index)来定址。

MATLAB中经典的算术运算符如表0-12所示。表0-12经典的算术运算符五、MATLAB字符串及其处理

在MATLAB工作空间中,字符串是以向量形式来存储的,我们把用单引号所包含的内容来表示字符串。字符串内的单引号是由两个连续的单引号来表示的。MATLAB中常用的字符串函数如表0-13所示。六、MATLAB控制语句

1.for循环语句

for循环允许一组命令以固定的和预定的次数重复。for循环的一般形式是:

for变数=矩阵

运算式;

end

在for和end语句之间的运算式按数组中的每一列执行一次。在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:,n)。

for循环不能用for循环内重新赋值循环变量n来终止。在for循环内可接受任何有效的MATLAB数组。for循环可按需要嵌套。为了得到最大的速度,在for循环(while循环)被执行之前,应预先分配数组。

2.while循环语句

while循环语句根据表达式的结果来确定循环执行一组语句的次数。while循环的一般形式为

while表达式;

运算式;

end只要在条件式里的所有元素为真,就执行while和end语句之间的运算式。通常,条件式的求值给出一个标量值,但数组值也同样有效。在数组情况下,所得到数组的所有元素必须都为真。就是说,只要条件式成立,运算式就会一直被执行。可以利用break命令跳出while循环。while循环可按需要嵌套。

3.if-else-end分支语句

最简单的if-else-end结构为

if表达式;

运算式;

end

4.switch-case语句

switch-case语句的一般格式为

switchnum

casen1

command

casen2

command

casen3

command

otherwise

command

end一旦num等于n1,n2,n3,…中的每个值或字符串时,就执行所对应的指令;否则执行otherwise后的语句。

七、MATLAB编程语言

MATLAB程序大致分为两类,即M脚本文件(M-script)和M函数文件(M-funtion),它们均是普通的文本文件。M脚本文件中包含一组由MATLAB语言编写的语句,它类似于

DOS下的批处理文件。M脚本文件的执行方式很简单,用户只需在MATLAB的提示符“>>”下键入该M文件的文件名,MATLAB就会自动执行该M文件中的各条语句,并将结

果直接返回到MATLAB的工作区。M函数格式是MATLAB程序设计的主流,一般情况下,不建议使用M脚本文件编程。

MATLAB的M函数是由function语句引导的,其基本格式如下:

function[返回变量列表]=函数名(输入变量列表)

[注释(由%引导)]

[检查输入变量和输出变量的格式]

[函数体语句]

在M函数中,输入变量和返回变量的个数分别由nargin和nargout两个变量确定,并且这两个变量是由MATLAB自动生成的,只要进入该函数就可以使用。如果输入变量的数目大于1,则应该用括号“()”将它们包围起来,中间用逗号分割。注释语句段的每行语句都应该由百分号“%”引导,百分号后面的内容不执行,只起注释作用。用户使用help命令可以显示出注释语句段的内容。此外,正规的变量个数检查也是必要的。如果输入或返回变量格式不正确,则应该给出相应的提示。下面将通过例子来演示函数编程的格式与

方法。

假设要生成一个n × m阶Hilbert矩阵,其中第i行第j列的元素值等于1/(i+j-1)。在这个M函数中如果只有一个输入变量,则生成一个方阵(即m=n)。

同时,这个M函数具有参数检测功能,它在发现输入参数和输出参数的个数有错时给出错误信息。程序如下:将这个M函数保存到HilbertExample.m文件中,然后把MATLAB的当前工作目录设置为这个M文件所在的目录(这点很重要,否则,MATLAB将提示找不到文件),这时就可以运行这个M函数了。下面的程序段列出了针对这个M函数的各种操作及其结果。

第二节通信仿真一、通信仿真的概念通信仿真是衡量通信系统性能的工具。通信仿真可以分为离散事件仿真和连续仿真。在离散事件仿真中,仿真系统只对离散事件做出响应,而在连续仿真中,仿真系统要对输入信号产生连续的输出信号。离散事件仿真是对实际通信系统的一种简化,它的仿真建模比较简单,整个仿真过程需要花费的时间也比连续仿真少。虽然离散事件仿真舍弃了一些仿真细节,在有些场合显得不够具体,但仍然是通信仿真的主要形式。与一般的仿真过程类似,在对通信系统实施仿真之前,首先需要研究通信系统的特性,通过归纳和抽象,建立通信系统的仿真模型。图0-2所示是关于通信系统仿真流程的一个示意图。从图中可以看到,通信系统仿真是一个循环往复的过程,它从当前系统出发,通过分析建立起一个能够在一定程度上描述原通信系统的仿真模型,然后通过仿真实验得到相关的数据,通过对仿真数据的分析得到相应的结论,最后把这个结论应用到对当前通信系统的改造中。如果改造后通信系统的性能并不像仿真结果那样令人满意,还需要重新实施通信系统仿真,这时候改造后的通信系统就成了当前系统,并且开始新一轮的通信系统仿真过程。图0-2通信系统仿真的流程二、通信仿真的一般步骤

1.仿真建模

仿真建模是根据实际通信系统建立仿真模型的过程,它是整个通信仿真过程中的一个关键步骤,因为仿真模型的好坏直接影响着仿真的结果以及仿真结果的真实性和可靠性。

仿真模型是对实际系统的一种模拟和抽象,但又不是完全的复制。简单的仿真模型容易被理解和操作,但是由于它忽略了很多关于实际系统的细节,因而在一定程度上影响了仿真

的可靠性。如果仿真模型比较复杂,虽然它是对实际系统的一种忠实反映,但是其中包含了过多的相互作用因素,这些因素不仅需要消耗过多的仿真时间,而且使仿真结果的分析过程变得相当复杂。因此,仿真模型的建立需要综合考虑其可行性和简单性。在仿真建模过程中,我们可以先建立一个相对简单的仿真模型,然后再根据仿真结果和仿真过程的需要逐步增加仿真模型的复杂度。仿真模型一般是一个数学模型。数学模型有多种分类方式,包括确定性模型和随机模型、静态模型和动态模型等。确定性模型的输入变量和输出变量都是固定数值,而在随机模型中,至少有一个输入变量是随机的。静态模型不需要考虑时间变化因素,而动态模型的输入输出变量则需要考虑时间变化因素。一般情况下通信仿真模型是一个随机动态系统。在仿真建模过程中,首先需要分析实际系统存在的问题或设立系统改造的目标,并且把这些问题和目标转化成数学变量和公式。例如,我们可以设定改造后的系统或新系统,使之达到系统最大容量的误帧率或误码率等。有了这些具体的仿真目标后,下一步就是获取实际通信系统的各种运行参数,如通信系统占用的带宽及其频率分布,系统对于特定输入信号产生的输出等。同时,对于通信系统中的各个随机变量,可以采集这些变量的数据,然后通过数学工具来确定随机变量的分布特性。有了上面的准备工作,就可以通过仿真软件来建立模型了。最简单的工具是采用C语言等编程工具直接编写仿真程序,这种方法的优点是效率高,缺点是不够灵活,没有一个易于实现的人机交互界面,不便于对仿真结果进行分析。除此之外,还可以采用专门的仿真软件来建立仿真模型,比较常用的仿真软件包括MATLAB、OPNET、NS2等,这些软件具有各自不同的特点,适用于不同层次的通信仿真。例如,物理层仿真通常采用MATLAB,而网络层仿真则适合采用OPNET。在完成仿真模型的软件实现之后,还需要对这个仿真模型的有效性进行初步的验证。一种简便的验证方法是采用特定的已知输入信号,这个输入信号分别通过仿真模型和实际系统,产生两种输出信号。如果仿真模型的输出信号与实际系统的输出信号比较吻合,则说明这个仿真模型与原系统具有较好的相似性。当这两种输出信号差别很大时,最好先检查一下仿真模型的内部连接和设置,找出造成这种差异的原因。

仿真建模的最后一步是做好仿真模型的文档工作,这是最容易被大家忽略的。很多情况下,我们在完成系统的设计之后就迫不及待地运行仿真程序,待发现仿真结果与预期目标相差甚远时才回过头来焦头烂额地检查仿真模型的内部结构。这时候,往往原先的很多参数设置和条件假设都变得不可理解,这非常不利于修改参数和结构,不利于找错和排错。

2.仿真实验

仿真实验是一个或一系列针对仿真模型的测试。在仿真实验过程中,通常需要多次改变仿真模型输入信号的数值,以观察和分析仿真模型对这些输入信号的反应以及仿真系统在这个过程中表现出来的性能。需要强调的一点是,仿真过程中使用的输入数据必须具有一定的代表性,即能够从各个角度显著地改变输出信号的数值。

实施仿真之前需要确定的另外一个因素是性能尺度。性能尺度指的是能够衡量仿真过程中系统性能的输出信号的数值(或根据输出信号计算得到的数值),因此,在实施仿真之前,

首先需要确定仿真过程中应该收集哪些仿真数据,这些数据以什么样的格式存在,以及收集多少数据。在明确了仿真系统对输入信号和输出信号的要求之后,最好把这些设置整理成一份简单的文档。编写文档是一个好习惯,它能够帮助我们回忆起仿真在设计过程中的一些细节。当然,文档的编写不一定要求很规范,并且文档大小应该视仿真设计的规模而定。

最后,还应该明确各个输入信号的初始位置以及仿真系统内部各个状态的初始值。仿真的运行实际上是计算机的计算过程

温馨提示

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

评论

0/150

提交评论