viterbi解码算法简介

这篇文章就简单复习一下卷积码和Viterbi解码算法。

编码结构

线性分组码码的每个分组是独立的, 并没有相关性。卷积码却不同, 类似卷积运算, 每个分组相互影响, qi结构如下所示:

常用[n,k,L]来简单表示卷积码:其中n代表的是输出bit, k代表的是输入bit, L代表的是约束长度。在上面图中的卷积码就可以表示为: [2, 1, 3]

有下面的关系成立:

m代表encoder中寄存器的个数, 在本例中是2, 所以编码器有$2^2 = 4$种状态。

上面所示的卷积码的表示可以用状态图表示:

也可用网格图(Treils)表示:

加入输入的bit是0 1 0 1 , 那么状态迁移的顺序就是如下图所示:

产生的输出就是:

译码过程

假设上述的4个状态为:

译码的条件是已知编码器初始状态和输出处于S0。根据前面所述, 如果没有产生误码, 可以根据输入的数据回溯出路径,然后译出信息bit。

如果输出流的的前两位有00误码成为01, 那么根据上面的网格图就无法判断哪个路径是正确的,因为实际是00和11。 那么译码器就会先把这两条路径保存起来。

在往前一步, 就又有两个路径, 一直到保存8个路径再进行第一个信息bit的判决。

为什么是8呢? 因为译码器的约束长度是8, 每个bit参与了3个节拍的编码后就移除编码器了。 所以Viterbi译码每次判决都要计算$2^L$的距离。

在这8个存活路径中, 按照最大似然的原则给出1条最佳路径。 具体来看,Viterbi译码器有3步:

  • Branch metric

    对于硬判决来说, Branch metric主要计算的是hanmming 距离:比如收到的bit对是‘11’, 那么就和treil中的输出计算距离,和{00, 01, 10, 11}的距离分别是{2, 1, 1, 0}

  • Path Metrc

    根据branch metric计算存活路径的path metric。

如下图所示:

硬判和软判

软判Viterbi在计算Branch metric时, 计算的是euclidean距离, 以BPSK AWGN 信道为例子, 那么BER性能如下图: