1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,Page,*,Page,1,第,14,章,MATLAB,通信系统仿真,【,学习目标,】,了解数字通信系统基本概念,掌握数字调制,/,解调及其仿真,掌握信道编码,/,译码及其仿真,Page,2,第,14,章,MATLAB,通信系统仿真,数字通信系统基本概念,14.1,数字调制,/,解调及其仿真,14.2,信道编码,/,译码及其仿真,14.3,典型数字通信仿真实例,14.4,Page,3,14.1,数字通信系统基本概念,Page,4,14.2,数字调制,/,解调及其仿真,14.2.1,脉冲幅度调制(,PAM,)信号,14
2、2.2,相位调制(,PSK,)信号,14.2.3,频率调制信号,14.2.4,连续相位调制信号,Page,5,1.,脉冲幅度调制(,PAM,)信号,Page,6,1.,脉冲幅度调制(,PAM,)信号,参数名称,参数值,M-ary number,(,M,维数),4,Initial seed,(初始化种子),37,Sample time,(采样时间),0.01,Random Integer Generator,(随机整数发生器)的主要参数,M-PAM,调制和解调器的主要参数,参数名称,参数值,M-ary number,(,M,维数),4,Minimum distance,(最小距离),2,Con
3、stellation ordering,(星座顺序),Binary,Page,7,1.,脉冲幅度调制(,PAM,)信号,AWGN Channel,(高斯白噪声信道)的主要参数,Discrete-Time Scatter Plot Scope,(离散时间星座仪)的主要参数,参数名称,参数值,Initial seed,(初始化种子),67,Es/No,(,dB,)(信噪比),25,Symbol period,(符号周期),1,参数名称,参数值,Samples per symbol,(每符号采样),1,Offset,(,samples,)(偏置),0,Points displayed,(显示点数),
4、1000,New points per display,(每次显示的新迹),500,Page,8,1.,脉冲幅度调制(,PAM,)信号,Error Rate Calculation,(误码率计算)的主要参数,参数名称,参数值,Receive delay,(接收延迟),0,Computation delay,(计算延迟),0,Computation mode,(计算模式),Entire frame,Output data,(输出数据),port,Page,9,2.,相位调制(,PSK,)信号,Page,10,2.,相位调制(,PSK,)信号,M-PSK Modulator Baseband,(,
5、M-PSK,基带调制器)的主要参数,参数名称,参数值,M-ary number,(,M,维数),8,Phase offset,(,rad,)(相位偏差),pi/8,Constellation ordering,(星座顺序),Binary,Input type,(输入类型),Integer,Page,11,3.,频率调制信号,Page,12,3.,频率调制信号,Bernoulli Binary Generator,(伯努利二进制随机数产生器)的主要参数,参数名称,参数值,Probability of a zero,(,0,出现的概率),0.5,Initial seed,(初始化种子),61,Sa
6、mple time,(采样时间),0.1,Frame-based output,(基于帧输出),使能,Samples per frame,(每帧采样数),10,M-FSK Modulator Baseband,(,MFSK,基带调制器)的主要参数,参数名称,参数值,M-ary number,(,M,维数),4,Input type,(输入类型),Bit,Symbol set ordering,(符号顺序),Binary,Frequency separation,(,Hz,)(频率间隔),10,Phase continuity,(相位连续性),Discontinuous,Samples per
7、symbol,(每符号采样数),16,Page,13,4.,连续相位调制信号,Page,14,4.,连续相位调制信号,GMSK Modulator Baseband,(,GMSK,基带调制器)的主要参数,参数名称,参数值,Input type,(输入类型),Bit,BT product,(,BT,乘积),0.3,Pulse length,(,symbol intervals,)(符号间隔),3,Symbol prehistory,(符号前史),1,Phase offset,(,rad,)(相位偏置),0,Samples per symbol,(每符号采样数),16,Page,15,14.3,信
8、道编码,/,译码及其仿真,14.3.1,线性分组码,14.3.2,循环码,14.3.3,卷积码,Page,16,1,线性分组码,MATLAB,中使用,encode,、,decode,可以实现线性分组码的编译码。,encode,函数的语法形式如下:,code=encode(msg,n,k,linear/fmt,genmat),code=encode(msg,n,k,cyclic/fmt,genpoly),code=encode(msg,n,k,hamming/fmt,prim_poly),code=encode(msg,n,k),code,added=encode(.),使用,encode,可以
9、实现线性分组码、循环码、汉明码的编码。,Page,17,1,线性分组码,函数参数的含义如下:,msg,:信息序列,可以是二进制行或列向量,也可以是二进制矩阵,也可以是十进制行或列向量;,n,k,:分别为码长和信息分组长度;,fmt,:表示编码进制数,默认为二进制,(binary),;,genmat,:表示线性分组码的生成矩阵;,genpoly,:表示循环码的生成多项式,可以由函数,cyclpoly(n,k),实现;,prim_poly,:表示采用汉明编码时的本原多项式,可以由函数,gfprimdf(n-k),实现。,Page,18,1,线性分组码,【,例,10-1】encode,函数使用示例:
10、采用三种不同的格式(二进制向量、二进制矩阵以及十进制向量)生成(,7,4,)汉明码。,clc;clear all;close all;,m=3;,n=2m-1;%码长=7,k=2m-1-m;%信息分组长=4,%生成50个信息分组,每个分组k比特,msg1=randint(50*k,1,0,1);%列向量,msg2=vec2mat(msg1,k);%转换为k维列向量的矩阵,msg3=bi2de(msg2);%转换为十进制整数的行向量,Page,19,1,线性分组码,%,生成,50,个码字,每个码字,n,比特,code1=encode(msg1,n,k,hamming/binary);,code2
11、encode(msg2,n,k,hamming/binary);,code3=encode(msg3,n,k,hamming/decimal);,%,判断三种方法生成的码字是否相同,if(vec2mat(code1,n)=code2&de2bi(code3,n)=code2),disp(All three formats produced the same content.),end,Page,20,2,循环码,循环码,BCH,码,里德,-,所罗门(,RS,)码,Page,21,2,循环码,【,例,encode,和,decode,函数使用示例:对,(15,4),循环码进行编译码。,clc;c
12、lear all;close all;,n=15;k=4;,genpoly=cyclpoly(n,k,max);,%构造循环码多项式,msg=randint(100,k,0,1);,%100个信息分组,code=encode(msg,n,k,cyclic/binary,genpoly);,noisycode=rem(code+randerr(100,n,0 1;.7.3),2);%加噪声,newmsg=decode(noisycode,n,k,cyclic);%译码,number,ratio=biterr(newmsg,msg);%计算误码率,disp(The bit error rate i
13、s,num2str(ratio),Page,22,2,循环码,BCH,码,bchenc,函数的语法形式如下:,code=bchenc(msg,n,k),code=bchenc(.,paritypos),这两个函数可以用于生成,BCH,码,其中,msg,的数据结构必须为,Galois array,。,与,bchenc,相对应的函数是,bchdec,,函数的语法形式如下:,decoded=bchdec(code,n,k),decoded,cnumerr,ccode=bchdec(.),cnumerr,:表示与,code,相对应的纠正的错误个数;,ccode,:表示经过错误纠正后的码字;,decod
14、ed,:表示返回的译码结果。,Page,23,2,循环码,【,例,10-4】BCH,码编译码仿真示例。,clc;clear all;close all;,m=4;n=2m-1;%码字长度,k=5;%信息符号长度,nwords=10;%编码个数,msg=gf(randint(nwords,k);,genpoly,t=bchgenpoly(n,k);%获得生成多项式及相应的纠错能力t,t2=t;,code=bchenc(msg,n,k);%编码,noisycode=code+randerr(nwords,n,1:t2);%对每个码字加t2比特错误,Page,24,2,循环码,newmsg,err,
15、ccode=bchdec(noisycode,n,k);%译码,if ccode=code,disp(All errors were corrected.),end,if newmsg=msg,disp(The message was recovered perfectly.),end,Page,25,2,循环码,【,例,10-5】RS,码编译码仿真示例。,m=3;%每符号比特数,n=2m-1;k=3;,%码字长度和信息长度,t=(n-k)/2;%rs码的纠错能力,nw=4;%码字个数,msgw=gf(randint(nw,k,2m),m);%生成随机信息符号,c=rsenc(msgw,n,k
16、);%编码,noise=(1+randint(nw,n,2m-1).*randerr(nw,n,t);,cnoisy=c+noise;%加噪声,dc,nerrs,corrcode=rsdec(cnoisy,n,k);%译码,isequal(dc,msgw)&isequal(corrcode,c)%检测是否译码正确,Page,26,3,卷积码,poly2trellis,函数是将卷积码的多项式描述转换为网格描述。函数的语法形式如下:,trellis=poly2trellis(ConstraintLength,CodeGenerator),trellis=poly2trellis(Constrain
17、tLength,CodeGenerator,FeedbackConnection),具体参数的函数如下:,ConstraintLength,:表示,k,个输入比特的约束长度;,CodeGenerator,:表示卷积码的生成矩阵,使用八进制数表示,生成矩阵表示,n,个输出对应于,k,个输入的连接;,FeedbackConnection,:表示反馈编码器的连接,使用八进制数表示;,Page,27,3,卷积码,trellis,:函数的返回值是一个网格结构体,网格结构体包含的字段及含义如表所示,网格结构体字段,维数,含义,numInputSymbols,标量,输入到编码器的符号个数:,numOutpu
18、tsymbols,标量,编码器输出的符号个数:,numStates,标量,编码器状态数,nextStates,numStates,矩阵,当前状态在当前输入下的下一状态,outputs,numStates,矩阵,当前状态在当前输入下的输出,Page,28,3,卷积码,convenc,函数的语法形式如下:,code=convenc(msg,trellis),code=convenc(msg,trellis,puncpat),code=convenc(msg,trellis,.,init_state),code,final_state=convenc(.),其中各参数含义如下:,msg,:待编码的信
19、息序列,为二进制向量。编码器的每个输入符号包含,log2(trellis.numInputSymbols),个比特;,puncpat,:表示打孔,(puncture),图样,通过打孔可以构造删除卷积码,从而获得更高的码率;,init_state,:表示编码器的初始状态;,final_state,:表示编码结束后编码器的最终状态。,Page,29,3,卷积码,卷积码的译码采用维特比译码,,vitdec,函数的语法形式如下:,decoded=vitdec(code,trellis,tblen,opmode,dectype),decoded=vitdec(code,trellis,tblen,opm
20、ode,soft,nsdec),decoded=vitdec(code,trellis,tblen,opmode,dectype,puncpat),vitdec,函数使用维特比算法进行译码,具体各参数含义如下:,trellis,:指定了该卷积码的网格图结构;,tblen,:表示回溯长度,对于,卷积码,,tblen,约为编码约束长度的,5,倍;,opmode,:表示译码器的操作模式。,Page,30,3,卷积码,卷积码的译码采用维特比译码,,vitdec,函数的语法形式如下:,decoded=vitdec(code,trellis,tblen,opmode,dectype),decoded=vi
21、tdec(code,trellis,tblen,opmode,soft,nsdec),decoded=vitdec(code,trellis,tblen,opmode,dectype,puncpat),vitdec,函数使用维特比算法进行译码,具体各参数含义如下:,trellis,:指定了该卷积码的网格图结构;,tblen,:表示回溯长度,对于,卷积码,,tblen,约为编码约束长度的,5,倍;,opmode,:表示译码器的操作模式。,Page,31,3,卷积码,vitdec,函数有三种操作模式:,cont,:假定编码器开始于全,0,状态,译码器从最优路径回溯,延迟,tblen,个符号后得到译
22、码输出;,term,:假定编码器开始和结束状态都为全,0,状态,译码器从全,0,状态开始回溯译码,该模式没有延时;,trunc,:假定编码器开始于全,0,状态,译码器从最优路径回溯,该模式没有延时。,dectype,:表示维特比译码的判决模式:,unquant,:未量化输入,码字包含实值输入;,hard,:采用硬判决算法;,soft,:采用软判决算法;,nsdec,:软判决译码算法中的量化比特数。,Page,32,3,卷积码,【,例,10-7】,卷积码的编译码仿真示例。,clc;clear all;close all;,%编码数据比特,trel=poly2trellis(3,6 7);%定义网
23、格,msg=randi(0 1,1000,1);%随机数据,code=convenc(msg,trel);%卷积编码,tblen=5;%回溯长度,%映射 0 比特为1.0,1 比特为-1.0,,,同时加高斯白噪声,ucode=real(awgn(1-2*code,3,measured);,hcode=ucode0;%硬判决译码,,,转换为二进制,decoded1=vitdec(hcode,trel,tblen,cont,hard);,Page,33,3,卷积码,%软判决译码,使用量化输入,,,采用3比特量化,x,qcode=quantiz(ucode,-.75-.5-.25 0.25.5.75
24、7:-1:0);,decoded2=vitdec(qcode,trel,tblen,cont,soft,3);,decoded3=vitdec(ucode,trel,tblen,cont,unquant);%软判决译码,使用非量化输入,%计算误比特率,,,译码器输出延迟tblen个符号,n1,r1=biterr(double(decoded1(tblen+1:end),msg(1:end-tblen);,n2,r2=biterr(decoded2(tblen+1:end),msg(1:end-tblen);,n3,r3=biterr(decoded3(tblen+1:end),msg(1:e
25、nd-tblen);,disp(The bit error rates are:,num2str(r1 r2 r3),Page,34,14.4,典型数字通信仿真实例,14.4.1 2FSK,信号在高斯白噪声信道的传输性能,14.4.2 TDMA,信号收发系统仿真,Page,35,1,2FSK,信号在高斯白噪声信道的传输性能,Page,36,1,2FSK,信号在高斯白噪声信道的传输性能,脚本程序如下:,clc;clear all;close all;,EsN0=0:20;%信噪比,单位为dB,Err=zeros(1,length(EsN0);%输出的误比特率,FrequencySep=24000
26、2FSK信号频率间隔,BitRate=10000;%信号源比特率,SimulationTime=10;%仿真时间,SamplePerSym=2;%每符号抽样点数,for i=1:length(EsN0),SNR=EsN0(i);,sim(fskerr);%运行仿真程序,变量保存在BitErrorRate中,Err(i)=mean(BitErrorRate);%求出平均误比特率,end,Page,37,1,2FSK,信号在高斯白噪声信道的传输性能,semilogy(EsN0,Err),grid on,xlabel(SNR),ylabel(Bit Error Rate),Page,38,2,TDMA,信号收发系统仿真,Page,39,






