MATLAB 基础与通信系统仿真


说明:pdf→word后码字修改,时间能力有限,难免有误,读者发现可评论指出,及时更新,谢谢谅解!

第 1 章 MATLAB 基础与通信系统仿真

MATLAB 语言是一种广泛应用于工程计算及数值分析领域的新型高级语言 ,自 1984 年由美国 MathWorks 公司推向市场以来 ,历经二十多年的发展与竞争 ,现己成为国际公认 的最优秀的工程应用开发软件 。MATLAB 功能强大 、简单易学 、编程效率高 ,深受广大科 技工作者的欢迎 。在欧美各高等院校 ,MATLAB 已经成为线性代数、自动控制理论、数字 信号处理 、动态系统仿真 、图像处理等课程的基本教学工具 ,成为本科生 、硕士生及博士 生必须掌握的基本技能 。本章首先对 MATLAB 的基本用法及通信系统仿真做一简单介绍。

1.1 MATLAB 简介

MATLAB 软件系列产品是一套功能强大的数值运算和系统仿真软件 ,被誉为“ 巨人肩膀上的工具”。借助于 MATLAB,能够迅速地测试设计构想 ,综合评测系统性能 。

1.1.1 MATLAB 的起源

20 世纪 70 年代 ,时任美国新墨西哥大学计算 机科学系主任的 Cleve Moler 出于减轻学 生编程负担的动机 ,为学生设计了一组调用 L时PACK 和 EISPACK 矩阵软件工具包库程序 的“通俗易用” 的接口,即用FORTRAN 编写的萌芽状态的 MATLAB ( MATrix LABoratory , 矩阵实验室)。1984 年,由 Little 、Moler 、Steve Bangert 合作成立 MathWorks 公司,并把 MATLAB 正式推向市场 。从这时起 ,MATLAB 的内核采用 C 语言编写 ,而且除原有的数 值计算能力外 ,还新增了数据图视功能 。与大家常用的 FORTRAN 和 C 等高级语言相比 , MATLAB 的语法规则更简单 ,更贴近人的思维方式 ,被称为 “草稿纸式的语言”。它以超 群的风格与性能风靡全世界 ,成功地应用于各工程学科的研究领域 。目前,MATLAB 软件 版本每年都在不断更新之中 ,新版本兼容旧版本 ,旧版本的程序可以不加修改地在新版本 中运行。但新版本的程序不 一定能在旧版本中运行 ,这点读者需要注意 。

1.1.2MATLAB 的特点

为什么 MATLAB 如此备受青睐?就让我们来看 一下 MATLAB 有什么特点吧 。

1. 数值计算和符号计算功能
MATLAB 具备强大的数值计算和符号计算功能 。数值计算功能包括:矩阵运算 、多项式 和有理分式运算 、数据统计分析 、数值积分等 。它的数值计算速度快 ,精度高,收敛性好, 函数库功能强大 。此外,在解决数学 问题的过程中 ,往往需要继续大 量的符号计算和推导 , MATLAB的符号计算可以得到问题的解析 。强大 的数值计算功能和符号计算功能是 MATLAB 优于其他计算软件的决定因素之 一。
2. 强大的 MATLAB 编程语言
MATLAB 除了命令行的交互式操作以外 ,还可以以程序方式工作 。使用 MATLAB 可以 很容易地实现 C 或 FORTRAN 语言的几乎全部功能 ,包括 Windows 图形用户界面的设计 。
3. 具有很好的图形功能
MATLAB 可以轻而易举地绘制 二维、三维及四维图形 ,并可进行图形和坐标的标识 、视 角和光照设计 、色彩精细控制等 。利用图形用户界面 GUI 制作工具 ,可以制作用户菜单和控 件。使用者可以根据自己的 需求编写出满意的图形界面。
4 . 可以直接处理声音和 图像文件
MATLAB 支持的声音和图像文件格式很多 ,如 wav 、bmp ,gif, pcx 、jpeg 等文件。 在 MATLAB中只需要简单的命令 ,就可以将声音文件或图像文件读入系统中并对它 们进行 相应的处理 。而如果使用高级语言 ,需要程序员自 己对文件格式有一定的了解 ,然后再根据 文件格式进行相应的数据读取 。
5. 具有功能强大的工具箱
MATLAB 包括基本部分和各种可选的工具箱 。基本部分中有数百个内部函数 ,可以满足 一般应用的需要。其工具箱分为两大类 :功能性工具箱和学科性工具箱 。功能性工具箱主要 用来扩充其符号计算功能 、可视建模仿真功能及文字处理功能等 。学科性工具箱专业性比较 强,如控制系统工具箱 、信号处理工具箱、通信系统工具箱、神经网络工具箱 、最优化工具 箱、金融工具箱等 ,用户可 以直接利用这些工具箱进行相关领域 的科学研究。
6. 使用方便 ,具有很好的扩展功能
使用 MATLAB 语言编写的程序可以直接运行 ,无须编译 。通过 MATLAB Compiler 和 CIC++ Math Libraby ,用户还可以将 MATLAB 语言编写的 M 文件转变为独立于平台的 EXE 可执行文件 。
MATLAB 的应用接 口程序 API 是 MATLAB 提供的十分重要的组件 ,由一系列接口指令
组成。用户可在 FORTRAN 或 C 语言中 ,把 MATLAB 当作计算引擎使用。
7. 强大的 Simulink 仿真工具
Simulink 是 MATLAB 的又一个重要的分支产品,是一个结合了框图界面和交互仿真能 力的系统级建模 、仿真和分析工具。它以 MATLAB 的核心数学、图形和语言为基础 ,可以让用户毫不费力 的完成从算法开发 、仿真到模型验证的全过程 。Simulink lockset 提供了丰富 的专业模块库 ,广泛用于控制 、DSP、通信等系统仿真领域 。用户也可以利用己有的模块或 自己编写的 C 程序或 MATLAB 程序建立 自己的模块及模块库 。
正是由于 以上特点,使 MATLAB 在短时间 内获得了广泛 的流行。现在从通信 、自动控 制、航空航天 、汽车工业 、工业设计 ,MATLAB 都凭借其强大 的功能获得用武之 地。广大学 生可 以使用 MATLAB 来帮助进行信号处理、通信原理 、自动控制等课程的学习:科技人员 可以使用 MATLAB 进行理论研究、算法开发 、产品原型 的设计与仿真等。下面就来介绍一下 MATLAB 的使用。

1.2 MATLAB 程序设计

“工欲善其事 ,必先利其器 ”。要熟练使用 MATLAB ,必须掌握 MATLAB 程序设计方法 。 在这一节中,主要介绍 MATLAB 的工作环境,MATLAB 的基本语法及用 MATLAB 进行图 形处理和数据可视化的方法 ,最后介绍 M文件编程。

1.2.1 MATLAB 工作环境

MATLAB 安装比较简单 ,与 Windows 下其他软件的安装大同小异,因此,就不再浪费 篇幅介绍 MATLAB 的安装。MATLAB 安装完成后 ,会自动在 Windows 桌面上生成一个快捷 方式,它是指向安装目录下\bin\win32\matlab.exe 的链接,双击它即可打开 MATLAB 集成环 境的基本窗口 ,如图 1-1 所示。
在这里插入图片描述图 1- 1 MATLAB 集成环境窗口

在 MATLAB 集成环境窗口中 ,可以看到 ,除了标题栏 、菜单栏 、工具条外,它还包含 三个窗口,分别是命令窗口 ( Command Window ) 、工作区变量窗口 ( Workspace ) 、历史命令窗口 (Command History ) 及一个项目启动菜单 ( Start )。

1. 命令窗口
命令窗口是 MATI.AB 提供的人机交互窗口 。任何 MATLAB 自带的命令及函数都可以在 此窗口中输入后立即执行 。其执行的最终结果也在此窗口中显示 。如输入 “ 100+300 ”,MATLAB 命令窗口显示如下 :
在这里插入图片描述

扫描二维码关注公众号,回复: 11548335 查看本文章

其中,第 1行是输入的命令 ,第2 3 行是MATLAB 执行命令后的输出结果 。ans 是MATLAB
默认的输出结果变量名 。如果指定了输出变量名 ,则 ans 会被指定的变量名代替。 例如:
在这里插入图片描述

是不是就像使用计算器 一样简单?
2. 工作区变量窗口
工作区变量窗口显示当前工作区中定义的变 量及它们的值,例如 ,在命令窗口中执行完 刚才输入的两条命令后 ,工作区变量窗口中显示 的内容如图 1-2 所示。
在这里插入图片描述
图 1-2 MATLAB 的工作区变量窗口

可以看到 ,刚才输入的两条命令生成的输出变量的值都显示在工作区变量窗口中 。由于 MATLAB 中的变量类型很多 ,有的变量代表的可能是一个矢量或是一个矩阵 ,这时在工作区 变量窗口中一行显示不下 ,如果想查看矢量或矩阵中所有元素的值 ,可在工作区变量窗口中 双击代表该矢量或矩阵的变量 ,MATLAB 会单独显示该变量中的所有元素 的值,如图 1-3 所 示。与图 1-2 相比,图 1-3 多了一个 “Array Editor,,窗口,类似于 Excel 表格 ,如果变量有多 个元素 ,该窗口将显示出变量所有元素的值 。由于 ans 变量只有一个元素 ,因此,窗口中也 只显示了一个值。查看完毕后 ,单击窗口右上角的叉号按钮 ,即可关闭。
3. 历史命令窗口
在历史命令窗口中 ,显示 MATLAB 最近执行过的相关命令 ,用户可以方便地在该窗口 中查阅己执行过的命令 ,在该窗口中双击某条命令 ,便可重新执行该命令 。
4. 项目启动菜单
项目启动菜单类似于 Window s 系统左下角的 “ 开始” 菜单 ,主要帮助用户快速启动 相关的内容 。
MATLAB 的退出与普通应用自芋一样,值得一提的是,它有一个专有的快捷键 “Ctrl+Q”。
在这里插入图片描述
图 1-3 单独查看某个变量所有元素的值

1.2.2 MATLAB 的帮助系统

MATLAB 提供的命令和函数很多 ,在学习 MATLAB 的过程中,不可避免地要遇到 一些 不会使用的命令和函数 ,这时可以通过 MATLAB 提供的帮助系统来了解函数的使用方法 。 学会使用这些帮助方法 ,对于快速掌握 MATLAB 是必不可少的。下面介绍一下MATLAB 的帮助系统。
1. 查看命令或函数帮助
当己知命令或函数名 ,想了解该命令或函数 的具体应用方法是,可以在命令窗口中输入 help 帮助命令 ,其格式为 “help ×××飞 其中 ,×××代表要查询的命令或函数名 。例如 ,如果 想了解 sin 函数的应用方法 ,在命令窗口中输入命令 。
在这里插入图片描述
MATLAB 执行后,命令窗口中显示出如下内容 :
在这里插入图片描述

在以上的 sin 函数帮助信息中 ,首先介绍了 sin 函数是什么函数及它的功能 ,接着给出了与 sin 函数相关的其他函数名称,用户可以利用 help 命令查询这些相关函数 ,最后两行给出 了 sin 函数帮助信息的相关文档链接 ,打开该链接可以更加详细的了解 sin 函数的有关介绍。

其他命令或函数的帮助信息查询 方法与 sin 函数类似,只要 MATLAB 自带有用户所查询 的命令或函数,MATLAB 都会给出相应的帮助信息 ,内容显示格式与 sin 函数的帮助信息格 式类似。因此,学会利用 help 命令是掌握 MATLAB 命令和函数使用方法的 必备技能。

2. 联机帮助系统
当知道相关的命令或函数名时 ,可以使用 help 命令,当对需要使用的相关命令或函数不 甚了解 ,甚至不知道需要利用 的命令或函数在 MATLAB 中的名字是什么时该怎么办 ? MATLAB 的联机帮助系统可以很好的解决这 一问题。
在 MATLAB 集成环境中 ,选择菜单 “Help- Matlab Help ” 或者单击工具栏中 的 “ ?” 图标就可以启动 MATLAB 的联机帮助系统,其界面如图 1-4 所示。
在这里插入图片描述
图 1-4 MATLAB 的联机帮助系统

可以看到 ,MATLAB 联机帮助系统界面主要包括两个主窗口 ,帮助导航窗口 ( HelpNavigator ) 和内容显示窗口 。帮助导航窗口主要包括内容 ( Contents) 、索引 ( lndexs ) 、查询(Search ) 、演示 ( Demρs) 四个标签项。单击相应的标签项可以切换到相应的子窗口 。内容 显示框用来为用户显示所查询的内容 。

例如 ,假设要对某个数求它的正弦值 ,但不知道 MATLAB 中的相应的函数名,单击 Search 标签项 ,切换到查询子窗口 ,在文本框中输入 sin ,回车后 MATLAB 会列出所有包含 sin 字 符串的函数名 ,其中第一个正是要查询的 sin 函数,这时在右边的内容显示窗口显示了有关 sin 函数的说明及使用 sin 函数的例子。

此外 ,演示子窗口也是 一个学习使用 MATLAB 的重要窗口 。它里面包含了许多利用 MATLAB 进行处理问题的演示。通过观看这些演示 ,可以很快了解 MATLAB ,高效地寻找 到相关问题的解决方法 。

总之,熟练掌握 MATLAB 联机帮助系统的使用 ,可以大大提高 MATLAB 的应用水平。

3. PDF 文件帮助系统
为了方便用户打印 ,MATLAB 还提供了 PDF 格式的帮助文档 ,它们在安装文件夹 help\pdf_doc 目录下。如作者的MATLAB 安装目录为 D:\MATLAB7, PDF 帮助文档在目录 D:\MATLAB7\help\pdf_doc 下。

4. MATLAB 网络资源
MATLAB 的官方网站如下:
http://www.rna 出works.com
网站上提供了大量的 MATLAB 的相关资料及源代码 ,读者可充分利用它们来解决自己学习及科研时遇到的问题 。

1.2.3 MATLAB 的基本操作

