1、数字基带传输系统的仿真ver 1.02杨鸿文北京邮电大学电信工程学院无线中心 一九九八年三月四日通信原理实验讲义数字基带传输系统的仿真目录1.引言.42.MATLAB 初步.62.1 命令的执行与显示.62.2 矩阵、矢量与标量.72.2.1 矩阵.72.2.2 矢量.72.2.3 标量.72.2.4 数据类型.72.2.5 冒号“:”.82.2.6 空矢量.82.2.7 矢量的引用.82.3 基本运算.82.3.1 矢量与标量的加减乘除.82.3.2 矢量与矢量之间的加减.82.3.3 矢量与矢量之间的点乘与点除.92.3.4 募“人”与点塞.92.3.5 inf 与 eps.92.4 函数
2、.92.4.1 三角函数.92.4.2 指数类函数.102.4.3 复数类函数.102.4.4 取整函数.102.4.5 矩阵产生函数.102.4.6 数据分析函数.112.5 MATLABM 编程.122.5.1 M 文件.122.5.2 自定义函数.132.6 循环与分支.142.6.1 F O R 循环.142.6.2 IF 语句.152.6.3 WHILE 语句.152.7 二维曲线的绘制.162.7.1 函数 plot.162.7.2 命令 hold 与 elf.162.7.3 命令 grid 与命令 axis.172.7.4 函数 semilogy().172.7.5 标签.172
3、.7.6 figure 与 close.172通信原理实验讲义数字基带传输系统的仿真2.8 其它命令.182.8.1 who whos&clear.182.8.2 cd path&which.183.计算机仿真的一般方法.193.1 信号及系统在计算机中的表示.193.1.1 时域取样及频域取样取样.193.1.2 频域分析.203.2 随机信号的产生.203.2.1 高斯噪声的产生.203.2.2 随机码序列的产生.203.2.3 产生数字基带信号的一般方法.213.2.4 NR Z及R Z信号的产生.213.3 眼图.223.4 误码率.223.4.1 取样判决.223.4.2 误码率测量
4、.223.5 范例.224.上机实验要求.253通信原理实验讲义数字基带传输系统的仿真1.引言通信原理课的主要内容就是怎样可靠而有效地实现信息的传输。为此目的,该课从理论上 提出了许多可供选择的传输方法。要使这些传输方法成为现实,就需要制作出相应的发送设备 及接收设备。然后在发送端,我们把欲传送的信息变换成某种适宜的信号并将之馈入传输媒体(电缆、光缆、无线电波等)。在接收端,信号又从媒体馈入接收设备,我们再以同发端相反 的过程恢复出原来所发送的信息。根据通信原理课所学的知识,我们知道在什么样的情况下应 该选择什么样的传输方式,并能判断出噪声、信道、传输方式等因素将会怎样影响对我们来说 非常重要
5、的一些通信指标,如信噪比、误码率、发送频谱等等。要想充分地了解某种传输方式的特性,最理想的办法莫过于先把它做出来,再对其进行实 际测量。不过实际制作一套通信系统所需的周期长、代价高。有时要改变系统的某一两个参数 就可能意味着整个系统需要重做。故此对于研究设计人员来说,通过把所有的设计方案、研究 问题等都做成硬件,再对硬件进行测量从而获得系统性能的研究方法应属于不得已而为之。较 好的研究方法应该是在硬件制作以前就先设法对系统特性作尽可能充分的了解,然后再去做硬 件。某种传输方法,当我们把它做成实际系统后,它理应符合通信原理的理论对它的描述。如 果我们用通信仪表对实际系统进行实际测量的话,实测结果
6、应该同理论分析给出一致的结果。如果这两个结果不一致,一般只可能是这样两种情况:一是理论中所假设的某些模型并能不完 全正确地反映实际情况,比如通信原理课中经常假设信道是一个理想滤波器,而实际信道则有 可能是一个多径信道;二是硬件制作可能存在实现上的误差,也就是说我们制作的某一个或某 几个部件的实际性能与我们对它期望的性能之间有一些差距。换句话来说,如果我们在理论阶 段所依赖的模型是充分可信的,如果我们将要制作的硬件确实能够按我们的要求去工作,那么 我们就可以在制作硬件之前,先对将要制作的实际传输系统作充分的研究,并据此对系统设计 是否合理作出评判,如果设计是合理的我们就可以放心地去实现系统,不然
7、就需要修改现有设 计再作分析。然而在通信系统中,除非个别极简单的情况,一般我们很难用推公式这种解析的办法得到 系统的各项性能指标。比如无码间干扰时,双极性最佳基带系统的误码率公式是 马旧),但如果信道中确实存在码间干扰,那么对应的误码率公式基本上是不可能 的得到的。不过这并不意味着我们就没有别的办法,在计算机技术十分发达的今天,通信中的 许多问题都可以通过计算机仿真的办法来进行研究。计算机仿真实质上就是把硬件实验搬进了计算机,我们可以把它看成是一种软件实验。在 硬件实验系统中,我们用各种电子元器件制作出通信原理中的理论模型所规定的各个模块,再 把它们通过导线或电缆等接在一起,然后再用示波器、频
8、谱仪、误码仪等通信仪表做各种测量,然后分析测量结果。在软件实验中我们也是这样做,只不过所有通信模块及通信仪表的功能都 是用程序来实现的,通信系统的全过程在计算机机中仿真运行。虽然软件实验的不象硬件实验那样让人感到“真实”。但对于许多通信问题的研究来说的 确非常有效。与硬件实验相比,软件实验具如下一些优点:(1)软件实验具有广泛的适应性和极好的灵活性。在硬件实验中改变系统参数也许意味着 要重做硬件,而在软件实验中则只是改一两个数据,甚至只是在屏幕上按几下鼠标。4通信原理实验讲义数字基带传输系统的仿真(2)软件实验更有助于我们较为全面地研究通信系统。有许多问题,通过硬件试验来研究 可能非常困难,但
9、在软件试验中却易于解决。(3)硬件实验的精确度取决于元器件及工艺水平,软件实现的精度取决于CPU的运算速度 或者说是程序的运算量;(4)软件实验建设开发周期短,成本低。本实验是“通信原理实验”的一个组成部分。在本实验中我们使用的软件工具是MATLAB,我们期望本实验能带给你如下收获:(1)学会MATLAB软件的最基本运用。MATLAB是一种很实用的数学软件,它易学易用。MATLAB对于许多的通信仿真类 问题来说是很合适的。(2)了解计算机仿真的基本原理及方法,知道怎样通过仿真的方法去研究通信问题。(3)加深对通信原理课有关内容的理解。通信原理是通信工程专业的一门重要专业基础课。从教学实践中我们
10、注意到,此课的 某些内容对初学者来说往往不大好把握。如果你能自己动手,通过仿真的办法对这些 问题进行一些研究和观察,自然会有助于解除你的困惑。限于时间及作者的水平,本讲义必定问题很多。欢迎任何批评及建议。你的意见必定会使 下一个版本增色不少。作者的联系地址是北邮112信箱。5通信原理实验讲义数字基带传输系统的仿真2.MATLAB 初步2.1 命令的执行与显示在Windows中,用鼠标双击MATLAB图标即可启动MATLAB for Windowso MATLAB 的命令提示符为“”。MATLAB的命令也称语句或函数,在本文中名词“命令”“语句”及“函数”在许多情况下并没有多大差别。在命令行中,
11、键入命令并按回车(Enter)就可以执行命令。执行结果或其它与命令执行相 关的信息将随后显示在屏幕上。例如whyStupid question.这里,“”是命令行提示符,“why”是命令,Stupid question.”是执行结果。在MATLAB中,命令why的功能是向屏幕输出一个随机字符串。又比如y=log(0)Warning:Log of zero y=-Inf语句y=log(0)的意思是对o求自然对数,函数log的返回值被赋给变量y。matlab在运行 时除给出了运算结果为负无穷大(-Inf)外,还显示出了对零求对数的告警。在命令的末尾加上分号,表示不显示函数的返回值或语句的运算结果。
12、例如y=log(0);Warning:Log of zero只显示告警信息而不显示运行结果。此时y仍然被赋值为-Inf。一行中可以有多条命令,命令与命令之间应用逗号或分号隔开。以逗号结尾的 命令显示结果,以分号结尾的命令不显示结果。例如y=log(0);b=1/0,a=atan(b)*1 80/pi;aWarning:Log of zeroWarning:Divide by zero b=Infa=90这里,y=log(0);”只显示告警信息而不显示运行结果。“b=1/0,”既显示告警信息(被零 除:Divide by zero),也显示运行结果(无穷大:Inf)。语句a=atan(b)*1
13、80/pi;”被 运行但结果未显示。在MATLAB中atari是反正切函数,pi是圆周率。语句“a”的作用是显 示a的值:。=90。如果语句有运算结果但此结果未被赋值,那么MATLAB自动将此结果赋值给变量“ans”,它是英语单词answer的前三个字母。例如:0.5*erfc(sqrt(4.77)ans=0.00106通信原理实验讲义数字基带传输系统的仿真此处,MATLAB把ge次(JS万)的运算结果赋值给ans。erfc是互补误差函数,sqrt是求 平方根。有些命令除了在命令行状态下有显示外,还会激活其它图形窗口。如命令intro、demo 等。intro是MATLAB简介,demo是MA
14、TLAB的演示程序。这两个命令都是用MATLAB 编写而成的。在MATLAB中标识符的大小写是有区别的。2.2 矩阵、矢量与标量2.2.1 矩阵MATLAB的基本运算对象是矩阵。方括弧“口”用来定义矩阵。逗号或空格用来分隔 一行中的不同元素,分号“;”用来分隔不同的行。例如a=1,2,3;4,5,6;7,8,9a=1 2 34 5 67 8 9是一个3乘3的矩阵。2.2.2 矢量只有一行或一列的矩阵就是矢量,我们分别称其为行矢量及列矢量。例如b=1,4,8,2b=1 4 8 2是一个行矢量。而c=1;4;8;2c=1482是一个列矢量。考虑到本课的具体需要,今后我们主要只考虑行矢量。2.2.3
15、 标量只有一个元素的矢量或矩阵就是标量。例如d=1或d=1把d定义为一个值为1标量。2.2.4 数据类型实数MATLAB不需要对实数作类型说明,所有的数都按双精度浮点方式保存。对很大及很小的 数可采用科学记数法:例如1.3e-18表示1.3x10-18。字符串7通信原理实验讲义 数字基带传输系统的仿真MATLAB也支持字符串变量。字符串由一对单引号界定。字符串在MATLAB中被看作是 一个矢量,每个字符构成矢量的元素。例如str=hello等价于str=h,e,T,T,o。复数在MATLAB中如果标识符i或j没有被定义过,那么一个复数可以简单地用两个实数a,b 组成:d=a+j*b或=2+1表
16、示复数。许多人编程时习惯用i、j作循环变量,如果你的程序 涉及复数运算的话,最好避免使用它们。2.2.5 冒号“:设a1,a2,step是三个实数标量。则a1:step:a2表示一组实数,其中第一个是a1,第 二个是a1+step,彳衣此类推,最后一个数小于等于a2。step=1时可省略成a1:a2。例如矢 量1:3就是矢量1,2,3,而矢量3.3:-1.25:0等于矢量3.3,2.05,0.8。2.2.6 空矢量没有元素的矢量称空矢量。用口来表示。例如a=3:-2:5a=的结果是一个空矢量。2.2.7 矢量的引用若A是一个矢量,A(k)是A的第k个元素,其中k的最小值为1,最大值为lengt
17、h(A)o 函数length(X)的返回值是矢量X的长度。若A是一个行矢量,B=A(2:7)是由A的第2至第7个元素组成的行矢量。C=A,B也是 一个矢量,C的前length(A)元素正好是矢量A,后length(B)个元素正好是矢量B。若A是一个矢量,B=A(1:2:length(A)是所有A的奇序数元素。例如,A=1:100,则矢量A(1:2:100)的元素是1到100之间的所有奇数。矢量A(30:30:100)等价于 30,60,90。矢量A(1,9,67)等价于A,A(9),A(67)。2.3 基本运算2.3.1 矢量与标量的加减乘除矢量加以(+)、减以(一)、乘以(*)或除以(/)一
18、个标量时,其结果是该矢量的每 一个元素加、减、乘、除以同一标量。例如A=1:5+1的结果是2,3,4,5,6,c=3,1,1)*3+j 的结果是复数矢量9+j,3+j,3+j,3+j。标量加以(+)、减以(一)或乘以(*)矢量的结果与矢量加以(+)、减以(一)或乘 以(*)标量的结果相同,即矢量与标量的加、减、乘(+、一、*)运算满足交换律。但请注 意:标量除以(/)矢量(a/A)是非法的。2.3.2 矢量与矢量之间的加减两个相同长度的矢量相加或相减是其对应的元素相加或相减。例如:a=1:3*5-6:6:20/3a=3 6 98通信原理实验讲义 数字基带传输系统的仿真2.3.3 矢量与矢量之间
19、的点乘与点除“/”若A与B是两个长度相同的矢量,则A.*B是A与B的对应元素相乘,A./B是A与B 的对应元素相除。例如。=1:3.*2,5,5的结果是2,10,15 D=4,10,2./2,2,1的结果 是2,5,2。2.3.4 累“2,与点累“人”对于标量a、b,a b是以a为底,b为指数的基运算。例如2A3=8;对于标量x及矢量A,Ax是对矢量A的每一个元素求以x为指数的幕运算。例如:-1,4,9.A0.5 的结果是j,2,3;对于标量x及矢量A,xdA是一个矢量,它的每一个元素是以x为底,以A的对应元素 为指数的幕。例如10.”-2:2的结果是0.01,0.1,1,1 0,1 00。对
20、于两个相同长度的矢量A、B,AJB的结果是一个与A同长度的矢量。其元素是以A 的对应元素为底,以B的对应元素为指数的幕。2.3.5 inf 与 eps一个标量除以零得inf oinf自身是一个标量,它加减乘除以任何实标量仍为inf。但inf/inf,inf-inf及mf*0的结果是NaN(Not a Number),它表示结果不确定。标量eps相当于无穷小,它反映了运算的精度。对于MATLAB for Windows,eps的初 始值为2.2204e-1 6。eps的值可任意设置,例如可设eps=1 e-20或其它值。有时%了避免 程序运行中除以零引起麻烦,我们可给除数加上eps,例如x=-2
21、:2*pi;y=sin(x)./xWarning:Divide by zeroy=1.0e-016*-0.3898 0.3898 NaN 0.3898-0.3898此处的显示表示 y 的值是 1.0e-16*-0.3898,0.3898,NaN,0.3898,03898。由于 x(3)是零,所以sin(x(3)/x发出告警,并给出结果为NaN。将x加上eps,前面的例子横血 为x=-2:2*pi+eps;y=sin(x)./xy=0.0000 0.0000 1.0000 0.0000 0.00002.4 函数MATLAB中所有的函数或命令都可借助help菜单或在命令行中键入help或help主
22、题名得到帮助。结合本课的需要,我们在这里介绍一些常用函数。2.4.1 三角函数三角函数包括正弦sin、余弦cos、正切tan、反正切atari等。例如:9通信原理实验讲义数字基带传输系统的仿真X=0:pi/6:pi;Y=sin(X)Y=0 0.5000 0.8660 1.0000 0.8660 0.5000 0.0000本例中X=0,7T o cos(X)是对X的每一个元素求余弦。_ 6 3 2 3 6 _2.4.2 指数类函数指数类函数包括e的指数exp、自然对数log、常用对数Iog10、平方根sqrt等。在 MATLAB中口J对负数求对数或求平方根。例如 log(-l:+2)Warnin
23、g:Log of zeroans=0+3.1416i-Inf 0 0.6931这里In(-1)=jjr,In 0=-oo o MATLAB在运行至求log(0)时给出了警告但并不中断运行。2.4.3 复数类函数复数类函数包括求模abs求角度angle、求共加conj求实部real、求虚部imag等。2.4.4 取整函数取整函数包括零方向取整fix、负无穷方向取整floor、正无穷方向取整ceil、四舍五入 round、取符号sign等,例如x=-1:0.5:1*pi;.x;fix(x);floor(x);ceil(x);round(x);sign(x)ans=-3.1416-1.570801.
24、57083.1416-3.0000-1.000001.00003.0000-4.0000-2.000001.00003.0000-3.0000-1.000002.00004.0000-3.0000-2.000002.00003.0000-1.0000-1.000001.00001.0000在MATLAB中,键入省略号(三个或三个以上的小数点)表示下一行是本行的继续。2.4.5 矩阵产生函数全零矩阵zeros及全1矩阵ones260$(5171)产生一个尺寸为*根,元素全为零的矩阵。116$(5171)产生一个尺寸为nxm,元素全为1的矩阵。若n或m不是整数,则按取整后的结果算。若n或m中(取整
25、后)有一个 为0或负值则返回个空矩阵。zeros(N)产生一个N维全零方阵。ones(N)产生一个N维全1方阵。zeros(size(A)产生一个尺寸与A相同的全零矩阵。ones(size(A)产生一个尺寸与A相 同的全1矩阵。这里函数size(a)返回一个行矢量n,m,其中n是a的行数,m是a的列数。均匀随机数rand及正态随机数randnrand(n,m)产生一个尺寸为x根的矩阵,其元素按均匀分布随机取值于区间0,1。randn(n,m)产生一个尺寸为X相的矩阵,其元素服从标准正态分布(均值为零,方差为1)。10通信原理实验讲义数字基带传输系统的仿真randn(size(a)产生一个尺寸与
26、a相同的正态分布随机矩阵。rand(size(a)产生一个尺 寸与a相同而均匀分而随机矩阵。例如:a=sign(randn(1,8000);b=(a+1)/2;c=b+0.1*randn(size(b);b包含8000个取值1、0等概的随机二进制数。c是b加上了方差为0.1的高斯干扰。不带参数地引用rand或randn返回一个标量的随机数。(3)linspace函数linspace(a,b,N)产生一个N维矢量,N个元素均匀分隔区间a,b,第一个元素是 a,最后一个元素是b。2.4.6数据分析函数数据分析函数包括:最大值max、最小值min、均值mean、标准差std、升序排序sort、求和s
27、um等。例如:a=randn(1,8000);L=length(a)L=8000y=max(a),min(a),mean(a),std(a),sum(a)/L y=4.0633-3.6618-0.0017 1.0037-0.0017b=a(1:20)b=Columns 1 through 71.0682-0.1050-1.7675-1.0252 0.8211 1.7200-0.6543Columns 8 through 91.0178-1.4090当MATLAB不能把一个行矢量在屏幕的一行上显示时,它把这个矢量折成若干行显示。并在 每行前说明对应的列序号。如果max(a)函数中a不是矢量而是矩
28、阵,则max(a)对a的各列求最大值。例如B=rand(5),max(B)B=其它函数如min、mean、std sort sum也是如此,例如:0.16650.90470.49400.50070.46440.48650.50450.26610.38410.94100.89770.51630.09070.27710.05010.90920.31900.94780.91380.76150.06060.98660.07370.52970.7702ans=0.90920.98660.94780.91380.9410B=rand(5),sort(B),sum(B)B=0.82780.62950.233
29、20.84600.53730.12540.73620.30630.41210.46790.01590.72540.35100.84150.28720.68850.99950.51330.26930.178311通信原理实验讲义数字基带传输系统的仿真0.86820.88860.59110.41540.1537ans=0.01590.62950.23320.26930.15370.12540.72540.30630.41210.17830.68850.73620.35100.41540.28720.82780.88860.51330.84150.46790.86820.99950.59110.84
30、600.5373ans=2.52583.97921.99492.78431.6245这里,sort(B)对B的各列排序,sum(B)对B的各列求和。2.5 MATLAB 编程2.5.1 M文件用文本编辑器如notepad.exe把MATLAB的命令及语句编辑成一个文本文件,并把文 件的扩展名定为.m,这样的文件叫M文件。在MATLAB命令行中键入M文件的文件名(不 包括小数点及扩展名“.m”),即可一次性地执行该文件中的所有命令或语句。这一点很像 DO S中的批处理文件(.BAT),只是MATLAB在执行M文件之前要先进行一些编译处理。下面是M文件的一个例子:%M文件示例%百分号之后是注释a=
31、randn(1,8000);%分号结尾时不显示结果 L=length(a),b=sin(a);c=L+1%同一行中可写多条语句%语句间应用逗号或分号隔开 d=a+j*pi;%d是一个复矢量=2%重新定义jd2=a+j*pi;%d2 是实矢量d1=a+pi*i;%d1 是复矢量ul=sin(dl);ul(l:3)%复数的正弦是复数 u2=sin(d2);u2(l:3),%实数的正弦是实数 Lmax(u2),min(u2)J把这段程序存为文件test.m,在MATLAB命令行状态下,执行test:test L=8000 c=8001 j=2 ans=7.6385+8.6868i 5.8773+9.
32、9543i-1.9730+11.3802ians=0.6590 0.5070-0.1702ans=1.0000-1.0000M文件中可以包括所有合法的MATLAB命令或语句,也可以包括你已经编好的其它M文 件名。12通信原理实验讲义数字基带传输系统的仿真2.5.2 自定义函数你也可以编制自己的函数。一个函数对应一个M文件,函数名就是M文件的文件名,自 定义函数的M文件第一行必须是如下格式:function 返回值表=函数名(输入变量表)例如:function A,ph=myfun(x)%函数示例,函数名为myfun,文件全名必须是myfun.m%本函数求复矢量x的模与相角%A,ph=myfun
33、(x)%x为输入的复矢量;A,ph是函数myfun的返回值%执行help myfun可看到以上注释,但不包括本行及%以后的注释A=abs(x);ph=angle(x)end%定义函数的M文件应以语句end结尾引用函数myfun的例子是:clear i;c=randn(1,300)+i*randn(size(a);Am=myfun(c);%只引用第一个返回值时可照此做Amp,Sita=myfun(c);%要引用两个返回值时须照此做函数可以无输入或输出参量,例如function a=newfun%函数示例,文件全名是newfun.m%a=newfun%本例无输入值,但有输出str=真棒真倒霉;i=
34、round(rand)+1;a=str(i,:);end%产生一个取值1,2的随机数%取矩阵str第i行上的所有元素%函数结束在函数内部定义的变量都是本地变量。本地变量同外部变量(调用函数的外部过程所使用 的变量)使用不同的内存区,因此即使它们的标识符相同,也不会发生冲突。MATLAB的函数 中也可以定义全局变量,格式是global a b c此句声明a、b、c是全局变量。global声明必须在引用之前。13通信原理实验讲义 数字基带传输系统的仿真2.6 循环与分支2.6.1 F O R 循环MATLAB中,F O R循环的格式是:for循环变量=循环值表,循环体,end例如:clear ja
35、=1:4;for i=1:3,a(i)=i+j;end,a a=1.000+1.000i 2.000+1.000i 3.000+1.000i 4.000本例中,clear j是MATLAB命令,其功能是清除对变量j以前的定义以使之只表示虚数运算 符j=i是循环变量。循环值表是1:3也即1,2,3。循环体只有一句a6=i+j;,最后的 a是为了显示结果。上面的循环等价于a(1:3)=1:3+j。循环体可以是多条语句,例如for i=1:-0.1:0d1(i)=sin(l);d2(i)=cos(i);d3(i)=tan(i);end此例也可这样实现i=1:-0.1:0;d1=sin(i);d2=c
36、os(i);d3=tan(i);由于MATLAB的矩阵运算特性,许多循环功能都可以用矢量运算代替,这样可提高编程效率,一般也能提高运行速度。循环值表也可以是矢量或矩阵。例如:i=0;for x=1,4,16,20,-3i=i+1;y(i)=xA2;end此例等价于x=1,4,16,20,-3;y=x.A2;%对矢量的元素平方结果是y=1 16 256 400 9。如果循环值表是矩阵,则循环变量是一个列矢量,循环次数等 于循环值表的列数:i-0;B=randn(5);%5乘5的正态随机数矩阵for A=B%循环变量A是B的列i=i+1;B_max(i)=max(A);%求矢量A的最大值14通信原
37、理实验讲义数字基带传输系统的仿真B_min(i)=min(A);%求矢量A的最小值end%循环结束这段程序等价于B=randn(5);B_max=max(B);B_min=min(B);2.6.2 IF 语句IF语句是条件执行语句,其格式为:if条件变量,条件执行体,end如果条件变量的实部的所有元素都不为零,则条件执行体被执行,否则跳过此句。也就是 说,条件变量可以是数、矢量或矩阵,也允许是复数类型。例如:i=round(rand);a=i=O;if i,a=i=1;end%若1不为零则a是字符串i=0,否则a的内容是字符串i=1条件变量通常是一个逻辑关系表达式:表达式逻辑关系表达式逻辑关系
38、包括:等于“=、小于“”、小于等于“=”及不等于“=o例如:i=round(rand);a=O;if i=1,a=1;endIF语句还可以和elseif及else 一起用:i=sign(randn);if i=-1%如果i=-1,则逻辑关系表达式的值为“真”(即1)%否则为“假”(即0)a=-1;elseif i=+1a=+1;elsea奇怪Ienda2.6.3 WHILE 语句WHILE语句是条件循环语句,其格式为:while条件变量,条件执行体,end如果条件变量的实部的所有元素都不为零,则条件执行体被执行,否则跳过此句。条件变 量可以是数、矢量或矩阵,也可以是复数类型的。例如j=0;wh
39、ile i=88815通信原理实验讲义数字基带传输系统的仿真i=round(rand 1 000)j=j+1end2.7 二维曲线的绘制MATLAB提供了丰富的绘图功能。结合本课的需要,我们在此简要介绍一下二维曲线的绘 制方法。如想进一步了解MATLAB绘图方面的功能,请执行help graphics、help plotxy、help plotxyz、help color 或者执行 MATLAB 的演示程序 demo。2.7.1 函数 plot若X、Y是两个相同长度的矢量,函数plot(X,Y)将激活一个图形窗口,并画出一条以X 为横坐标,以Y为纵坐标的曲线。例如:t=0:0.01:2*pi;
40、plot(t,sin(t)绘出函数sin)在区间02刈上的曲线。使用plot(X,Y)函数时若省略参量X,MATLAB将把Y中元素的顺序号作为横坐标的坐 标值,也在是说此时横坐标矢量是X=1:length(Y)。使用plot时也可加入另一个参量S:plot(X,Y,S),S用来规定绘图时使用的颜色及绘制方式。可以选择不同的线型如实线、虚线、点划线、波折线,也可以不划线而用不同的标记标出点的位置。MATLAB规定S是长为1到3 个字符的字符串,构成S的字符有两部分,第一部分是颜色(一个字符),第二部分是绘制方 式(一到两个字符),它们的定义如下:yyellowmmagentaccyanrredg
41、greenbbluewwhitekblack点标记0 圆圈标记X 叉号标记+加号标记星号标记线线划 实虚点波折线MATLAB for Windows所绘的图可通过剪贴板直接复制到Microsoft Word或其它应用程序 中。2.7.2 命令 hold 与 elf在缺省状态下,执行plot时MATLAB先清除图形窗 口再行绘图。执行hold on后再执行plot n寸,MATLAB 将不清除图形窗口。这样我们就可以在同一图形窗口内画 多条曲线。例如:t=0:0.01:4*pi;hold onplot(t,sin(t+pi/3),r-)plot(t,cos(t-pi/3),g:)plot(t,s
42、in(2*t),y-)这一段程序在同一图形窗口中绘出了三条曲线,第一条红 图2-1 plot函数示例16通信原理实验讲义 数字基带传输系统的仿真色实线是sinQ+/3),第二条绿色虚线是cos(一乃/3),第三条黄色波折线是sin 2/。执行hold off将使图形窗口变回原来的状态。单独执行hold而不带参数on或off,将 反转图形窗口的hold状态。命令elf则是清除当前的图形窗口,它不改变hold的状态。2.7.3 命令grid与命令axis命令grid on给图形窗口打上格线,而grid off则是取消图形窗口中的格线。单独执行 grid将反转格线的状态(有或无).函数axis(a)
43、设定X轴与Y轴的坐标范围。通常a是一个包含四个元素的行矢量,例如:a=Xmin,Xmax,Ymin,Ymax,其元素分别代表X轴及Y轴的最大值与最小值。例:t=0:0.01:4*pi;hold onplot(t,sin(t),r-)plot(t,sin(2*t),b:)grid onaxis(0,4,-1,1,+1.1)2.7.4 函数 semilogy。函数semilogy。与plot。完全一样,只是Y轴是对数坐标。类似还有semilogx()、iogiog()等。2.7.5 标签xlable(str)给X轴加上一个以字符串str为内容的 标签。ylable(str)则给Y轴加标签。titl
44、e(str)则是给整 个图加上一个标题。例如:Eb_No_dB=0:0,5:15;%Eb/No in dBEb_No=10.A(Eb_No_dB/10);Pe=0.5*erfc(sqrt(Eb_No);semilogy(Eb_No_dB,Pe);axis(0,10,1e-9,1)xlabel(Eb/No in dB)ylabel(bit error probability)title(2PSK理论误比特率曲线)ololo.lo-/ylo/flo/w-9 Al=seqojd52PSK理i仑误四冲曲线2.7.6 figure 与 close如果你想在同一个程序中开出多个图形窗口,可以 使用figu
45、re命令。单独执行figure后,MATLAB将 创建一个新的图形窗口,并以此作为当前图形窗口。执 行f igure(N)将使第N个图形窗口成为当前图形窗口。如果第N个图形窗口不存在,贝Nigure(N)将创建一个新窗口。新窗口的编号不一定是N,而 是按实际已有的窗口序号顺序排列。命令close关闭当前图形窗口。close(N)关闭第N个图形窗口。close all关闭所有图 形窗口。17通信原理实验讲义数字基带传输系统的仿真2.8 其它命令2.8.1 who、whos R clear命令who列出所有当前已定义的变量。命令whos列出所有当前已定义变量的有关信息,如矩阵尺寸、元素数、字节数、
46、是否为复数类型等。命令clear清除所有变量,命令clear a b清除变量a和b。2.8.2 cd、path 及which1)命令cd显示当前目录。命令cd dirname使当前目录转到名为dirname的目录。cd.使当前目录转到父目录。2)path显示MATLAB的搜寻路径。MATLAB寻找命令或M文件时,先查找当前目录,如果找不到,则按path设定的搜寻路径去找。P=path返回一个字符串P,P的内容是搜寻路径。path(P)把字符串P所描述的路径作为当前的搜寻路径。path(path,P)把P追加到 当前搜寻路径中,P在最后。path(P,path)把P加入到当前搜寻路径中,P在最前
47、。3)which函数或命令名显示指定的命令或函数所在位置。例如:which maxmax is a built-in function.表明函数max是一个内置的函数。而which meanmatlabtoolboxmatlabdatafunmean.m表明函数mean是由M文件mean.m定义的,该文件的存放路径的位置。18通信原理实验讲义数字基带传输系统的仿真3.计算机仿真的一般方法3.1 信号及系统在计算机中的表示从数学的角度来看,信息从一地传送到另一地的整个过程或者其各个环节不外乎是一些码 或信号的变换过程。例如信源压缩编码、纠错编码、AMI编码、扰码等属于码层次上的变换,而基带成形、
48、滤波、调制等则是信号层次上的。码的变换是易于用软件来仿真的。要仿真信号 的变换,必须解决信号与信号系统在软件中表示的问题。3.1.1 时域取样及频域取样取样一般来说,任意信号5。)是定义在时间区间(-8,+8)上的连续函数,但所有计算机的CPU 都只能按指令周期离散运行,同时计算机也不能处理(-8,+a)这样一个时间段。为此我们把 sQ)按区间-1截短为与。),再对Q)按时间间隔4均匀取样得到6个样值。仿真 时我们用这个样值集合来表示信号s。)。显然小反映了仿真系统对信号波形的分辨率,4越 小则仿真的精确度越高。据通信原理所学,信号被取样以后的频谱是频率的周期函数,其重复 周期是如果信号的最高
49、频率为方,那么必须有了 W 圭才能保证不发生混叠失真。我 们称氏=J_为仿真系统的系统带宽。如果我们的仿真程序中设定的采样间隔是A/,那么我 2A?们不能用此仿真程序来研究带宽大于Bs的信号或系统。止匕外,信号s的频谱5(/)通常来说也是定义在频率区间(-8,+8)上的连续函数,所以 仿真频域特性时,我们也必须把S(/)截短并取样。考虑到系统带宽是反,我们把频域的截短 区间设计为-及,8,然后再按间隔a均匀取样得到箸个样值。k反映了仿真系统在频 域上的分辨率。频域离散的信号对应到时域是一个周期信号,其周期为类似前面的分析,国如果我们的仿真程序中设定的采样间隔是V,那么我们就不能仿真截短时间超过
50、专的信号。考虑到时域截短时间为T,我们把频域的取样间隔设计为&这样一来,时域的总取样 点数及频域的总取样点数都相等,为N=一。要提高仿真的精度,就必须降低时域取样间 隔加及频域取样间隔纣,也就是要加大总取样点数N。这说明仿真的精度与仿真系统的运算 量直接有关。19通信原理实验讲义数字基带传输系统的仿真为了处理上的方便,我们今后规定采样点数N为2的整幕。举例来说,假如设计要求的系 统带宽为1MHz,频域最小分辨率为lO KHzo那么据此可求得双=也=200,取N=256。对 f应的其它参数为 R=爷=7.8KHz,T=-=12SjUs,Auq=。5体。3.1.2 频域分析限于篇幅,我们将不向大家