维特比译码器的Verilog设计(一)----维特比译码原理
近期由于需要,在学习实现一个维特比译码器,以便对卷积码进行解码。在学习过程中有些心得体会在这里记录一下。
关于维特比译码
首先,维特比译码算法是一种最大似然译码算法,是最初由Viterbi在1967年提出的,用于对卷积码进行译码,关于其译码的过程,也并不复杂,通过网格图的方法可以快速地理解,只不过在实际实现的过程中有些问题需要引起重视。我们主要从以下几个角度来进行。
- 编码过程中的状态转移和网格图 ;
- 最大似然译码思路 ;
- 硬判决与软判决的路径度量 ;
- 译码过程
- 总结
1.编码过程中的状态转移和网格图表示
为了在之后借助网格图对译码过程进行理解,我们先以卷积码编码过程为例,简单回顾一下编码过程中的状态转移与网格图表示。
一个简单的卷积码编码器如下图所示
如上图所示的一个(3,1,3)卷积码编码器,待编码的数据输入至移位寄存器,然后通过模二加法器,得到三位的输出数据。我们将b2和b3视作状态,每个信元时间内输入的b1作为状态转换条件,控制4个状态之间的转换;这样,由于共有4个状态,每个状态根据当前信元时间内输入的比特可以转换为另外两个状态,每次状态的转换对应着一次编码结果的输出,共有8种编码输出的可能。具体的状态转换图如下。
在使用状态图描述卷积码编码器时,一共需要
2
N
k
−
1
2^{Nk-1}
2Nk−1个状态,每个状态通过输入比特0或1来实现
2
N
k
2^{Nk}
2Nk种编码结果。
此外,为了直观的了解整个编码过程,即每个信元时间内状态的转换情况与对应的编码,我们引入网格图,对于N*k=3的编码器来说,其状态只有4种,如下图所示。
在上图中,当最低位的移位寄存器依次输入比特"1 0 1"时,编码器经过了三次状态转换,依次输出了"100 101 110"编码结果,以此类推,我们只要得知了一个卷积编码器的结构参数和连接关系,就能够通过状态转换图判断编码情况。
2.最大似然译码思路
在了解了网格图在编码过程中的含义之后,我们仍然从网格图上的状态转移出发来理解最大似然译码。对于编码过程而言,我们可以根据输入的待编码的二进制序列来唯一的确定网格图上的一条路径;那么在译码的过程中,如果接收到接收码字之后,能在网格图上正确的得到路径编码时的路径,就能完成解码。那么对于这种译码方式,随之而来的我们需要解决两个问题
1)如何在网格图上得到路径
2)如何解决信道引入的差错
那么接下来我们针对这两个问题进行讨论,首先,我们先假设信号经过理想信道,即传输的过程中没有出现差错,我们仍然以上图中的序列举例。在数据接收端,依次接收到了"100 101 110"三组码元,
(1)在信元时刻1,从起始状态"00"开始有两种状态转移,各自对应的编码序列如下图所示。由于接收到的码元是100,因此该信元时刻对应的信息位为1
(2)在信元时刻2,从上一状态"10"开始有两种状态转移,各自对应的编码序列如下图所示。由于接收到的码元是101,因此该信元时刻对应的信息位为0
(3)在信元时刻3,从上一状态"01"开始有两种状态转移,各自对应的编码序列如下图所示。由于接收到的码元是110,因此该信元时刻对应的信息位为1
其实,整个译码的过程并不复杂,就是依次将每个接收码字在网格图中进行比较和选取。但是在实际的信道中,接收码字可能并不与当前状态的两条路径对应的编码码字相同,这时候,我们就需要引入对错误的度量,最终找到最小的错误的度量值所对应的路径,这条路径就是当前得出的最大似然路径,这条路径对应的信息位也最有可能正确,这就是最大似然译码的大致思路。对于“错误”的度量,我们通常有两种方式,即硬判决和软判决,它们对应着不同的接收机结构
3.硬判决与软判决路径度量
首先介绍一下硬判决和软判决,关于这两者最直接的区别在于,使用硬判决时,我们将接收到的电压信号通过一个固定的门限进行判定,得到离散的0和1的数字结果,直接进入译码器进行译码操作;而对于软判决而言,接收机将采样之后的电压信号进行量化,然后将结果送入译码器进行译码操作。这二者相比较而言,由于硬判决在将接收到的电压信号转化为离散的0和1的过程中,损失掉了一部分信息,所以会导致相同信道条件下的译码正确率的下降,或者说在同等正确率的情况下,硬判决对应的噪声门限会高一些,但是它的好处也显而易见,成本低,结构简单。
首先对于硬判决而言,我们采取两个码组之间的汉明距离来作为译码过程中的度量,即两个码组之间不同码元的个数。在译码过程中,我们引入两个变量:PM(path metric 路径度量)和BM(branch metric 分支度量);BM指的是每个状态在下一信元时刻转换为另外两个状态对应的两个分支路径上,预测的监督比特和接收到的监督比特之间的汉明距离,而PM指的是从初始状态至当前时刻的最可能路径上的所有预测的监督比特和接收到的监督比特之间的汉明距离。在维特比算法中,通过当前状态的PM和BM可以计算得到下一状态的PM。
在软判决中,由于输入译码器的是被量化的信号电压值,所以我们使用接收到的监督码元对应的电压和预测的监督码元对应的电压值之差的平方和作为度量。若某一时刻接收到的信号电压值为v1,v2,…,vn,对应的预测的监督码元的电压值为u1,u2,…,un,则每个状态的分支度量为
B
M
=
∑
i
=
1
n
(
u
i
−
v
i
)
2
BM=\sum_{i=1}^{n}(u_i-v_i)^2
BM=i=1∑n(ui−vi)2
对于码长为n的码组,其分支度量相当于n维空间中的欧几里得距离(便于记忆)。
4.译码过程
在译码的过程中,每个信元时间内,每个状态需要完成以下操作:
(1)将分支度量与上一时刻状态的路径度量相加。
(2)每一状态比较达到该状态的所有路径(每时刻每个状态只有两条这样的路径进行比较,因为只有两条来自前一时刻状态的分支)。
(3)每一状态删除其余到达路径,保留最小度量的路径(称为幸存路径),该路径对应于错误最少的路径。
接下来,我们以硬判决为例,借助分支度量BM和路径度量PM来分析整个译码的过程。我们仍用之前的例子加以说明。在某一时刻,接收机接收到了"100 111 110"三组码元。图中方框内的数字是该路径上的累计度量PM
(1)在初始时刻,状态从"00"开始,该状态的累计路径度量为0,其余状态的累计路径度量为无穷大。
(2)在信元时刻1,所有的四个状态都要比较到达该状态的两个分支路径对应的度量值,选取较小的,留下该路径,如下图中的箭头即为留下的路径,称作幸存路径。
(3)在信元时刻2和3,每个状态进行着类似的操作,具体过程如下两幅图所示。
在完成了所有状态的路径度量计算和路径选择之后,我们得到了最终四个状态的累计路径度量,可以看到第三个状态“10”的累计路径度量最小,所以可以从三个状态开始向前回溯,依次得到每个信元时刻对应的路径,如下图所示,这条路径是所有的可能路径中,产生的监督比特和接收到的监督比特差错最小的一条路径,因此根据最大似然路径译码,我们得出译码结果即为“101”。
5.总结
至此,关于维特比译码的基本概念和流程大致如此,接下来我们会从硬件实现的角度通过Verilog来实现维特比编码器,在最后的总结中会深入讨论维特比编码的纠错性能和误码率的问题。
由于本人能力水平有限,在文章中出现了什么错误或者纰漏,欢迎大家指出,另外如果有什么想法也欢迎讨论。