matlab编程代做highspeedlogic★卷积编码

上传人:豆浆 文档编号:30273670 上传时间:2018-01-28 格式:DOC 页数:24 大小:324KB
返回 下载 相关 举报
matlab编程代做highspeedlogic★卷积编码_第1页
第1页 / 共24页
matlab编程代做highspeedlogic★卷积编码_第2页
第2页 / 共24页
matlab编程代做highspeedlogic★卷积编码_第3页
第3页 / 共24页
matlab编程代做highspeedlogic★卷积编码_第4页
第4页 / 共24页
matlab编程代做highspeedlogic★卷积编码_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《matlab编程代做highspeedlogic★卷积编码》由会员分享,可在线阅读,更多相关《matlab编程代做highspeedlogic★卷积编码(24页珍藏版)》请在金锄头文库上搜索。

1、highspeedlogic第三章 卷积编码简介3.1 卷积码的基本概念卷积码是 Elias 在 1955 年提出的。在分组码中,把 k 个信息比特序列编成 n 个比特的码组,每个码组中的(n-k)个校验位仅与本码组的 k 个信息位有关,而与其它码组无关。为了达到一定的纠错能力和编码效率,分组码的码组长度一般比较大。编译码时必须把整个信息码组存储起来,由此产生的译码延迟会随着 n 的增加而增加。和分组码不同,卷积码前后各码组之间具有相关性,即卷积码编码后的 n 个码元不仅与当前段的 k 个信息有关,而且还与前面(N-1) (N 为编码约束度)段的信息有关。在卷积码中,k 个信息比特也被编成 n

2、 个比特的码组,但 k 和 n 通常很小,并且可以通过串行或并行的方式进行传输,而且时延很小。编码过程中互相关联的码元个数为 nN。由于卷积码在编码过程中,充分地利用了各码组之间的相关性,且 k 和 n 都比较小,因此,在与分组码同样的码率和设备复杂性条件下,从理论和实际两个方面,均已证明卷积码的性能至少不比分组码差,且实现最佳和准最佳也较分组码容易。但卷积码没有分组码那样严密的数学分析手段,目前,好的卷积码大多是通过计算机进行搜索得到的。卷积码编码器如图 3-1 所示:图 3-1 码率为 k/n,编码约束度为 N 的卷积码编码器图 3-1 主要包括:一个输入移位寄存器(分为 N 段,每段 k

3、 位) ;n 个模 2 加法器;一个输出数据选择器(n 选一) 。某一时刻,输入到编码器的 k 个信息元组成一个信息组,相应的输出序列是由 n 个码元组成的码段。这里,称 N 为编码约束度,说明编码过程中互相约束的码段个数。令 N=m+1,则 m 称为编码存储,它表示输入信息组在编码器中需存储的单位时间(有时为了简化,编码器中只用 m 段的输入移位寄存器) 。称 Nn 为编码约束长度,说明编码过程中互相约束的码元个数,如 m=2,n=2 ,则 Nn=6。所以 m 或 N 以及 Nn 都是highspeedlogic表示卷积码编码器复杂性的重要参数。3.2 卷积码的数学表达式卷积码的表示方法主要

4、有多项式矩阵表示法、状态图表示法和网格图表示法。其中,多项式矩阵表示法主要用于代数译码,而 Viterbi 译码算法主要采用后面两种方法来表示。下面以(2,1,2)码为例来介绍状态图表示法和网格图表示法。设(2,1,2)码的两个子生成元为: (1,) 2,2gD所以,该码的生成多项式矩阵为: 2()1,G根据 G(D)可得如图 3-2 所示的编码电路:图 3-2(2,1,2)卷积码编辑器3.3 卷积码的状态表示法highspeedlogic图 3-3 (2,1,2)卷积编码状态图上图为图 3-2 所示卷积码编码器的状态图。编码器的寄存器在任一时刻的所存储的内容称为编码器的一个状态,以 s1 表

5、示。本例中,编码存储 m=2,k=1,编码器由两级移位寄存器构成,所以,移位寄存器所存储的内容只有四种情况:00、10、01 和 11,这就是说本例中的编码器共有四种状态:s0、s1、s2 和 s3。随着信息序列不断送入,编码器会不断地从一个状态转移到另一个状态。利用状态转移路径不但可以表示出该转移过程中所对应的输出码段,同时还可以显示所对应的输入信息元。虽然状态图能够表示卷积码编码器在不同输入的信息序列下,编码器各状态之间的转移转移关系,但却不能描述随时间变化时系统状态转移的轨迹,为了解决这个问题,可引入下面要介绍的网格图表示法。3.4 卷积码的树状结构图图 3-4 编码器的编码过程,可以用

6、图 3-4 所示的码树来描述。图中每个节点“.”对应于一个输入码元。按照习惯,当输入为“0” 时,走上分支 :输入为“1”时,走下分支,并将编码器的输出标在每个分支的上面。按此规则,就可以画出码树的路径。对于任一个码元输入序列,编码器输出序列一定与码树中的一条特殊的路径相对应。因此,沿着码元输入序列,就可以获得相应的输出码序列。例如,如果输入的信息序列为 1010,输出编码序列为11100010,如图中虚线所示。可以看出,编码器的输出与当前输入的码元 mj 和先前输入的两个码元 mj-2mj-1,的取值有关。我们将编码器中寄存器内所存储的,先前输入的信息码元的可能取值称为编码器的状态。编码器

7、mj-2mj-1,可能的取值有四种:00,01,10 和11,我们分别用 s0,sl , s2 和 s3 表示,并将其分别标注在码树的各节点上。highspeedlogic图 3-4 (2,1,2) 卷积码的码树在编码器的输入端输入一个新的信息码元后,编码器会从原来的状态转换成新的状态。例如,若编码器原来的状态为 sl,当输入码元为“1”时,编码器会从 sl 状态转换到 s3 状态:当输入码元为“0”时,编码器会从 sl 状态转换到 s2 状态。从码树上还可以看到,从第四条支路开始,码树的各节点从上而下开始重复出现 s0,sl ,s2 ,s3 四种状态,并且码树的上半部和下半部分完全相同,这意

8、味着从第 4 位信息元输入开始,无论第 1 位信息码是“0”还是“1” ,对编码输出都没有影响,即输出码已经与第 1 位信息码元无关,这正是约束度 N=3 的含义。3.4 卷积码的网格图在码树中,从同一个状态节点出发的分支都相同。我们可以将状态相同的节点合并在一起,这样就得到了卷积码的另外一种更为紧凑的图形表示方法,即网格图。虽然状态图展示了状态的转移的去向,但不能记录状态转移的轨迹,网格图可以弥补状态图的缺陷。它可以将状态转移展开在时间轴上,使编码的全过程跃然纸上,是分析卷积码的有力工具。在网格图中,将码树中的上分支(对应于输入码元为“o” 的情况)用实线表示,下支路(对应于输入码元为“1”

9、的情况) 用虚线表示,并将编码输出标在每条支路的上方。网格图的每一行节点分别代表 s0,sl , s2,s3 四种编码器状态。(2 ,1,2)卷积码编码器的网格图如图 3-5 所示。图 3-5 卷积码的网状图在某一时间单位 i,离开每一状态的虚线分支,表示输入编码器的信息码元 mi=0 即输入为 0:而实线分支表示此时刻输入至编码器的信息码元 mi=l,即输入为 1。每一分支上的 2位数字,表示 i 时刻编码器输出的子组 ,因而网格图中的每一条路径都对应于(1)(2),Ciihighspeedlogic不同输入的信息序列。与码树一样,任何可能的输入码元序列都对应着网格图上的一条路径。例如输入至