MATLAB 功能强大,但在实际应用时,大部分都是一些最基本的操作 ,掌握了这些基本 操作,可以解决常见的普通问题 。而更复杂的编程,可以通过组合 一些基本的操作来实现 。
1. 变量
与其他高级语言如 C 语言和 FORTRAN 语言相比 ,MATLAB 的变量不需要事先声明类 型,用 MATLAB 进行数学计算 ,就像用计算器计算算术一样方便 。
1 ) 变量与赋值
MATLAB 中的变量命名以字母开头 ,后接字母 、数字或下画线的字符序列 ,最多 63 个 字符 ,区分字母的大小写 。赋值语句为

变量表达式
例如:
x=5
表示将 5 赋值给 x。
MATLAB 内部有很多预定义变量和常数 ,用以表达特殊含义 。常用的有如下几种 。
(1)变量 ans :指示当前未定义变 量名的答案。
(2)常数 eps:表示浮点相对精度,其值是从 1.0 到下一个最大浮点数之间的差值 。该变 量值作为 一些 MATLAB 函数计算的相对浮点精度 ,按 IEEE 标准 ,eps=2-52,近似为 2.2204e–O 16。
(3)常数 Inf:表示无穷大 。当输入或计算中有除以 0 时产生 Inf。
(4)虚数单位i、j :表示复数虚部单位 ,相当于 J习。
(5)NaN :表示不定型值 ,是由 αo 运算产生的。
(6)常数 pi :表示圆周率π,其值为 3.141 592 653 589 7 。
(7)nargin :函数的输入变量个数 。
(8)nagout :函数的输出变量个数 。
2 ) 变量的删除与修改
clear 命令用于删除工作 空间中的变量,who 和 whos 显示驻留的变量名清单 。例如 ,输 入 x=l 和 y=2 后,分别输入 who 和 whos 命令 ,MATLAB 显示如下:
在这里插入图片描述
可见,whos 命令比 who 提供了更详细的关于变量的信息。
3 ) 局部变量和全局变量
局部变量是指那些每个函数体内自己定义的 ,不能从其他函数和 MATLAB 工作空间访 问的变量 。全局变量是指用关键字 “global ” 声明的变量 。全局变量名应尽量大写 ,并能反映它本身的含义。如果需要在工作空 间和几个函数中都能访问一个全局变量 ,必须在工作空间和这 几个函数中都声明该变量是全局的 。
2. 矩阵及其运算
MATLAB 具有强大的矩阵运算和数据处理功能 ,对矩阵的处理必须遵从代数规则 。
1 ) 一般矩阵的生成
对于一般的矩阵 MATLAB 的生成方法有多种 。最简单的方法是从键盘直接输入矩阵元 素。直接输入矩阵元素时应注意:各元素之间用空格或逗号隔开 ,用分号或回车结束矩阵行, 用中括号把矩阵所有元素括起来 。例如,在工作空间产生一个 3 ×3 矩阵 A 。输入如下 :
》A=[l 2 3; 4 5 6; 7 8 9]

在这里插入图片描述
运行结果:
在这里插入图片描述

若要显示整行或整列 ,则可以用 冒号(:)来表示 。冒号(:)代表矩阵中行(ROWS )或列
(COLUMNS)的全部。例如 ,执行命令
在这里插入图片描述
就会显示第 2 列的全部 ,结果为
在这里插入图片描述

2 ) 特殊矩阵的生成
( 1) eye (m,n)或 eye (m)产生 mn 或 mm 的单位矩阵。例如 :
在这里插入图片描述
( 2 ) zeros (m,n) 或 zeros (m) 产生 m刊 或 mm 的零矩阵。例如:
在这里插入图片描述
( 3) ones (m,n) 或 ones (m) 产生 m
n 或 mm 的全部元素为 1 的矩阵。例如 :
在这里插入图片描述
( 4 ) randn (m,n) 或 randn (m) 产生 m
n 或 m*m 的随机矩阵。矩阵中每一行 ,每一列元 素都服从均值为 0,方差为 l 的高斯分布 。例如 :
在这里插入图片描述

( 5) rand(m,n) 或 rand (m)产生 mn 或 mm 的随机矩阵。矩阵中每一行,每一列元素都 服从[O, 1]上的均匀分布 。例如 :
在这里插入图片描述
randn 和 rand 函数是通信系统仿真中常用的函数 ,经常用它们来产生各种不同要求的随 机数,例如 ,产生 8 个噪声功率为 10 的高斯白噪声样值如下:
在这里插入图片描述
其中 ,sqrt函数是开方运算。

3 ) 矩阵运算

矩阵的运算有基本运算和函数运算两种类型 。基本运算包括矩阵的加、减、乘、除、乘 方、求转置 、求逆等 ,其主要特点是通过 MATLAB 提供的基本运算符+ 、-、*、/(\)、^等即可完成。函数运算主要是通过调用 MATLAB 系统内置的运算函数来求取矩阵的行列式(det(A)) ,求秩(rank(A)) ,求特征值和特征矢量 ( [V, D ]=eig(A)) ,求 Jordan 标准形(jordan(A) )和矩阵分解等 。需要用时可以参阅联机帮助和相 关参考书。例如:
在这里插入图片描述

说明:程序的第1 行定义了矩阵 A ,其中语言最后的 “,” 表示让 MATLAB 在执行后不 在命令窗口输出当前运行结果值 。在后面讲到的m 脚本文件编程时 ,因为有很多结果是中间 结果值,让 MATLAB 不显示这些中间结果值可提高程序的执行速度 。第2 行定义了矩阵 B。 第 3 行是计算矩阵 A 和 B 的和。最后的“%” 表示后面的字符是注释 ,MATLAB 在执行时会忽略掉本行%后面的内容 。在编写M 文件时,注释可以对程序的功能加深理解 。第 4 行是求矩阵 B 的转置矩阵。需要注意的是如果矩阵 B 是复数矩阵 ,则 B’求的是 B 的共辄转置矩 阵,转置矩阵 的命令是 B:。第 5 行是求矩阵 A 和 D 的乘积,它们之间的运算满足矩阵乘法 的要求。此外,MATLAB 还提供了两个维数相同矩阵对应元素乘除运算命令 ,分别是 “.*” 和 “./”,如第 6 行和第 7 行所示 。第 8 行是求矩阵 E 的行列式,第 9 行和第 10 行都是求矩 阵 E 的逆矩阵。其中,inv 函数是 MATLAB 提供的专 门求方阵的逆矩阵的函数 。以上命令的 执行结果如下:
在这里插入图片描述

1.2.4 MATLAB 图形处理和数据可视化

作为一个功能强大 的工具软件 ,MATLAB 具有很强的图形处理功能,提供了大量的 二维、 三维图形函数 。由于系统采用面向对象的技术和丰富的矩阵运算 ,所以,在图形处理方面非常方便又高效 。

  1. plot 函数
    函数格式:plot (x,y),其中 x 和 y 为坐标矢量。
    函数功能:以矢量 x 、y 为轴,绘制曲线。
    例 1.1 在区间0=<x=<2pi 内,绘制正弦曲线 户sin(x) ,其程序为在这里插入图片描述
    说明 :程序的第 1 行表示以 0 为初始值 ,pi/100 为步长,2*pi 为结束值生成矢量 x。第2行表示计算矢量 x 的 sin 值。第3 行是画出以 x 为横坐标 ,y 为纵坐标绘制曲线 。程序执行后
    生成的图形如图 1-5 所示。
    在这里插入图片描述图 1-5 y=sin(x)曲线

plot 函数还可以为 plot(x,yl ,x,y2, x,y3,···)形式,其功能是以公共 矢量 x 为 x 轴,分别以y1. y2. y3,为 y 轴,在同一幅图内绘制出 多条曲线。
例 1.2 同时绘制正、余弦两条曲线 yl=sin(x)和 y2=cos(功,其程序为
在这里插入图片描述
程序运行结果如图 1-6 所示。
在这里插入图片描述
图 1-6 同时绘制sin(x)和 cos(x)曲线

plot 可以以不同颜色与线形 表示不同的曲线 ,其格式为 plot(x,y l ,'cs’,),其中 c 表示颜 色,s 表示线形。
例 1.3 用不同线形和颜色重新绘制例 1.2 图形,其程序为
在这里插入图片描述

其中,参数’go’和'b .’表示图形的颜色和线形 。g 表示绿色, 表示图形线形为圆圈 ;b 表示蓝 色,表示图形线形为点画线 。更多参数说明,读者可以查看MATLAB 帮助。程序运行结果, 如图 1-7 所示。
在绘制图形的同时 ,可以对图形加上 一些说明,如图形名称 、图形某一部分的含义 、坐 标说明等 ,将这些操作称为添加图形标记 。其命令如下 :
在这里插入图片描述
在这里插入图片描述
图 1-7 plot 函数的不同颜色和线形

其中 ,title 用来说明图形的名称 ,xlabel 用来说明横坐标代表的参数含义 ,ylabel 说明纵坐标 代表的参数含义 ,text 是在图形的特定位置添加 注释 ,x(190)代表 x 矢量的第 190 个值,因此 本例中分别在坐标 (x(190),y1(190))和坐标(x(190),y2(190))处添加注释 。上述命令执行后 ,结果
如图 1-8 所示。
用户若对坐标系统不满意 ,可利用 axis 命令对其重新设定 。最常用的命令格式为 缸is([刀nin xmax ymin ymax]) ,分别设定 x 轴和 y 轴的最小值和最大值 。其他的命令格式 ,读 者请参考 MATLAB 帮助。
MATLAB 绘出的图形默认是不显 示坐标网格 ,让图形显示坐标网格的命令是 grid on , 不显示坐标网格的命令是 grid off 。给图形加图例命令为 legend o 该命令把图例放置在图形空 白处,用户还可以通过鼠标移动图例 ,将其放到希望的位置 。其命令格式为 legend(’曲线 1 图例说明’J 曲线2 图例说明γ )。
在这里插入图片描述
图 1-8 图形添加说明

例 1.4 在坐标范围 0运x 2π,一2 y 运2 内重新绘制例 1.3 图形,并显示坐标网格和图 例说明 。其程序为
在这里插入图片描述

说明:在本程序中第1行用到了 linespace 函数,它的作用是以第 1个参数和第 2 个参数为区间,生成含有第3 个参数元素的矢量 。本例中就是在[ O, 2*pi]生成 200 个数据元素的矢量。 程序的第 10 行是设定 x 轴范围为[0,2啊,y 轴范围为[ -2, 2] 。第 11 行是让 MATLAB 在图形 上显示坐标网格 ,最后一行加上图例说明 。程序运行结果如图 1-9 所示。
2. subplot 函数
subplot(m,n,p)命令将当前图形窗口分成 mxn 个绘图区 ,即每行 n 个,共 m 行,区号按行优先编号 ,且选定第 p 个区为当前绘图区 。
在这里插入图片描述
图 1-9 例 1.4 程序运行结果

例 1.5 在同一个图形窗口中 ,同时绘制 y1=sinx,y2=cosx,y3=sin(2x), y4=(cos2x), 0=<x=<2pi程序为
在这里插入图片描述
说明:程序的第 3 行把整个绘图区分为 2×2 区域,且指定了当前绘图区为 1,第 8、13、18 行分别指定当前绘图区为 2、3、4。程序运行结果如图 1-10 所示。
在这里插入图片描述
图 1-10 例 1.5 程序运行结果

3. 多图形窗口
需要建立多个图形窗口 ,绘制并保持每 一个窗口的图形 ,可以使用 figure 命令 。每执行 一次 figure 命令,就创建一个新的图形窗口 ,该窗口自动为活动窗口 ,若需要还可以返回该 窗口的识别号码 ,称该号码为句柄 。句柄显示在图形窗口的标题栏中 ,即图形窗口标题。用 户可通过句柄激活或关闭某图形窗口 ,而 缸is、xlabel 、title 等许多命令也只对活动窗口有效 。
例 1.6 用 figure 命令重新绘制例 1.5 中的 y1,y2,y3,y4。
在这里插入图片描述
说明:程序与例 1.5 的不同分别是在第 3, 8、13、18 行用 figure 命令代替了 subplot 命 令。程序的运行结果如图 1-11 所示。在这里由于排版的需要 ,把 4 个窗口显示在一起。程序 运行结束后 ,窗口 4 实际上是活动窗口 。
在这里插入图片描述
图1-11 例 1.6 程序运行结果

4. hold 命令
在使用 plot 函数画图时,原有的图形会被新的图形所代 替。若想保留原有的图形 ,并己 存在图形窗口中用 plot 命令继续添加新的图形内容 ,可使用图形保持命令 hold o 发出命令 hold on 后,再执行 plot 命令 ,在保持原有图形或曲线的基础上 ,添加新绘制的图形。

例 1.7 hold 命令示例如下 :
在这里插入图片描述
说明:程序的执行结果与程序例 1.5 的结果基本相似 ,这里就不再给出 。读者可以尝试 去掉程序中第 5 行中的 hold on 命令 ,再次执行程序 ,可以看出前后两者的不同 。
5. 对数坐标图形
在通信系统仿真中,很多情况下需要绘制对数坐标图形 。例如 ,各种信道中误码率随信 噪比的变化曲线,这时,纵坐标 (误码率) 一般采用对数坐标 。MATLAB 也提供了绘制对数 坐标的函数 ,介绍如下 。
(1) loglog(x,y) 双对数坐标 ,横坐标和纵坐标都采用 x,y 的对数。
( 2) semilogx(x,y):单对数坐标,横坐标采用 x 的对数。
( 3) semilogy(x,y ):单对数坐标 ,纵坐标采用 y 的对数。
例 1.8 绘制 y=|1500×(sin(2x)+cos(x)|+1 的双对数坐标图 。程序为
在这里插入图片描述
程序执行结果如图 1-12 所示。
在这里插入图片描述
图 1-12 例 1.8 程序运行结果

从图 1-12 可以看出 ,横坐标和纵坐标都采用了 几y 的对数值。
例 1.9 分别以 x 轴为对数和以 y 轴为对数重新绘制上述曲线 。
在这里插入图片描述
在这里插入图片描述
图 1-13 例 1.9 程序运行结果

除 plot 等基本绘图命令外 ,MATLAB 系统还提供了许多其他特殊绘图函数 ,这里就不 再一一举例 ,更详细的信息用户可随时查阅在线帮助 ,其对应的 M-file 文件存放在系统
\matlab\toolbox\matlab 目录下。

1.2.5 M 文件编程

通常 MATLAB 以指令驱动模式工作 ,即在 MATLAB 窗口下当用户输入单行指令时 , MATLAB 立即处理这条指令,并显示结果,这就是 MATLAB 命令行方式。在命令行操作时 , MATLAB 窗口只允许一次执行一行上的一个或几个语句。前面所举的例子都是基于这种方式的。
在 MATLAB 窗口输入数据和命令进行计算时 ,当处理复杂问题和大量数据时是不方便 的。命令行方式程序可读性差 ,而且不能存储 ,对于复杂的问题,应编写成能存储的程序文 件,即 M文件。
首先将 MATLAB 语句构成的程序存储成 以.m 为扩展名的文件 ,然后再执行该程序文件 ,
这种工作模式称为程序文件模式 。程序文件不能在指令窗口下建立 ,因为,指令窗口只允许 一次执行一行上的一个或几个语句 。
M 文件有两种形式 :脚本文件 ( Script File ) 和函数文件 ( Function File ) 。这两种文件的
扩展名 ,均为 “. m ”。
1. M 脚本文件
对于复杂计算 ,采用脚本文件最为合适 。脚本文件的构成比较简单,只是一串按用户意 图排列而成的 (包括控制流向指令在内的) MATLAB 指令集合 。MATLAB 只是按文件所写 的指令执行。脚本文件运行后 ,所产生的所有变量都驻留在 MATLAB 基本工作空间 ( Base Workspace ) 中。只要用户不使用清除指令(Clear ) , MATLAB 指令窗口不关闭,这些变量 将一直保存在基本工作空间中 。
M 文件的类型是普通的文本文件 ,可以使用系统认可的文本文件编辑器来建立 M 文件。
其具体创建方法如下 :
(1) 在 MATLAB 命令窗口选择菜单 “file→New →M-file ” (或者单击工具栏的口按钮〉, 如图 1-14 所示。这时系统会弹出系统自带的 M 文件编辑器 ,类似于记事本和写字板 ,如图
1-15 所示,这时就可以在编辑器中输入相应的命令 。
在这里插入图片描述
国 1-14 新建 M-file
在这里插入图片描述

图 1-15 MATLAB 自带的M-file 编辑器

( 2 ) 编辑完成之后 ,单击工具栏上的 a按钮,这时系统会提示输入文件名 ,输入后 ,单击 “确定” 按钮即可保存编辑好的 M文件。
( 3 ) 保存完成后 ,单击工具栏上的姐按钮 ,即可运行刚才输入的 M 文件 。也可以在MATLAB 命令窗口中输入 M 文件的名字来运行 M 文件。
2. 函数文件
与脚本文件不同 ,函数文件犹如一个 “黑箱”,把一些数据送进并经加工处理 ,再把结果 送出来 。MATLAB 提供的函数指令大部分都是由函数文件定义的 。M 文件的特点如下 :
(1) 从形式上看 ,与脚本文件不同 ,函数文件的第一行总是以 “function ” 引导的 “函数 申明行”。
(2) 从运行上看 ,与脚本文件运行不同 ,每当函数文件运行 ,MATLAB 就会专门为它开辟一个临时工作空间 ,称为函数工作 空间 ( Function Workspace )。当执行文件最后 一条指令 时,就结束该函数文件的运行 ,同时,该临时函数空间及其所有的中间变量就立即被清除 。
(3) 函数定义时 ,一般都定义了输入/输出(ν0 ) 变量的个数,称为“默认数目”。MATLAB允许使用比 “默认数目” 较少的输入/输出变量,实现对函数的调用 。 典型 M 文件的结构如下 :
(1) 函数声明行:位于函数文件的首行 ,以关键字 function 开头,函数名及函数的输入
输出变量都在这一行被定义 ,其格式为
在这里插入图片描述
其中,函数名的命名规则与变量名相同 。输入形参为函数的输入参数 ,输出形参为函数的输 出参数。当输出形参多于 1 个时,则应该用方括号括起来 。
(2) 第一注释行 :紧随函数声明行之后以%为开头第 一注释行 。该行主要供 lookfor 关键词查询和 help 在线帮助使用 。
(3) 在线帮助文本区 :第一注释行及其之后的连续以%开头的所有注释行构成整个在线 帮助文本 。
(4) 编写和修改记录 :与在线帮助文本区相隔 一个 “空” 行,也以%开头 ,标志编写及修改该 M文件的作者和日期等。
(5) 函数体:为清晰起见 ,它与前面 的注释 以 “空” 行相隔。
(6) M文件的文件名必须是 “函数名.M” (不包括双引号)。
例 1.10 通过 M-file 编辑器打开安装目录 F\toolbox\matlab\matfun\trace.m 文件,可以看到如下内容:
在这里插入图片描述
说明:第 1 行是函数的声明行,函数的输出变量为 t ,函数名为 trace ,输入变量是 a。第 2 行是第一注释行 ,第 3~7 行是在线文本帮助区 ,在MATLAB 命令行窗口中输入 help trace, 则第 2~7 行的内容就会 显示出来。第 9 10 行是该函数的编写和修改记录 。这个函数的函数 体只有1行,它的功能是计算输入参数矩阵 A 的迹,井把计算结果赋值给输出变量t
其他 MATLAB 函数的形式与之相似 ,感兴趣的读者可以查看有关函数的实现 。

3. 函数调用和参数传递
1) 函数调用
函数文件编制好后 ,就可调用函数进行计 算了。函数调用的一般格式为
[输出参数 1,输出参数 2,]= 函数名(输入参数1,输入参数 2,)
函数调用可以嵌套 ,一个函数可以调用别的函数 ,甚至调用它自己 (递归调用)。在前 面的例子中己经多次演示了函数调用 的方法,这里就不再单独举例。
2 ) 局部变量和全局变量
CI ) 局部变量存在于函数空间 内部的中间变量 ,产生于该函数 的运行过程中 ,其影响范 围也仅限于该函数本身 。
( 2 ) 通过 global 指令,MATLAB 允许几个不同的函数空间及基本工作空间共享同 一个变量,这种被共享的变量称为全局变量。
在 MATLAB 中,函数文件的内部变量是局部的,与其他函数文件及 MATLAB 工作空间 相互隔离 。但是,如果在若干函数中 ,都把某一变量定义为全局变量 ,那么这些函数将共用 这一个变量。全局变量的作用域是整个 MATLAB 工作空间 ,即全程有效。所有的函数都可 以对它进行存取和修改 。因此,定义全局变量是函数间传递信息的一种手段 。
例 1.11 全局变量应用示例。先建立函数文件 myfun.m ,该函数将计算输入的参数的二 次多项式和 。
在这里插入图片描述
在命令窗口中输入
在这里插入图片描述

4. MATLAB 的程序结构
MATLAB 语言的程序结构与其他高级语言是一致的,分为顺序结构、循环结构、分支结构。
(1) 顺序结构 一一 依次顺序执行程序的各条语句 。
(2) 循环结构 一一 被重复执行的一组语旬,循环是计算机解决问 题的主要手段 。
(3) 分支结构 一一 根据一定条件来执行的各条语句。 顺序结构前面的例子已经有了很多 ,这里就不再说明 。下面主要说明一下循环结构和分
支结构的语法格式 。
1) 循环结构 循环结构主要有以下几种 。
(1) for-end 语句 语法为
在这里插入图片描述
其中 ,indx 代表循环变量 ,也可以用其他变量代替。后面紧跟的是循环初始值 ,循环步长 , 循环结束值 。在循环步长为 1 的情况下,也可以省略而代之以 :循环初始值:循环结束值 。 中间是可执行语句组成 的集合 ,在语旬的最后要加 end 代表 for 循环的结束。for-end 语句 是可以嵌套的 ,也就是说在 一个 for-end 语句中可以嵌套其他的 for-end 语句。下面来看一个例子 。
例1.12 利用 for 循环求 y=sinx+sin2x+ ··· +sin100x, 0=<x 2π的值。
在这里插入图片描述
在这里插入图片描述

上述程序比较简单 ,首先是赋值给 y=O ,然后生成矢量 x ,然后通过第 3 5 行的 for 循 环计算 y ,最后是输出相应的结果 。程序执行结果如图 1-16 所示。
在这里插入图片描述
图 1-16 例 1.12 程序运行结果

(2) while-end 循环
while 循环将循环体中的语句循环执行不定次数 。语法为
在这里插入图片描述

表达式一般是 由逻辑运算和关系运算及 一般运算组成的 ,以判断循环的进行和停止 :只 要表达式的值非 0,继续循环 :直到表达式值为 0,循环停止 。
例 1.13 用 while 循环实现例 1.12 程序。
在这里插入图片描述
程序的执行结果与例 1.12 相同,这里就不再给出 。
2) 分支结构
分支结构的语句有 if 语句和 switch 语句。下面先来看江 语句。 江 语旬的格式有如下几种格式 。
格式1
在这里插入图片描述
格式 2
在这里插入图片描述
格式 3
在这里插入图片描述

