【详解】【通信编码】Vertibi算法实现卷积码解码

前言

最近真是忙忙的咧,数一数真是九门功课同步学,而且五门硬课(考前突击致挂率很高的那种)。再加上老前辈的肺腑之言——基础才是本科生该关注的。所以看完基础编程的《Unix网络编程》也将告一段落辣,待我打好基础再与你一战!
言归正传,接下来将讨论的Vertibi编码依然来自通信编码老师的课后作业。现在时间不早了咱就省掉前戏了。

原理

关于Vertibi算法的原理,网上相关的资料很多,况且来看这篇文章的同学对原理应该不陌生,在这里只是简单提提。我们以(2,1)卷积编码器为例,其核心可用下面几幅图表示
这里写图片描述

  • 每个卷积编码器可用状态转移来表示,因此图中a,b,c,d代表编码器所处的4个状态,而j表示时刻,实线表示输入为1,虚线表示输入为0,而线上的数字表示输入对应的输入;打个比方,图中(a,0)点到(c,1)点的连接表示:当输入为0时,寄存器的状态从0时刻的a(我们设为两个寄存器的状态全为0,记为00)到1时刻的c(记为10),且伴随着输出为11

而Vertibi译码则是从上图中找出一条路,使这条路径对应的输出序列与输入序列的汉明距离最小(既“最像”)

面对这种问题,我们首先想到的便是树的深度遍历,既找出所有路径然后看看谁“最像”。然而。Vertibi就是靠这个成为南加州大学知名校友,创立高通公司,并且成功让系主任花半节课将他的生平,自然有其妙♂处。

请看下图
这里写图片描述

它阐述了一个定理:如果P是最短路径,对于P上任意一点x,P1一定是最短路径。
这个定理可以很轻松的用反证法证明

之后的东西好难用语言描述所以我们直接看伪代码吧
这里写图片描述

在这里做些解释
首先定义路径长度为两个状态转移时的输出序列与相应的输入序列的汉明距离

  • u[j][s]代表J时刻到达s状态的累计路径长度
  • l[t][s]代表从t状态转到l状态的的路径长度
  • B[s]代表s状态的对应解码序列

由于最后路径会回到a状态(既寄存器为00状态),因此按照以上方法执行后,B(a)即为结果

C代码


int v
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值