卷积码译码:硬判决维特比(Viterbi)译码

  • 卷积码的译码主要有 代数译码概率译码 两大类,其中代数译码采用类似于分组码的伴随式及其变形;概率译码又分为 维特比译码 和 序列译码两种方法,其中 维特比译码算法 是使译码错误概率最小的最大似然码算法,是最优算法。

硬判决 维特比 译码算法

  • 卷积码的码字序列 c 是输入信息序列 m 与编码器冲击响应 g 经过卷积的结果。码字序列 c 经过信号传输映射的结果 y 再经过调制后送到有噪信道传输,在接收端得到接受序列 r 。维特比译码算法 就是利用接受序列 r ,根据最大似然估计准则来估计发送的码字序列 y 。即寻找已知接受序列 r 的条件下使条件概率 p(r|y) 取得最大值时对映的码字序列 y 。
    对于码率为 R 的 (n0, k0, m) 卷积码,在每个时间单位并行输入 k 个信息元,同时并行输出 n 个码元。一般输入序列表示为
    在这里插入图片描述
    其中,下标 m 表示卷积码编码器中寄存单元的个数(即延时器的个数),L表示输入信息序列的长度。在实际应用上,最后增加 m 个码元为零元,目的是得到结尾码字,也即使编码器在编码结束时的状态回到初始全零状态。
    码序列表示为
    在这里插入图片描述
    类似的,接收序列 r 和估计序列 y 也有类似的表示形式
    在这里插入图片描述
    在这里插入图片描述
  • 对于最大似然译码,维特比算法选择使 p(r|y) 最大的 y 作为估计序列。如果假设信道是无记忆的,即噪声对每一位发送码元的影响都是独立不相关的,则条件改了吧 p(r|y) 就等于每个独立同分布接收码元条件概率的乘积,即
    在这里插入图片描述
    上式即为给定接受序列 r 的条件下序列 y 的似然函数。由于对数函数是一个单调递增函数,因此使 p(r|y) 最大化就等价于最大化 log [p(r|y)] ,为降低似然函数的计算复杂性,一般采用对数似然函数
    在这里插入图片描述
    为简化上式中的对数函数求和运算,可以定义如下码元度量。
    在这里插入图片描述
    其中,常数 a 、b的选取原则是是的码元度量值是或者尽可能接近于某个小的正整数。在二元对称信道上采用硬判决译码时可以用不同的方式定义常数 a、b。如下列举一种定义方式:

    在这里插入图片描述
    在这里插入图片描述
    其中,是二元对称信道的错误转移概率。这样,码元度量为
    在这里插入图片描述
    显然, p(ri(j)|/yi(j))的取值只可能是在这里插入图片描述在这里插入图片描述,因此码元度量的所有可能值如下所示:
M(ri(j)/yi(j))ri(j)=0ri(j)=1
译码输出码元yi(j) =001
译码输出码元yi(j) =110
  • 码元度量说明了接收码元和译码输出之间的相关度。例如,如果接受码元 ri(j)=0 且译码输出 yi(j) =0 ,则 M(ri(j)|yi(j))=0 ;但如果接收码元 ri(j)=1 而译码输出 yi(j) =0 ,则 M(ri(j)|yi(j))=1 。由此可见,这个码元度量实际上是一个代价函数,表示的是接收码元和译码输出之间的汉明距离。因此,如此定义的码元度量也称为汉明距离度量。这种情况下,维特比算法就是在编码网格图上选择与接收序列 r 之间汉明距离最小的码字序列作为译码输出,这是维特比译码就等价于最小汉明距离译码。
  • Viterbi 算法利用卷积码编码器的网格图来计算路径度量:首先给网格图中的每个状态节点指定一个部分路径度量值,这个部分路径度量值由从起始时刻 t=0 的初始状态到当前 k 时刻的状态决定。在每个状态,选择达到该状态的具有最好部分路径度量的分支。最好部分路径度量根据前述常数 a 和 b 的定义不同,可以是最大度量,也可以是最小度量。按照所采用的度量,选择满足条件的部分路径作为幸存路径,而将其他达到该状态的分支从网格图上删除。实际上,Viterbi算法就是在网格上选择从其实时刻到结束时刻的唯一幸存路径作为最大似然路径。染着最大似然路径,从结束时刻回溯到开始时刻,所走过的路径对应的编码输出就是最大似然译码输出序列。