10、图 3-5 中编码器序列 m=(1011100),对应的编码输出序列C=(11, 10, 00,01,10,01,11),它相应于图 3-5 中粗线条所示。3.5 卷积码的自由距离卷积码的自由距离,是用来衡量所有可能码字序列对之间的距离的。其定义为:整个编码码树上,所有半无限长序列之间的最小汉明距离。由于卷积码的自由距离直接决定了它的纠错能力,所以寻找具有最人白由距离的卷积码是一项非常重要的工作。不过对于卷积码的构造,目前除了计算机搜索外还没有其它更好的方法。下表是由奥登沃尔德和拉森采用计算机搜索方法得到的固定码率和约束长度时具有最大自由距离的卷积码。表 2-l 卷积码的自由距离与编码增益约束

11、长度 K 生成多项式 白由距离 编码增益 db3 (5,7) 5 4.264 (15,17) 6 5.235 (23,35) 7 6.026 (53,75) 8 6.377 (133,171) 10 6.998 (247,371) 10 7.729 (561,753) 12 7.78highspeedlogic第四章 维特比译码介绍4.1 维特比译码器的算法当前最流行的,最常用的卷积码译码算法式 A.J.维特比于 1967 年提出的维特比(Vietbri)算法,1973 年,富尼最终证明了维特比算法实质上就是卷积码的最大似然译码,这就是说,从似然的角度上看,这种算法已经式最优的了,维特比算法在

12、约束长度 K0input=input,zeros(size(1:k0-rem(length(input),k0);endn=length(input)/k0;highspeedlogicif rem(size(G,2),k0)0error(Error,G is not of the right size.)endL=size(G,2)/k0;n0=size(G,1);u=zeros(size(1:(L-1)*k0),input,zeros(size(1:(L-1)*k0);u1=u(L*k0:-1:1); for i=1:n+L-2u1=u1,u(i+L)*k0:-1:i*k0+1);endu

13、u=reshape(u1,L*k0,n+L-1);output=reshape(rem(G*uu,2),1,n0*(L+n-1);我们来验证输入的信号是否正确,加上输入的信号为:0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 通过卷积编码以后,得到信号:0 0 1 1 0 1 1 0 1 0 1 0 1 0 1 0 卷积编码比较简单,这里我们就不做详细介绍了。下面我们将介绍维特比译码的实现。5.3 维特比译码的 MATLAB 仿真与分析维特比译码的 MATLAB 代码如下所示:检验 G 的维数 if rem(size(G,2),k)=0error(Size of G and k

14、 do not agree)endif rem(size(channel_output,2),n)=0error(channle output not of the right size)endL=size(G,2)/k;number_of_states=2(L-1)*k);产生状态转移矩阵,输出矩阵和输入矩阵 for j=0:number_of_states-1highspeedlogicfor t=0:2k-1next_state,memory_contents=nxt_stat(j,t,L,k);input(j+1,next_state+1)=t;branch_output=rem(me

15、mory_contents*G,2);nextstate(j+1,t+1)=next_state;output(j+1,t+1)=bin2deci(branch_output);endendinput;state_metric=zeros(number_of_states,2);depth_of_trellis=length(channel_output)/n;channel_output_matrix=reshape(channel_output,n,depth_of_trellis);survivor_state=zeros(number_of_states,depth_of_trelli

16、s+1);row_survivor col_survivor=size(survivor_state);开始非尾信道输出的解码 i 为段,j 为每一阶段的状态,t 为输入for i=1:depth_of_trellis-L+1flag=zeros(1,number_of_states);if istate_metric(j+1,1)+branch_metric)|flag(nextstate(j+1,t+1)+1)=0)state_metric(nextstate(j+1,t+1)+1,2)=state_metric(j+1,1)+branch_metric;survivor_state(nextstate(j+1,t+1)+1,i+1)=j;flag(nextstate(j+1,t+1)+1)=1;endendendstate_metric=state_metric(:,2:-1:1);end开始

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号