在格式 1 中,首先判断条件是否满足 ,如果满足则执行可执行语句组 ,否则结束 。在格 式 2 中,首先判断条件是否满足 ,如果满足则执行可执行语句组 1,若不满足则执行可执 行 语句组 2。格式 3 是格式 2 的进一步扩展,分别对判断是否满足条件 1,2,…m,然后执行相 应的可执行语句组 。若所有的条件都不满足 ,则执行可执行语句组 m+l 。可见,格式 3 实现 了一种多路选择,比较复杂。可替代下面要讲到的 switch-case-end 语句。
例1.14 一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数 。输出全部水仙花数 。程序代码为
在这里插入图片描述
说明:在程序中 ,首先是一个 for 循环 (第 1 行), 在循环体内 ,分别求出三位整数的 百位、十位和个位数字 (第 2~4 行), 其中,rem(x,y )函数是求 y 除 x 的余数。fix(x)是求 x 的整数部分,它们都是MA1LAB 内置的函数。第5~7 行用一个 if 语句判所求的三位整数是否是水仙花数 ,是则输出该数 。
程序执行结果为
在这里插入图片描述
switch 语句根据变量或表达式 的取值不同 ,分别执行不同的语句。其格式为
在这里插入图片描述
说明:switch 语句首先判断表达式的值,如果等于值 l ,则执行可执行语句组 1,等于值2,则执行可执行语句组 2 ,如果与判断 的值都不相等,则执行可执行语句组 m+1 。
例 1.15 switch-case 语句说明。在本例中,首先定义了一个函数 myfun1 ,它的功能是根 据不同的输入值 ,输出对应的输出值 。代码如下 :
在这里插入图片描述
然后另建 M文件 ,代码如下 :
在这里插入图片描述
该程序的功能就是分别给 x 赋不同的值,然后调用函数myfun1得到输出值 。运行结果如下:
在这里插入图片描述
从执行结果可以看出 ,myfun1函数根据输入的不同的 x 值,输出了相对应的结果 。
3 ) break t吾句与 continue 语句
在循环语句的执行过程中 ,需要中断循环可以使用 break 语句和 continue 语句。其中 , break 语句是终止循环 ,执行循环体后的语句。而continue 语句则是终止本次循环 ,本次循环 中的 continue 语句后的循环语句不再执行 ,而是执行新的循环 。break 与 continue 语句经常与 if 语句联合使用 。
例 1.16 break 语句与 continue 语句示例 。
在这里插入图片描述
说明:程序中分别定义了 2 个循环体 ,第 1 个循环体 (第 1~7 行〉 判断循环变量是否 等于 3,是则跳出循环体 ,执行循环体下面的语句 ,而在第 2 个循环体 (第 9~15 行〉 中, 如果循环变量等于 3,则结束本次循环 ,继续执行下一次循环。程序的执行结果为
在这里插入图片描述
说明:从执行结果可以看到,循环体1只执行了 1 次,而循环体 2 则执行了 2 次。读者 可以区分两者的不同 。
5. 用户参数交互输入
在编制程序的过程中 ,有时需要在程序的运行过程中输入 一些参数,输出一些提示信息, 或者暂停程序的运行等 。MATLAB 对此提供了相应的函数 。
1 ) input 函数
input 函数用于向计算机输入一个参数 。它的调用格式为
在这里插入图片描述
默认情况下 ,input 函数输入的是数字 ,而如果加上选工页’s’ ,则允许用户输入一个字符串 。 例如 ,想输入一个人的姓名 ,可采用如下命令 。
在这里插入图片描述
例 1.17 求一元二次方程 ax^2+bx+c=0 的根。
在这里插入图片描述
程序的第 1~3 行分别是输入 a, b, c 的值,第 4 行是根据求根公式求方程的根 。第 5行是把得到的结果按照矢量的形式输出 。程序运行结果如下 :
在这里插入图片描述
其中,1, 3, 2 是输入的数字 。读者可以尝试输入其 他参数。
2 ) pause 函数
pause 函数暂停程序的执行。它的调用格式为
在这里插入图片描述
其中,n 是暂停执行的时间秒数 ,如果省略延迟时间 ,直接使用 pause ,则将暂停程序,直到 用户按任一键后程序继续执行。
3 ) disp 函数
disp 函数是向命令窗口输出提示信息 。它的调用格式为
在这里插入图片描述
其中,输出项可以为字符串或矩阵 。这个函数类似于 C 语言中的 printf 函数。 例如:
在这里插入图片描述
输出为
在这里插入图片描述