硬判决 维特比 算法实现步骤

(1)用 Sk,t 便是编码器网格图中第 t 时刻的状态 Sk 。给网格图中的每个状态指定一个度量值 V(Sk,t) 并初始化: t=0,V(S0,0)=0,其他 V(Sk,t)=+∞。
(2)计算在 t 时刻到达 Sk 状态的所有路径的部分路径度量。首先通过计算汉明距离
在这里插入图片描述
得到 t 时刻的分支度量
在这里插入图片描述
然后,通过计算 V(Sk,t) + M(ri|yi) 来得到 t 时刻的部分路径度量
在这里插入图片描述
(3)将 V(Sk,t) 设置为 t 时刻到达 Sk 状态的最好部分路径度量。如果有多个最好的部分路径度量,可以选择其中任意一个。
(4)存储最好的部分路径度量及其相应的幸存路径和状态路径。
(5)若 t < L+m-1,返回步骤(2),否则读出幸存路径对应的标记作为译码结果输出。

硬判决 维特比 算法实现示例

  • 以(2,1,2)卷积码的译码为例。假设输入序列为:
    在这里插入图片描述则相应的码字序列为:
    在这里插入图片描述如果经过二元对称信道传输后得到的接受硬判决序列为:
    在这里插入图片描述其中,有下划线的两位出现了错误,下面通过 Viterbi 算法以最小汉明距离为准则实现译码,获得估计的信息序列和码字序列。
  • 如下图所示,给出了在编码器网格图上根据接受序列进行 Viterbi 译码的过程,图中用红线画出了每一时刻进入每一个状态的幸存路径。
    在这里插入图片描述
    由上图可以看出,在 t=2 时刻以前,进入每个状态的分支只有一个,因此,这些路径就是幸存路径。从 t=2 时刻开始,进入每个状态节点的路径有两条,按照最小距离准则,选择一条作为幸村路径保留。在 t=7 时刻,只剩下唯一一条幸存路径,即最大似然路径,与这条似然路径相对应的码字就是译码输出。显然,根据前述该输入序列的编码码字,可知获得的码字序列应为:
    在这里插入图片描述相应的译码输出信息序列为:
    在这里插入图片描述
  • 译码过程描述如下:
    在 t=0 时刻,状态 S0 的度量值为0,没有其他状态。
    在 t=1 时刻,在网格中有2个状态 S0 和S1 ,分别计算接收码字中第一组子码(10)与到达两个状态的输出码字(00)和(11)之间的部分路径度量值,分别是1和1。
    在 t=2 时刻,在网格图中有4个状态 S0 、S1 、S2 和 S3 ,分别计算接收码字中第2组子码(10)
    与到达这4个状态的输出码字(00)、(11)、(10)和(01)
    之间的分支路径度量值,分别为1、1、0 和 2,从而得到4个状态的部分路径度量值分别为 1+1=2、1+1=2、1+0=1 和 1+2=3。
    在 t=3 时刻,在网格图中有4个状态 S0 、S1 、S2 和 S3 ,到达每个状态有两条路径,分别计算接收码字中第3组码字(00)与到达每个状态的2条分支之间的分支度量值,选择最优的一个。例如,到达 S0 状态的两条分支对应的输出码字分别为(00)和(11),分支度量值分别是 0 和 2,因此选择 S0 -> S0 的分支,同时计算分支度量值为 2+0=2; 类似的,计算每个状态对应的分支度量值和部分路径度量值,得到该时刻4个状态的部分路径度量值分别为2、1、3 和 3。
    类似的,计算 t=4、5、6、7 时刻的部分路径度量值( t=6 时刻只有两个状态,t=7 时刻只有一个状态)。
    在 t=7 时刻后,到达最终状态节点的路径只有一条,该路径对应的码字即为 Viterbi 译码的译码输出。
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值