用MATLAB语言编程设计说明.docx
《用MATLAB语言编程设计说明.docx》由会员分享,可在线阅读,更多相关《用MATLAB语言编程设计说明.docx(21页珍藏版)》请在冰豆网上搜索。
![用MATLAB语言编程设计说明.docx](https://file1.bdocx.com/fileroot1/2022-11/25/1421bcc3-5665-4575-8411-4d7a340d0045/1421bcc3-5665-4575-8411-4d7a340d00451.gif)
用MATLAB语言编程设计说明
用MATLA语言编程设计
通信仿真教学软件
【摘要】
本文介绍了一个用MATLA语言编写的通信仿真教学软件。
论述了通信的基础理论和通信仿真教学软件的设计思想以及实现的方法,并谈到了计算机辅助教学的必要性。
1.刖言
《通信原理》是通信类专业的一门极为重要的基础理论课程,主要研究信息传递的一系列变换的机理和属性,它包括:
信号分析、调制解调、同步、检测过滤、纠错编码、信号特性等理论方面的容,其容抽象难懂促使我们应用MATLAB
程序语言设计制作了这套通信仿真CAI课件。
意在利用计算机一类智能设备来实现该课程的机辅教学,帮助学生理解相关的知识难点。
2.通信仿真教学软件的设计思想
在《通信原理》中,常常借助于各种信号的时域波形图以及频谱图来说明系统的原理,指出相应的电路设计应达到的目标。
欲将寄载消息的信号保质保量的传送给接收者,就必须对它们进行加工处理,对相应的部件进行分析和研究,而这种研讨过程中会用到大量的数学计算。
由于“MATLA”是MatrixLaboratory(矩阵实验室)的缩写,顾名思义,它
是以矩阵,数组为基本处理对象,矩阵的维数不需要预先指定,且随时可变,具
有丰富的矩阵运算功能。
因此,选用MATLA作为开发环境无疑能够减轻系统分
析与设计的编写负担,另外因MATLA是—个开放性的系统,具有模块化的结构,任何用户自己已定义的函数都可作为MATLABS数进行调用。
仿真功能
我们采用了MATLA语言编程,以Windows和MATLA为软件运行环境。
将
通信原理中的知识点用MATLA来实现。
通过灵活的菜单和界面设计使某些参数可调。
同时运用Simulink软件包,使波形在仿真的同时显示系统。
更加有利于在课堂上使用。
3.理论基础
3.1有关通信基础理论方面
通信中的常见技术如调制解调,多址与复用,同步,模拟信号数字化,噪声中的信号检测,差错控制等在通信原理这门课程中都要有所涉及,因此,必须将与这些技术相关的专业基础理论知识融汇与本课件的编程设计工作中,便使我们的CAI软件真正起到辅助教学的作用。
3.2有关MATLA的文件编写方面
3.2.1数组运算
数组加减运算
,既表示矩阵运算又表示数组运算
数组乘除运算
在MATLA中,符号.*表示数组乘法运算,若a,b具有相同的维数,则a.*b为a和b对应元素的简单乘积,符号或./表示数组除法的运算,而且这两种都是对应元素相除,这与矩阵的左除或右除的含义不同。
关系运算:
MATLAB中提供了6个关系运算符,用于相同维数两个矩阵进行比较。
这
6个运算符为:
<小于<=小于等于
>大于>=大于等于
==等于〜=不等于
3.2.2绘图
连续形式:
x,y均为向量,这时以向量x作为x轴,向量y作为y轴,绘
制典型的二维曲线,调用格式为plot(x,y)3.2.3菜单
对菜单的调用如下:
菜单项句柄=uimenu(窗口句柄,属性1,属性值1,...);子菜单项句柄=uimenu(菜单项句柄,属性1,属性值1,...);
其功能是在窗口句柄所代表的窗口下建立一个菜单项(由菜单项句柄代表),并在该菜单项下建立一个子菜单项(由子菜单项句柄代表)。
其中uimenu()函数的属性又很多种,但最基本的必须有一下两条:
丄abel属性:
它为菜单提示名称;
MATLAB
.Callback属性:
它定义了回调函数,当该菜单项被选中之后,将自动调用此回调函数作为相应菜单项的响应。
设计出来的本软件的主界面菜单如图1所示。
图1主菜单界面
3.2.4控制流语句
for循环语句
它允许一条语句或一组语句被重复执行预先确定的次数。
它的格式如下
forvariable=StartVal:
StepVal:
EndValstatements
end
while循环语句
它可以使一条或一组语句能够在一定条件下反复执行多次。
格式如下
whileexpression
statements
end
if语句
是一种简单的条件转移语句。
其格式为:
ifexpression
Statements
end
暂停语句:
pause功能是暂时停止程序的执行,直到用户按任意键之后,才继续执行程序;
回显控制
—/off控制是否在屏幕上回显MATLA正在执行的语句,系统所默认的状态是不回显。
3.2.5M文件编程
1•函数定义行
函数文件的第一行要求用关键字“function”把该文件定义为函数,并指定函数的名字必须与存盘的文件名相同。
同时这一语句也定义了输入与输出参数。
2.函数体
函数体是函数的主体部分,它完成了函数的主要功能。
函数体中有流程控制、定义变量、数值运算、符号运算、交互输入输出等功能,也可以调用其它函数和脚本
3.函数说明
函数说明是对本函数完成功能的简要说明,通常当某个函数过于复杂时,我们给出函数说明以方便使用。
4.注释
注释是夹杂在函数体中的语句,它以%开头,出现%的行,%后的语句均为注释性的。
3.3有关SIMULINK方面
Simulink是一个用来对动态系统进行建模,仿真,分析的软件包。
他支持线性和非线性系统,连续和时间模型,或者是两者的混合,系统还可以是多采样频率的,比如系统的不同部分拥有不同的采样频率。
对于建模,Simulink提供了一个图形化的用户界面,可以用鼠标点击和拖拉模块的图标建模。
图形界面可以将系统模型和图形同时展示出来。
这是以前需
要用编程语言明确的用公式表达微分方程的仿真软件包所远远不能相比的。
Simulink包括一个复杂的由接收器,信号源,线性和非线性组件以及连接件组成的模块库,当然也可以定制或者创建用户自己的模块。
所有模型都是分级的,因此可以采取自上而下或者自下而上的方法来建立模型。
可以在最高层面上查看一个系统,然后通过双击系统中的各个模块进入到系统的低一级层面以查看到模型的更多的细节。
这一方法提供了一个了解模型是如
何组成以及它的的各个部分是如何相互联系的方法。
定义完一个模块后,就可通过Simulink的菜单或者在MATLAB勺命令窗口输入命令对他仿真。
菜单对于交互式工作非常方便,而命令行方式对于处理成批的仿真比较应用。
使用Scopes或者其他的显示模块,可以在运行仿真时观察到仿真的结果。
另外,可以在仿真时改变参数并且立即就可以看到有什么变化。
仿真
的结果可以放在MATLA(workspace)的工作空间中进一步的处理或者可视化。
4.通信仿真的实现
4.1数字基带信号
数字通信中一般以单极性非归零码,单极性归零码型,双极性非归零码,双极性归零码,数字双相码,条件双相码和密勒码几种码来表示二元信息序列。
由于数字基带信号是数字信息的电脉冲表示,不同形式的数字基带信号具有不同的频谱结构,合理设计数字基带信号可将数字信息变换为适合于给定信道传输的形式,这种变换又称为数字信息的码型转换。
譬如单极性非归零码是用高电平表示二元信息中的‘1'用低电平表示二元信息中的‘0',电平在整个码元的时间里保持不变。
其MATLAB^要源程序如下:
grid=300
forj=1:
grid,%该码元对应的点值取1
y((i-1)*grid+j)=1;
end
y((i-1)*grid+j)=0;
end;end;end
y=[y,x(i)];%为了画图,将y序列加上最后一位
调用后效果图如图2所示,由该图可见,主要将序列对应的单极性非归零波形
形象的展示了出来
锂廻聖里柚蝕军覺册弓抚爭咼咫尉口帚码斷卫梅咼余件电框囲蟹总珂退出
1001J0D00101
图2单极性非归零码的波形演示
再如双极性归零码,这是一种占空比小于100%的双极性数字基带信号。
因
此它具有三个电平,严格说来是一种伪三元码(电平1,0,—1)。
双极性归零
又如密勒码,它是数字双相码的变形。
它采用码元中央时刻的跳变来表示信息1,即前半时间的电平同前一码元后半时间的电平相同,中央跳变。
遇到信息
0作如下处理:
首先对0的码元在整个码元的时间都保持同一电平值,其次若此
0前一信息是1,则码元的电平同前面信息1的码元后半时间电平相同,若前一信息为0,则与前面码元的电平相反。
为此,我们用MATLAB®写了下述程序段
来加以演示:
grid=100;
t=0:
1/grid:
length(x);
定义时间序列
i=1;
if(x(i)==1)
forj=1:
grid/2
由于第一码兀的编码不定,我们直接给出输入为1,则
y(grid/2*(2*i-2)+j)=0;
y(grid/2*(2*i-1)+j)=1;
end
%前半时间为0
%后半时间为1
else
forj=1:
grid
%反之,输入为0
y(grid*(i-1)+j)=0;
end
%所有时间为0
end
fori=2:
length(x)
if(x(i)==1)
forj=1:
grid/2
%开始进行密勒编码
%输入信息为1
y(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)
forj=1:
grid
%反之,若前一信息为1,输入信息0
y(grid*(i-1)+j)=y(grid/2*(2*i-3)+grid/4);
%所有时间与前一码元后半时间值相同
end
forj=1:
gridy(grid*(i-1)+j)=1-y(grid/2*(2*i-3)+grid/4);
所有时间与前一码元后半时间值相反
end;end;end;end
调用后的效果图见图3
图3密勒码
该图清楚的展示了信息序列及其相应的密勒码的相应波形
4.2幅度调制
幅度调制(又称线性调制),这是一种让正弦载波的幅度随着调制信号而改变的调制方案。
这一类调制方案包括DSR抑制载波的双边带幅度调制),A(常规双边带调幅),SSB调制(单边带幅度调制)以及VSB调制(残留边带幅度调制)。
在DSB调制中,调制信号和已调载波振幅间的函数关系非常简单,而在SSB调制或VSB调制中要复杂些。
线性调制器的一般模型如图所示。
它由模拟乘法器和冲激响应为h(t)的带
通滤波器组成。
m(t)-
Smt
X
1・
h(t)
COSWet
图4线性调制器的一般模型
调幅信号的解调可有两种,相干解调和非相干解调。
图5和图6分别给出了
DSB系统及相干解调的性能和AM系统及非相干解调的性能演示。
在此,我们用了理想的限带白噪声来代替高斯白噪声通过接收机前置带通滤波器之后的噪声。
由此可以看出,运用Simulink进行仿真,不仅能够向学生展示仿真出来的图形,而且,它又同时把相应的原理图也展现在了大家的面前,这样更有利于课堂教学。
图5DSB系统及相干解调性能演示
421DSB调希9
DSB信号的时域表达式为:
u(t)=Acm(t)cos(2nfct)(4.2.1)
其中
c(t)=Accos(2nfct)
为载波,m(t)是被调信号。
对式(421)进行傅立叶变换,而DSB信号的频谱表达式为:
图6AM系统及非相干解调性演示
U(f)=学M(f-fc)+竽M(f+fc)
由此可见,这种调制方式使得模拟基带信号的频谱搬移到载频fc附近,且形
成了上下两个边带。
用Simulink中的一些模块进行适当的处理,就可得到对应的DSB言号波形。
如图5所示
4.2.2调幅系统的抗噪声性能
然而,任何一种通信系统都难免有加性噪声和乘性干扰,大部分服从高斯分
布的加性噪声对调幅波会产生什么影响?
接收端输入信噪比的大小对相干与非相干解调的性能有何影响?
这些都需要用相应的波形来加以演示说明,为此,我
们利用Simulink中的几个模块,对它们的参数等按需要做了相应的设计和改变后,按原理框图连接起来获得了相应的仿真结果,见图5及图6。
4.2.3单边带调幅
单边带调幅方式的时域表达式比较复杂,有上边带(USB和下边带(SSB两种方式,表达式分别如下:
A
Susb(t)=m(t)coswct-2m(t)sinwct
A
SLSB(t)=m(t)coswct+m(t)sinwct
A
其中f(t)为f(t)的希尔伯特变换,从时域上来讲两者有以下关系式:
A
fu
du
从频域上来讲两者的关系式是:
A
F(w)=-jsgn(w)F(w)
ttootherwise
在本软件中,我们使用的未调制信号为:
心、sinc200tm(t)
0
式中t0取2s,载波C(t)
=cos2fct,fc=100Hz。
它的MATLA实现如下:
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所示。
在这里载频我们取
得是100Hz,是为了更好的能在课堂上演示,实际上,载频是远远的大于100Hz从时域波形可以看出,单边带调幅波形的包络已经不能反映未调信号的幅度了,所以只能采用相干解调方式。
另外,上下边带的调制波
形区别不是很大,因为它们的频谱具有某种对称性。
原信号的频谱如图8所示
图7单边带调幅波形演示效果图
图8未调信号的频谱图
则调制信号的频谱图如图9所示
4.3抽样定理的证明
PCM是模拟信号数字化的基本方式之一。
其包含了三个重要变换:
抽样,
量化和编码,而抽样定理则是在对模拟信号进行抽样时必须遵循的准则,是接收
端从已抽样信号中重建模拟信号的保正。
设有一个频带限制在0,fH赫的模拟信
sin200t2图10所
号m(t):
可作出时域图象和频谱图如
一mtsinc2200t
示
200t
图10被抽样信号的时域波形与频谱图
从图象来看,信号在时域衰减较快,大约在0.1s时就衰减为0,从频谱分
布来看,原信号的频谱为一带限信号,在高频没有分量,低频从零频率开始。
将m(t)与周期冲激函数tt相乘,如图(a)所示,乘积是已抽样信号
mst,
mstm(t)tt
收端可用低通滤波器来重建m(t)
T(t)
(a)(b)
图11抽样与恢复
先分别用两种采样频率对信号进行抽样,f仁100Hz,f2=200Hz,按此原理,我们用MATLABS程实现的MATLA脚本文件如下:
实现上述图象的MATLABW本文件如下:
t0=10;%定义时间长度
ts=0.001;%采样周期
ts1=0.01;%欠采样周期
ts2=0.005;%正确采样周期
fs=1/ts;fs仁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点的信号值为1
m=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)在上述MATLA的脚本文件中,我们首先定义信号时采用了该信号的函数表
达式的形式,值得注意的是,由于有计算sin(t)/t这一式子,在t=0时
MATLA会得出此时的函数值为NaN如果不加以修正的话,在后面计算傅立叶变换时就会出错。
(2)在MATLA中求连续信号的频谱,我们应用的是离散傅立叶变换,这样实际
运算的仍是对连续信号的采样结果,这里我们给予了足够高的采样频率,把其作为连续信号来考虑。
对于一个频带在(0,fH)的连续信号,则该信号可用等间隔的采样值;来唯一的表示。
而采样间隔必须不大于1/2fH,或者说是最低采样频率为
2fH。
从物理概念上可对采样定理作如下解释,由于一个频带受限的信号波形决不可能在很短的时间产生独立的实质的变化,它的最高变换速度受最高频率分量fH的限制。
因此,为了保留这一频率分量的全部信息,一个周期的间隔至少要采样两次。
对采样来说,等于将信号与一系列冲击脉冲相乘,f1=100Hz时,其
表达式如下:
2
S(t)sinc200ttT1
k
原信号的频谱相应有移动,在f1的条件下,作出的图象如图11所示:
由于f1<2fH,时域波形中冲激串的包络已经不能完整的表示原信
号,有了失真,从频谱图看得更如此,不同的频谱带互相重叠,已经不能体现原信号频谱的特点了,在频谱中,出现了频域的直流分量,这样恢复时将出现冲击信号,因此我们就无法正确的恢复信号。
图12欠采样的频谱图
在它的MATLA实现中我们用了语句:
N1=[M1,M1,M1,M1,M1,M1,M1,M1,M1,M1,M1,M1,M1];
f仁[-7*df1*length(mn1):
df1:
6*df1*length(mn1)-df1]-fs1/2;
将一个周期的图象扩展到多个周期,这样得到的图象更有说服力
对情况f2=200Hz,其表示式为:
Stsinc2200ttT2
k
2
sin200t0.005k
k20010.005k
作出的图象如图13所示
图13采样足够频谱图
由于f2>2fH,此次的采样是成功的,它能够恢复原信号,从时域波形可看出,
比上面采样所得的冲激脉冲串包含的细节要多,在频域中也没出现频谱的交叠,
这样我们可以利用低通滤波器m(t)得到无失真的重建。
4.4量化
量化就是将一个有连续幅度取值得信号映射成幅度离散信号的过程,从这
个定义可以看出,由于是将连续的值改为离散的值,量化是一定有误差的,在此过程中丢失的信息是无法重新恢复的。
所以说研究量化的误差并找到使之最小的方案是一个主要问题。
量化方案可分为标量量化和矢量量化,标量量化中每个信源被分别量化,它分为均匀量化和非均匀量化。
均匀量化的量化区域是等长的,非均匀量化则是不等长的,正因为如此,非均匀量化的性能要优于均匀量化。
在标量量化中,随机标量X的定义域划分为N个互不重叠的区域Ri,i=1,2,...,N,R称为量化间隔,在每个区域选择一个点作为量化基础,用
xi表示。
落在该区域的点都用xi表示,这样会带来误差。
该均方误差为:
N2
Dxxif(x)dx
i1Ri
其中f(x)是信源随机变量的概率密度函数。
我们定义信号量化噪声比为:
Ex2
SQNR10logio-
D
在均匀量化方式中除第一个和最后一个区域,其他的所以区域是等长的,
即:
Ri(,a]
R2(a,a]
R3(a,a2]
Rn(a(N2),)
每一级都有一个重建电平,既落在该区域中的不同值都会被化为同一值,通常每
个量化间的重建电平也都取均匀分布的值。
在本软件系统中我们的输入信号为正弦信号,其幅度为Am,现将其进行
均匀量化,量化器的围是(-V,V),共分为L级电平。
(这里Am=1,V=1.5,L=64和8)。
)8级电平(如图14所示)。
图148级量化波形
从图上看,量化后的值与原曲线值相差较小,阶梯形的量化曲线与原曲线比较吻合,较好的完成了任务。
在量化围(-V,V中,量化间隔数为L个,均匀量化器的量化间隔由上面可以得到。
求量化噪声功率的公式在此可以简化为:
nq=8.1380e-005
该量化器的信噪比(信号认为是正弦信号)为:
SNR=
则计算出:
snr=1.5*(1/1)A2*64A2
snr=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符号出现的概率为1—P,且彼此独立,贝「进制振幅键控信号可以表示成一个单极性非归零波形s(t)与正弦载波相乘,即:
e°tstcosWet
通常,二进制振幅键控信号的调制方法有两种,模拟幅度调制方法和键控方法。
我们对二元序列10110010,画出2ASK的波形,其中载频为码元速率的10倍。
即表明在一个符号的时间里,载波刚好为5个周期。
它的MATLA实现的主要程
序断如下所示:
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,它包括二电平频移键控和多电平频移键控。
由它们的频谱图就很容易的能够看出调频信号的频谱同未调信号的频谱几乎没有相似性,这是调频与调幅的最大不同。
在载
波相位调制中,将信道发送的信息调制在载波的相位上,相位通常围是(0,2),
所以通过数字相位调制,数字信号的载波相位是:
m2mM,m=0,1,...M-1
对二进制进行调制,两个载波的相位分别是0,n。
对M进制的相位调制,一组M个载波调相信号的波形的一般表达式为:
m=0,1,...,M-1