你应该知道的维特比译码

嵌牛导读:维特比译码是一种高效的卷积码译码方法,该方法由Andrew Viterbi 发明,并以他的名字命名。

嵌牛鼻子:Viterbi译码

嵌牛提问:维特比译码的性能相比分组码等其他编码的译码性能究竟好在哪里,如何来评估?编码约束度和监督位数量对维特比译码的性能是如何产生影响的。

嵌牛正文:

在接收端,我们有一组对应于发射监督比特的电压采样序列。为简单并不失一般性,我们将假设接收端获得了最佳采样点(或者一组采样集的均值对应一个监督位),通过与阈值比较判为“0”或“1”(解映射),并将判决结果传递给译码器。在没有关于采样点和译码器其它信息的情况下,译码过程被称为硬判决译码。

下面简述硬判决维特比译码:

译码算法使用两个度量:分支度量(branch metric,BM)和路径度量(path metric,PM)。分支度量计算的是发射和接收内容之间的“距离”,它是为网格中的每条分支路径定义的。在硬判决译码中,给出一组已经数字化的接收监督比特,分支度量就是监督比特预测值和接收监督比特之间的汉明距离。下图展示了一个示例,其中接收的位为00,对于每个状态转移,分支路径上的数字显示该转移的分支度量。其中有两条路径的分支量度为0,对应于汉明距离为0的唯一状态和转移关系,其他非0分支量度对应于存在位错误的情况。

图1

路径度量值与网格中的状态相关联。对于硬判决解码,它对应于网格中从初始状态到当前状态的最可能路径与接收监督比特序列间的汉明距离。“最有可能”是指在计算从初始状态到当前状态之间的所有可能路径度量后,取汉明距离最小的那条。

维特比算法的关键点在于,接收机可以使用分支度量和先前计算的状态路径度量递推地计算当前状态的路径度量。

计算路径度量

假设接收机已经在时刻i计算好每个状态s的路径量度PM[s,i](设卷积码的编码约束度为K,则状态数为2^(K-1))。在硬判决译码中,PM[s,i]的值是在接收监督比特与最可能发送的消息进行比较时得到的差错比特总数(通常我们将状态“00”作为起始状态)。

在时刻i的所有可能状态中,最可能的状态是具有最小路径度量的状态。如果具备最小路径度量的状态不止一个,那它们拥有相等的可能性。

现在,我们如何确定时刻i+1下每个状态s的路径度量PM[s,i+1]呢?要回答这个问题,首先要注意的是,对于i+1时刻的状态s,它必须由i时刻的两种可能状态中的一个中转移而来。这两个之前状态记为α和β,并且对于给定的状态s,它们是固定的。实际上α和β仅由卷积码的编码约束度决定,与生成多项式无关。图2显示了每个状态的之前状态(箭头的另一端),该例中,对于状态00,α= 00 ,β= 01;对于状态01,α= 10 ,β= 11。

任何使得发射机在i+1时刻处于状态s的信息序列必定使得发射机在i时刻位于状态α或β。例如,在图2中,在时刻i+1时到达状态01,必定符合以下两点之一:

1. 发射机在时刻i位于状态10,且第i个信息比特为0。在这种情况下,发射机输出监督位11。由于接收比特为00,因此将产生2位误码,新的状态路径度量PM[01,i+1] = PM[10,i] + 2。

2. 发射机在时刻i位于状态11,且第i个信息比特为0。在这种情况下,发射机输出监督位01。由于接收比特为00,因此将产生1位误码,新的状态路径度量PM[01,i+1] = PM[11,i] + 1。

通过上面直观的分析,我们看到:


图2

寻找最大似然路径

现在我们可以来描述译码器是如何找到最大似然路径了。初始时,状态00代价为0,其它2^(k-1)-1个状态代价为正无穷(∞)。

算法的主循环由两个主要步骤组成:首先计算下一时刻监督比特序列的分支度量,然后计算该时刻各状态的路径度量。路径度量的计算可以被认为是一个“加比选”过程:

1.将分支度量与上一时刻状态的路径度量相加。

2.每一状态比较达到该状态的所有路径(每时刻每个状态只有两条这样的路径进行比较,因为只有两条来自前一时刻状态的分支)。

3.每一状态删除其余到达路径,保留最小度量的路径(称为幸存路径),该路径对应于错误最少的路径。

一直采取这样的方法直到最后产生一条路径,所判决出来的的码即是译码结果。

你可能感兴趣的:(你应该知道的维特比译码)