您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 卷积码的维特比译码原理及仿真
卷积码的维特比译码原理及仿真摘要本课程设计主要解决对一个卷积码序列进行维特比(Viterbi)译码输出,并通过Matlab软件进行设计与仿真,并进行误码率分析。实验原理QPSK:QPSK是英文QuadraturePhaseShiftKeying的缩略语简称,意为正交相移键控,是一种数字调制方式。四相相移键控信号简称“QPSK”。它分为绝对相移和相对相移两种。卷积码:又称连环码,是由伊莱亚斯(P.elias)于1955年提出来的一种非分组码。积码将k个信息比特编成n个比特,但k和n通常很小,特别适合以串行形式进行传输,时延小。卷积码是在一个滑动的数据比特序列上进行模2和操作,从而生成一个比特码流。卷积码和分组码的根本区别在于,它不是把信息序列分组后再进行单独编码,而是由连续输入的信息序列得到连续输出的已编码序列。卷积码具有误码纠错的能力,首先被引入卫星和太空的通信中。NASA标准(2,1,6)卷积码生成多项式为:346134562()1()1gDDDDDgDDDDD其卷积编码器为:输入序列++输出c1输出c2图1.1K=7,码率为1/2的卷积码编码器维特比译码:采用概率译码的基本思想是:把已接收序列与所有可能的发送序列做比较,选择其中码距最小的一个序列作为发送序列。如果接收到L组信息比特,每个符号包括v个比特。接收到的Lv比特序列与2L条路径进行比较,汉明距离最近的那一条路径被选择为最有可能被传输的路劲。当L较大时,使得译码器难以实现。维特比算法则对上述概率译码做了简化,以至成为了一种实用化的概率算法。它并不是在网格图上一次比较所有可能的2kL条路径(序列),而是接收一段,计算和比较一段,选择一段最大似然可能的码段,从而达到整个码序列是一个最大似然值得序列。下面以图2.1的(2,1,3)卷积码编码器所编出的码为例,来说明维特比解码的方法和运作过程。为了能说明解码过程,这里给出该码的状态图,如图2.2所示。维特比译码需要利用图来说明移码过程。根据卷积码画网格的方法,我们可以画出该码的网格图,如图2.3所示。该图设接收到的序列长度为8,所以画8个时间单位,图中分别标以0至7。这里设编码器从a状态开始运作。该网格图的每一条路径都对应着不同的输入信息序列。由于所有可能输入信息序列共有2kL个,因而网格图中所有可能的路径也为2L条。这里节点a=00,b=10,c=01,d=11。mjmj-1mj-2输出序列m1,m2,…mj,…y1jy2j输入序列00ad10()cb110011010110图2.1(2,1,3)卷积码编码器图2.2(2,1,3)卷积码状态图设输入编码器的信息序列为(11011000),则由编码器对应输出的序列为Y=(1101010001011100)。若收到的序列R=(0101011001011100),对照网格图来说明维特比译码的方法。首先选择接收序列的前6位序列R1=(010101)同到达第3时刻的可能的8个码序列(即8条路径)进行比较,并计算出码距。该例中到达第3时刻a点的路径序列是(000000)和(111011),他们与R1的距离分别为3和4;到达第3时刻b点的路径序列是(000011)和(111000),他们与R1的距离分别为3和4;到达第3时刻c点的路径序列是(001110)和(110101),他们与R1的距离分别为4和1;到达第3时刻d点的路径序列是(001101)和(110110),他们与R1的距离分别为2和3。上述每个节点都保留码距较小的路径作为幸存路径,所以幸存路径码序列是(000000)、(000011)、(1101001)和(001101),如图2.4所示。用于上面类似的方法可以得到第4、5、6、7时刻的幸存路径。abcd节点号0123456700000000000000111111111111111100000101010101010101010101111110101010图2.3(2,1,3)卷积码网格图需要指出的是,对于某个节点,如果比较两条路径与接收序列的累计码距值相等时,则可以任意选者一条路径作为幸存路径,此时不会影响最终的译码结果。在码的终了时刻a状态,得到一条幸存路径。如果2.5所示。由此可看到译码器输出是R’=(1101010001011100),即可变换成序列(11011000),恢复了发端原始信息。比较R’和R序列,可以看到在译码过程中已纠正了在码序列第1和第7位上的差错。当然如果差错出现太频繁,以致超出卷积码的纠错能力,还是会发生纠误的。abcd节点号0123000000111111010101abcd节点号0123110101456780001011100图2.4维特比译码第3时刻幸存路径图2.5第8时刻幸存路径仿真分析本实验用matlab仿真一个简单的OFDM系统中,观察在不同信噪比下的卷积码和Viterbi算法软判决译码的性能,并与没有编码的接收信号的误码率进行比较。主要调用函数的介绍:1.trellis=poly2trellis(7,[155117]);产生约束长度为7,一输入两输出的卷积码,比特连接向量分别为:1101101,1001111;2.code=convenc(Signal,trellis);将原始信号进行卷积编码,编码器由上式产生;3.REdata=awgn(TrData,SNR(i),'measured');加性高斯白噪声信道;4.[dmpin]=vitdec(ReSig,trellis,tblen,'cont','soft',1);利用Viterbi算法译卷积码。ReSig为poly2trellis函数或istrellis函数定义的格形trellis结构的卷积码。参数tblen取正整数,表示记忆(traceback)深度。参数'cont'代表解码操作模型,假设编码器在全零状态开始。'soft'表示软判决,参数nsdec做信道量化。仿真结果:下图显示的是在不同信噪比下,通过卷积编码和维特比译码与未编码的接收端误码率的对比。在低信噪比时(小于等于7dB时),未编码的误码率要低于编码的误码率。这是因为在低信噪比的情况下,卷积码的纠错能力范围超过纠错门限后,纠错码就不是纠错了,而是加错了。当信噪比比较高时,编码的误码率要好于未编码的误码率。图2卷积编码和原始信号在不同信噪比下的接收端的误码率程序代码:SNR=1:0.5:15;%信噪比取值;单位为db\Ns=10;datalength=256;%每个数据符号中可用子载波error_bit_rata_code=0;%经卷积编码后解调出的数据的误比特率error_bit_rata_nocode=0;%未经卷积编码后解调出的数据的误比特率fori=1:1:29Signal=double(rand(1,datalength*Ns)0.5);trel=poly2trellis(7,[155117]);code=convenc(Signal,trel);%进行串并转化Para=reshape(code,datalength,2*Ns);%进行QPSK数据调制,将数据分为两个通道,SigPara为datalength行2Ns列forj=1:Nss1(:,j)=Para(:,2*j-1);%ich为datalength行Ns列s2(:,j)=Para(:,2*j);endkmod=1./sqrt(2);s1=s1.*kmod;s2=s2.*kmod;x=s1+s2.*sqrt(-1);%产生复信号y=ifft(x);%通过傅立叶反变换,将频域数据转换为时域数据ich2=real(y);%I信道取变换后的实部qch2=imag(y);%Q信道取变换后的虚部ich4=reshape(ich2,1,datalength*Ns);qch4=reshape(qch2,1,datalength*Ns);TrData=ich4+qch4.*sqrt(-1);%加入高斯白噪声ReData=awgn(TrData,SNR(i),'measured');idata=real(ReData);qdata=imag(ReData);%进行串并转化idata1=reshape(idata,datalength,Ns);qdata1=reshape(qdata,datalength,Ns);Rex=idata1+qdata1.*sqrt(-1);ry=fft(Rex);ReIChan=real(ry);ReQChan=imag(ry);ReIChan=ReIChan/kmod;ReQChan=ReQChan/kmod;forj=1:NsRePara(:,2*j-1)=ReIChan(:,j);RePara(:,2*j)=ReQChan(:,j);endReSig=reshape(RePara,1,datalength*Ns*2);%符号抽样判决ReSig=double(ReSig0.5);%维特比译码tblen=log2(trel.numInputSymbols)[dmpin]=vitdec(ReSig,trel,tblen,'cont','soft',1);%统计错误比特数,并计算误比特率error_bit_code=sum(abs(d(2:datalength*Ns)-Signal(1:datalength*Ns-1)));error_bit_nocode(i)=sum(abs(ReSig-code));error_bit_rata_code1=error_bit_code/length(Signal);error_bit_rata_code(i)=error_bit_rata_code1;error_bit_rata_nocode(i)=error_bit_nocode(i)/2/length(Signal);endfigure(1);plot(SNR,error_bit_rata_nocode,'-ro',SNR,error_bit_rata_code,'-.b');h=legend('没有卷积','卷积',1);gridon;
本文标题:卷积码的维特比译码原理及仿真
链接地址:https://www.777doc.com/doc-4824244 .html