最近做了一个卷积码编译码器的设计,查资料的时候感觉资料其实很多但是比较深奥。这里想做一个通俗易懂的分析。也给自己做个笔记。希望能看懂。
卷积码编码器
卷积码的主要作用是给通信序列增加冗余,建立信息间的联系,从特定的关系中找到序列中的误码。编码器就是给序列增加冗余的器件。
卷积码的一般表达为(n,k,m)卷积码。
n指编码器的输出位数
k指编码器的输入位数
m指该卷积码的约束长度
输入位数和输出位数可以计算出卷积码的码率R=k/n
(我的理解是卷积码经过编码后消息中实际有效的信息所占比值)
卷积码编码器的设计中有一个可以自己设定的重要向量:生成多项式
一般有几个输出位数,就有几个生成多项式;约束长度多大,生成多项式的维度就是几。
以(2,1,3)卷积码为例。生成多项式有两个g1,g2。想要知道生成多项式的表达式,可以很直观的在卷积码编码器的结构图中得到。
结构图里的d0 d1 d2记为卷积码编码器的移位寄存器。输入的序列会最先存入d0,然后向d1 d2转移。观察移位寄存器和模二加法器的连接就可以得到卷积码编码器的生成多项式:g1=(1 1 1),g2=(1 0 1),有连接记为1,无连接记为0。
知道了生成矩阵,就可以对序列进行编码了。总的来说就是按照输入的顺序根据生成多项式进行模二加。
上图的卷积码的计算公式就是
c1 = d0 ⊕ d1 ⊕ d2;
c2 = d0 ⊕ d2
将生成多项式按二进制向八进制转换得到g1=7,g2=5。这个就是卷积码编码器的转移矩阵[7,5]。
维特比译码
维特比译码算法的基本步骤如下:
(1)从某一时刻开始,计算当前路径的分支度量,并将分支度量与路径对应的前一状态的汉明距离相加。每个状态拥有2K条输入路径,选取最小汉明距离的路径(此路径称为幸存路径),并保存此时刻各状态幸村路径的汉明距离。
(2)重复步骤(1),当时刻到达设定的回溯深度或者输入序列结束时,开始对幸存路径进行译码,即比较当前时刻各个状态的汉明距离,选区最小的状态作为反向译码起始位置,开始译码。
(3)重复步骤(2),直到输入序列完成即止。
维特比译码算法的核心思想是“加-比-选”,加指将前一时刻的汉明距离与当前路径的分支度量距离相加;比指将到达此时刻状态的路径的汉明距离相比较,选择汉明距离最小的路径作为幸存路径;选指比较一段时间后将到达当前时刻的所有状态的汉明距离相比较,选取汉明距离最小的状态反向译码。
具体流程:
同一个回溯周期内,一个时刻中每个状态经过汉明距离的对比会保存一条到达该状态的路径,回溯周期结束后,对比当前时刻状态中保存的汉明距离的大小,从最小汉明距离的状态开始反向译码,网格图里面的理解就是虚线就判1,实线就判0。
汉明距离是指数据与对应路径的预备数据不同的个数。如上述译码过程中,输入的第一组数据是11,状态a的两条路径的预备数据分别是00和11,则从状态a到下一个时刻的状态a的路径的汉明距离是2,从状态a到下一个时刻的状态c的路径的汉明距离是0。两条路径中汉明距离小的路径是到达状态c的路径,所以这条路径就被保存下来了。这样保证了回溯前到达每个状态的剩余的路径有且仅有一条,进行回溯时,能找到唯一的路径进行译码。