1.2.6 文件操作

MATLAB 环境下的文件与其他系统 一样,也有两类文件组成 ,一是 M 文件,前面已经 进行了介绍 。另一类是数据文件 。系统除提供了文件的 一般管理功能外 ,还提供了对数据文 件进行操作的特殊功能函数 。
1. 文件的打开与关闭
MATLAB 提供了对数据文件建 立、打开、读、写及关闭等一系列函数 ,数据文件一般 存放在磁盘等介质上,用文件名标识 ,系统对文件名没有特殊要求 。文件数据格式有两种形 式:一是二进制格式文件;二是 ASCII 文本文件,系统对这两类文件提供了不同的读 /写功能 函数。
1 ) fopen 函数
在读/写文件之前 ,必须先用fopen 函数打开一个文件 ,并指定允许对该文件进行的操作。 文件操作结束后 ,应及时关闭文件 ,以免数据的丢失或误修改 。fopen 函数的调用格式为
在这里插入图片描述
其中,fid 是 fopen 函数打开的文件句柄 ,在对文件进行其他操作时要用到它 。filename 为文件名,permission 为文件格式 ,格式选项参见表 1-1。

表 1-1 文件格式选项说明在这里插入图片描述
例如,打开一个名为 test.dat 的数据文件并进行读操作 ,其命令格式为在这里插入图片描述
上述打开格式均为二进制格式,如果想用 ASCII 文本格式 ,则必须在格式字符串中加上 字符 t,例如,用’r t’表示以ASCII 格式打开供读操作的数据文件 。

