通信原理实验工学2号馆404数字通信系统的任务是传输数字信息,数字信息可能是来自数据终端设备的原始数据信号,也可能是来自模拟信号经数字化处理后的脉冲编码信号。数字信息在一般情况下可以表示为一个数字序列,数字序列的基本单元称为码元。每个码元只能取离散的有限个值,通常用不同幅度的脉冲表示码元的不同取值,这种脉冲信号被称为数字基带信号,这是因为它们所占据的频带通常从直流和低频开始。在某些具有低通特性的有线信道中,特别是在传输距离不太远的情况下,数字基带信号可以不经过载波调制而直接进行传输,这种不使用调制和解调装置而直接传送数字基带信号的系统,我们称它为数字基带传输系统。而具有调制和解调过程的传输系统称为数字频带传输系统。3知识要点●数字基带信号的常用码型●码型的功率谱分布●基带传输的误码率●码间串扰●均衡技术●部分相应41数字基带信号的码型数字基带信号是数字信息的电脉冲表示,电脉冲的形式称为码型。通常把数字信息的电脉冲表示过程称为码型编码或码型变换,在有线信道中传输的数字基带信号又称为线路传输码型。由码型还原为数字信息称为码型译码。不同的码型具有不同的频域特性,合理地设计码型使之适合于给定信道的传输特性,是基带传输首先要考虑的问题。5(1)对于传输频带低端受限的信道,线路传输码型的频谱中应不含有直流分量;(2)信号的抗噪声能力强;(3)便于从信号中提取位定时信息;(4)尽量减少基带信号频谱中的高频分量,以节省传输频带并减小串扰;(5)编译码的设备应尽量简单。对于码型的选择通常要考虑以下的因素:61.1常用码型数字基带信号(以下简称为基带信号)的类型举不胜举的,常见的有矩形脉冲、三角波、高斯脉冲和升余弦脉冲等。无论采用什么形式的波形,数字基带信号都可以用数学式表示出来。若令代表二进制符号的“0”,代表“1”,码元的间隔为,则基带信号可表示成其中,)(1tg)(2tgsTnntsts)()()出现,以概率(出现,以概率PnTtgaPnTtgatssnsnn1)()()(217由于是信息符号所对应的电平值,它是一个随机量。因此,通常在实际中遇到的基带信号都是一个随机的脉冲序列。因为矩形脉冲易于形成和变换,所以最常用的是矩形脉冲。na8单极性不归零码是一种最简单、最常用的基带信号形式。这种信号脉冲的零电平和正电平分别对应着二进制代码0和1,或者说,它在一个码元时间内用脉冲的有或无来对应表示0或1码。其特点是极性单一,有直流分量,脉冲之间无间隔。另外位同步信息包含在电平的转换之中,但是当出现连0或连1序列时没有位同步信息。单极性不归零码生成单极性不归零码的流程图如图7-1所示。9为变量赋初值生成snrz信号画出snrz信号的波形结束开始图1-1snrz程序流程图10MATLAB实现程序如下:functiony=snrz(x)%本函数实现将输入的一段二进制代码编为相应的单极性不归零码输出%输入x为二进制码,输出y为编好的码t0=200;t=0:1/t0:length(x);%给出相应的时间序列fori=1:length(x)%计算码元的值ifx(i)==1%如果输入信息为1forj=1:t0%该码元对应的点值取1y((i-1)*t0+j)=1;endelseforj=1:t0%如果输入信息为0,码元对应的点值取011y((i-1)*t0+j)=0;endendendy=[y,x(i)];plot(t,y);%采用title命令来实现标记出各码元对应的二元信息title('10110010');gridon;axis([0,i,-0.1,1.1]);12在命令窗口中键入x的二进制代码和函数名,就可以得到所对应的单极性不归零码输出,如输入以下指令,将出现图7-2所示结果。x=[10110010];snrz(x)图1-2单极性不归零码13双极性不归零码在双极性不归零码中,脉冲的正、负电平分别对应于二进制代码1、0,由于它是幅度相等极性相反的双极性波形,故当0、1符号等可能出现时无直流分量。这样,恢复信号的判决电平为0,因而不受信道特性变化的影响,抗干扰能力也较强。故双极性码较单极性码更有利于在信道中传输。14双极性非归零码的实现同单极性基本一样,只需将snrz.m中的判断得到0信息后的语句y((i-1)*t0+j)=0;中的0改为-1即可,所以就不再给出MATLAB函数文件了,波形图如图1-3所示。图1-3双极性不归零码15单极性归零码单极性归零码与单极性不归零码的区别是电脉冲宽度小于码元宽度,每个电脉冲在小于码元长度内总要回到零电平,即输入信息为1时给出的码元前半时间为1,后半时间为0,输入为0时与不归零码则完全相同。单极性归零码可以直接提取定时信息,是其他波形提取位定时信号时需要采用的一种过渡波形。16其MATLAB实现如下:(函数文件srz.m)functiony=srz(x)%本函数实现将输入的一段二进制代码编为相应的单极性归零码输出%输入x为二进制码,输出y为编好的码t0=200;t=0:1/t0:length(x);%给出相应的时间序列fori=1:length(x)%计算码元的值ifx(i)==1%如果输入信息为1forj=1:t0/2y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0end17elseforj=1:t0%如果输入信息为0y((i-1)*t0+j)=0;%定义所有时间值为0endendendy=[y,x(i)];plot(t,y);title('10110010');gridon;axis([0,i,-0.1,1.1]);18同理,在命令窗口中键入x的二进制代码和函数名,就可以得到所对应的单极性归零码输出,如输入以下指令,将出现图7-4所示结果。x=[10110010];srz(x)图1-4单极性归零码19双极性归零码它是双极性不归零码的归零形式,每个码元内的脉冲都回到零点平,表示信息1时前半时间为1后半时间为0,表示信息0时前半时间为-1后半时间为0,相邻脉冲之间必定留有零电位的间隔。它除了具有双极性不归零码的特点外,还有利于同步脉冲的提取。20双极性归零码的MATLAB实现同单极性也基本一样,只需将srz.m中的判断得到0信息后的语句forj=1:t0y((i-1)*t0+j)=0;改为forj=1:t0/2y((2*i-2)*t0/2+j)=-1;y((2*i-1)*t0/2+j)=0;即可,所以也就不再给出MATLAB函数文件了,其波形图如图1-5所示。21图1-5双极性归零码22编码规则:对每个二进制代码分别利用两个具有不同相位的二进制信码去取代的码,即采用在一个码元时间的中央时刻从0到1的跳变来表示信息1,从1到0的跳变来表示信息0;或者用前半时间为0后半时间为1来表示信息0,而前半时间为1后半时间为0表示信息0。这种码只使用两个电平,且既能提供足够的定时分量,又无直流漂移,编码过程简单。但这种码的带宽要宽些。Manchester码(双相码)23其MATLAB实现同双极性归零码相似,只需将语句:y((2*i-2)*t0/2+j)=-1;y((2*i-1)*t0/2+j)=0;改为:y((2*i-2)*t0/2+j)=0;y((2*i-1)*t0/2+j)=1;即可。其波形图如图1-6所示。24图1-6Manchester码25差分Manchester码(条件双相码)这种码不仅与当前的信息元有关,而且与前一个信息元也有关。差分Manchester码也使用中央时刻的电平跳变来表示信息,但与Manchester码不同的是对于信息1则前半时间与前一码元的后半时间电平相同,在中央处再跳变,对于信息0则前半时间的电平与前一码元的后半时间电平相反。其波形表示如图1-7所示。26图1-7差分Manchester码27前几种码型当遇到传输中电平极性反转的情况时都会出现译码错误,而差分Manchester码却不会受极性反转的影响。其MATLAB实现如下(函数文件dmachester.m):functiony=dmachester(x)%本函数实现将输入的一段二进制代码编为相应的条件双相码输出,输入x为二进制代码,输出y为编好的码x=[10110010];t0=200;t=0:1/t0:length(x);%定义时间序列i=1;%直接对一段二进制数编码ifx(i)==1%由于前面的值不定,所以单独给出头一个值,若第一个信息为1forj=1:t0/2y((2*i-2)*t0/2+j)=0;%前半时间为028y((2*i-1)*t0/2+j)=1;%后半时间为1endelseforj=1:t0/2%如果输入信息为0y((2*i-2)*t0/2+j)=1;%前半时间为1y((2*i-1)*t0/2+j)=0;%后半时间为0endendfori=2:length(x)%从第二个信息起编码与前面的码元有关系ifx(i)==1%输入的信息为1forj=1:t0/2y((2*i-2)*t0/2+j)=1-y((2*i-3)*t0/2+t0/4);%前半时间值与前一码元后半时间值相反y((2*i-1)*t0/2+j)=1-y((2*i-2)*t0/2+j);%后半时间值与本码元前半时间值相反end29elseforj=1:t0/2%如果输入信息为0y((2*i-2)*t0/2+j)=y((2*i-3)*t0/2+t0/4);%前半时间值与前一码元后半时间值相同y((2*i-1)*t0/2+j)=1-y((2*i-2)*t0/2+j);%后半时间值与本码元前半时间值相反endendendy=[y,y(i*t0)];plot(t,y);title('10110010');gridon;axis([0,i,-0.1,1.1]);30Miller码(延迟调制码)编码规则:“1”码用码元持续时间中心点出现跃变来表示,即用“10”或“01”表示,前半时间的电平与前一码元后半时间的电平相同。“0”码分两种情况处理:对于单个“0”时,在码元持续时间内不出现电平跃变,且与相邻码元的边界处也不跃变;对于连“0”时,在两个“0”码的边界处出现电平跃变,即“00”与“11”交替。其波形表示如图1-8所示。31图1-8Miller码32Miller码也不受电平极性反转的影响,其MATLAB实现如下(函数文件miler.m):functiony=miler(x)%本函数实现将输入的一段二进制代码编为相应的密勒码输出%输入x为二进制代码,输出y为编好的码x=[10110010];t0=200;t=0:1/t0:length(x);%定义时间序列i=1;%直接对一段二进制数编码ifx(i)==1%由于前面的值不定,所以单独给出头一个值,若第一个信息为1forj=1:t0/233y((2*i-2)*t0/2+j)=0;%前半时间为0y((2*i-1)*t0/2+j)=1;%后半时间为1endelseforj=1:t0%如果输入信息为0y((i-1)*t0+j)=0;%所有时间为0endendfori=2:length(x)%从第二个信息起编码与前面的码元有关系ifx(i)==1%若输入的信息为1forj=1:t0/2y((2*i-2)*t0/2+j)=y((2*i-3)*t0/2+t0/4);%前半时间值与前一码元后半时间值相同34y((2*i-1)*t0/2+j)=1-y((2*i-2)*t0/2+j);%后半时间值与本码元前半时间值相反endelseif(x(i-1)==1)%反之,如果前一信息为1,而输入信息为0forj=1:t0y((i-1)*t0+j)=y((2*i-3)*t0/2+t0/4);%所有时间值与前一码元后半时间值相同endelseforj=1:t0y((i-1)*t0+j)=1-y((2*i-3)*t0/2+t0/4);%所有时间值与前一码元后半时间值相反35endendendendy=[y,y(i*t0)