2 ) fclose 函数
文件在进行完读 、写等操作后 ,应及时关闭,以保证文件的安全可靠。关闭文件命令格式为
在这里插入图片描述
其中 ,fid 是用 fopen 打开的文件句柄 。此 表示关闭文件操作的返回代码 ,若关闭成功,返回
0,否则返回 lo
2. 文件的读/写操作
文件的读/写操作主要包括二进制文件的读/写操作和 ASCII 文本文件的读/写操作。

1 ) fread 函数
fread 用来读取二进制数据文件。其调用格式为
在这里插入图片描述
其中 ,A 为数据矩阵 ,count 返回所读取的数据元素个数 。size 为可选工页,若不选用则读取整 个文件 内容,若选用则它的值可以是下列值,参见表 1-2。
表 1-2 size 选项说明
在这里插入图片描述
precision 用于控制所读数据的精度格式 ,格式种类较多 ,这里就不再给出 ,读者可以查 阅 MATLAB 帮助 。默认格式为 uchar,即无符号字符格式 。例如:
在这里插入图片描述
以读数据方式打开数据文件 test.dat ,并按长整型数据格式读取文件的 前 1000 个数据放 入矩阵 A ,然后关闭文件 。
2 ) fwrite 函数

fwrite 函数以二进制格式向数据文件写数据 ,其调用格式为
在这里插入图片描述
上述语句将矩阵 A 中的数据写入文件 test.dat 中,数据格式为 32 位整型二进制格式 。
例 1.18 建立一数据文件 test.dat ,用于存放矩阵 A 的数据。
在这里插入图片描述
说明:程序第 l行首先以写文件方式打开文件 test.dat ,第 2 行将矩阵 A 的数据以二进制 浮点数格式写入文件 test.dat 中,第 3 行关闭文件 。第 4 行以读文件方式重新打开 test.dat 文 件,第 5 行以浮点数格式读入 test.dat 的内容并赋值为矩阵 B,第 6 行是关闭文件。
程序执行结果为
在这里插入图片描述
3 ) fscanf 函数
fscanf 函数用来读取 ASCII 文本文件 ,其调用格式为
在这里插入图片描述
其中,A 为数据矩阵,用以存放读取的数据,count 返回所读取的数据元素个数。format 用以控 制读取的数据格式 ,的加上格式符组成 ,具体的格式符及含义读者请查 阅MATLAB 帮助。
4 ) fprintf 函数

fprintf 函数用来写 ASCII 数据文件 ,其调用格式为
在这里插入图片描述
其中,A 为要写入文件的数据矩阵 ,先按 format 格式化数据矩阵 A ,后写入进 fid 所指定的 文件。
例 1.19 建立一数据文件 test I.四,用于用 ASCII 文本方式存放矩阵 A 的数据。
在这里插入图片描述
这个程序与例 1.18 相似,这里就不再说明 。
3. 文件定位
在文件读/写操作中,经常需要定位文件指针位置。MAτLAB 提供了文件指针定位函数 。
1 ) fseek 函数
fseek 函数定位文件位置指针 ,其调用格式为
在这里插入图片描述
其中,fid 为文件句柄 ,他et 表示位置指针相对移动的字节数 ,若为正整数表示向文件尾方 向移动,若为负整数表示向文件头方向移动 ,origin 表示位置指针移动的参照位置 ,它的取 值有三种可能,参见表 1-30

表 1-3 origin选项说明
在这里插入图片描述
若定位成功 status 返回值为 0,否则返回值为-1
2 ) ftell 函数

ftell 函数返回文件指针的当前位置 。其调用格式为
在这里插入图片描述
返回值为从文件开始到指针当前位置的字节数 。若返回值为-1 表示获取文件当前位置 失败}
例 1.20 下述程序说明了函数 fseek 和 ftell 的使用。
在这里插入图片描述
说明:程序第 1行建立一个矢量 x ,第 2 行以写方式打开文件 exp.dat ,第 3 行向文件中 写入矢量 x,第 4 行关闭文件 ,第 5 行以读方式打开文件 ,第 6 行把文件指针定位在 6,第 7 行读写当前文件指针指向的数据赋值给 x1 ,第8 行调用 负ell 函数报告当前文件指针位置 ,第 9 行读当前数据并赋值给 x2,第 10 行关闭文件。
程序的执行结果为
在这里插入图片描述
以上简要介绍了 MATLAB 及其基本的使用与编程方法 ,更多的使用方法 ,读者可以参 考其他专门介绍 MATLAB 如何使用的书籍 。以上介绍的内容在后面的仿真中可以满足95% 以上的需要,因此,读者应熟练掌握 。

1.3 通信系统仿真

人们认识客观世界的方式多种多样 。在计算机没有出现之前,归纳起来主要可分为理论

分析与实验验证两大类 。随着计算机的出现,利用计算机仿真来对未知的世界进行探索成为 越来越重要的手段 。举个简单的例子 ,对现代汽车而言 ,汽车的安全性相当依赖于防抱死制 动系统 (ABS) 的性能。在实际条件下 ,对 ABS 进行实车测试的代价是非常昂贵的 ,为了进 行极限情况下的测试 ,通常需要寒冷或炎热的环境 。在积雪覆盖的路面上进行 ABS 的测试, 就只能在冬季有雪的天气进行 ,这对于测试人员来说很难实现 ,而且会造成一定的人身安全 的威胁。并且,用真实汽车进行测试存在可 重复性差 、不能复现同一测试条件等缺点 。基于 上述问题 ,伴随着计算机仿真技术的发展 ,在生产过程中可利用仿真的方法对ABS 进行检验 。 通过对车辆与道路等的仿真 ,模拟道路实验的状况 ,指导 ABS 产品的设计开发 ,减少路试次 数,缩短出厂周期 ,降低产品费用与实验风险。可以说仿真的方法是ABS 开发、生产的有力 辅助工具 。因此,仿真是科学研究和工程建设中不可缺少的方法 。

1.3.1 通信仿真的概念

现代的通信系统越来越复杂 ,对这个系统做出的任何改变 ,如改变某个参数的设置或系 统结构等都可能影响整个系统的性能和稳定 。因此,在对原有的通信系统做出改进或建立 一 个新系统之前 ,通常需要对这个系统进行建模和仿真 ,通过仿真结果衡量方案的可行性 ,从 中选择最合理的系统配置和参数设置 ,然后再应用于实际系统中 。这个过程就是通信仿真 。
仿真己成为深入理解通信系统特性的有价值的工具 ,一个开发得好的仿真与在实验室实 现一个系统很类似 ,可以很方便地对要研究的系统产生直观的图形 ,如时域波形、信号频谱、 眼图等。新通信系统的设计中几乎都包括 一些信号处理新算法和新硬件技术 。在设计的前期 阶段,为了验证这些新算法和新硬件技术 ,仿真提供了极佳的环境 。
通信系统的仿真往往涉及较多的研究领域 ,包括通信原理 、数字信号处理 、概率论 、信 号检测与估计 、随机过程理论 、信号与系统理论等 。掌握通信原理是通信系 统仿真的关键 , 而数字信号处理是用于开发构成通信系统仿真模型的算法 ,现代通信系统的许多新技术都涉 及算法 ,如多天线系统中波束成形算法 、信道均衡中的算法等 。通信系统的性能指标通常以 概率形式表示 ,如比特差错概率。在许多情况下 ,仿真要处理的信号和噪声均是随机过程的 一个样本 ,而且,对于无线信道的描述也需要随机过程理论 。

1.3.2 通信仿真的基本方法

从本质上讲,仿真方法论是很难系统化的 ,但除最简单的情况外 ,所有仿真问题都要涉 及一些基本步骤 :
(1) 将给定问题映射为仿 真模型。
( 2 ) 把整个问题分解为 一组子问题 。
( 3 ) 选择合适的建模 、仿真和估计方法 ,并将其用于解决这些子 问题。
( 4 ) 综合各子问题的解决结果以 提供对整个问题的解决方案 。
对整个通信系统 的仿真是一个复杂的问题,往往需要把问题进行分层,不同层次的仿真, 其方法与目 的不同。可以把仿真分为四个层次 :系统级仿真 、子系统级仿真 、元件级仿真和 电路级仿真。越高层次的仿真 ,抽象越多,涉及的模型细节越少 :越低层次的仿真 ,越与实 际硬件相近,涉及的硬件细节和参数越多 。对于电路级仿真 ,人们更多的使用硬件原型来进

酶 ’ 噩 MATLAB B础写圃窜翩而自猩s
行验证和测试 ,在通信系统波形级仿真 ,很少涉及这一层次。通常情况下 ,人们用尽可能高 的抽象程度来仿真 ,因为,越高的抽象意味着越少的参数和越高效的仿真 。
1. 仿真建模
多数通信系统是可以模型化的 ,仿真模型和分析模型从概念上讲没有什么区别 ,但模型 复杂度不同。在分析方法中 ,通常使用简化的 、理想的模型,而在仿真中通常采用较复杂的 模型。无论是分析还是仿真 ,都需要加入对物理实体的 一定程度的近似处理使其便于表示 , 同时尽可能采用最精确的模型 。人们并不需要建立完美的模型 ,而是建立一个符合要求的模 型,即模型的近似处理能满足输出的允许误差 。
如前所述 ,仿真是要分层次的 ,相对应的 ,建模也是要分层次的 。高层模型往往很少或 不依赖于具体的物理模型 。例如 ,对于滤波器 ,一个高层模型就是滤波器的传递函数 ,而不 考虑其内部的工作方式 ;而一个低层模型则是 电路模型,包含多个部件 ,应用于基尔霍夫定 律,用不同的微分方程代表每个部件 。
一般地,可以把建模结构分为 三类:系统建模 、设备建模和随机过 程建模 。一个通信系 统,这里主要指通信链路 ,建模的最高形式描述就是用子系统框图表示出来 。系统模型是一 种拓扑结构 ,其仿真方框图与 真实系统越接近 ,整个系统的精确性就越 高。但出于计算效率 的考虑,强调尽可能采用 高程模型 。因此,通常是对简化了的模型图进行仿真 。
2. 系统性能评估
仿真的主要目的之一是进行系统性能评估。对于模ii; 直信系统,主要性能指标是输出信噪比: 而对于数字通信系统则是误比特率 也ER ) 或误码率或误帧率,信噪比 CSNR ) 也是数字通信系统 的一个重要性能指标。误码元率又称误符号率 ,是指错误接收的符号 (码元〉 数在传送总符号数 中所占的比例。误比特率又称为误信率,是指错误接收的比特数在传送比特总数中所占的比例。
符号或比特差错概率也是描述系统错误率的 一个指标 ,符号差错概率可定义为
在这里插入图片描述
因为仿真能处理的符号数目是有限的 ,故只能对符号差错概率做近似计算 ,一般使用蒙 特卡罗方法 ,即让 N 个符号通过系统 ,并计算发生差错的个数 。如果通过系统的 N 个比特中 有 Ne 个差错,则符号差错计算概率估计为
在这里插入图片描述
一般情况下 ,蒙特卡罗估计是无偏的 ,N越小 ,估计的方差就越大 :N越大,估计的方 差就越小 。当 N→∞ 时,则估计值收敛于真实值 。通常在仿真精度与仿真运行时间之间存在 一个折中问题 。
3. 通信仿真软件
对系统仿真建模完成之后 ,下一步就可以通过仿真软件将模型转换成程序并且执 行程序。 最简单的工具是采用 C 语言等编程工具直接编写仿真程序 ,这种方法的优点是效率高,缺点则 是不够灵活 ,没有一个易于实现的人机交互界面 ,不便于对仿真结果进行分析 。为此,人们已 开发了多种软件包来仿 真通信系统 ,包括波形级仿真和网络层仿真 ,并得到了广泛的应用 。比较常用的仿真软件包括 M且工AB/Sim旧ink, OPNEf , NS2 等。这些软件具有各自不同的特点, 适用于不同层次的通信仿真,例如,物理层仿真通常采用 M且LAB/Simulink ,而网络层仿真 则适用采用 OPNET 、NS2 。关于OPNET、NS2 的介绍,读者可以参考其他书籍 。
以上简单介绍了通信仿真的一些基本概念 ,应当指出的是 ,仿真与理论分析和实验验证 并不是孤立的 ,很多时候在与分析和实验二者联合使用时 ,仿真的功能才最为强大 。
本书在以后的章节中将结合 MATLAB/Sunulink ,详细介绍通信仿真的方法与技巧 。

小 结

本章简单介绍了 MATLAB 的操作与程序设计的基本方法及通信仿真的基本概念 ,通过本章的学习,读者将对MATLAB 有一个入门性的了解 ,应能编写简单的 MATLAB 程序。对 通信仿真应有初步的认识 ,为今后的学习打下基础 。第 2 章中,将介绍 Simulink 的使用。

猜你喜欢

转载自blog.csdn.net/aixdm/article/details/107715215
今日推荐