一、Viterbi译码原理
Viterbi 算法是基于卷积码网络图的最大似然译码算法,根据已经接收到的信息,得到最接近编码码字的一种译码码字。一般采用汉明距离作为判决指标。具有最小汉明距离和的路径就是译码的最大路径,该路径被称作幸存路径。Viterbi 译码算法步骤如下:
① 在时刻 l=L-1 之前,计算每一个状态单个路径分支度量。时刻 l=L-1 时,网络图充满状态,路径存储器 PM 和路径度量存储器 MM 在时刻 0 到时刻 L-1 进行初始化。
② 从时刻 l=L 开始,计算进入每一状态的单个路径的部分度量值,并储存每一状态下的幸存路径及其度量值。
③ 时刻 l 增加,将进入某一状态的分支度量值与前一时间段的幸存度量值相加,然后计算进入该状态的所有最大度量的路径,决定且储存新的幸存路径及其度量,然后删去其他路径。
④ 重复步骤③的计算、比较、判决过程。若输入接收序列长为(2L-1)k,则译码进行值该时刻为止。
上述即为 Viterbi 译码的步骤。译码算法核心可以归纳为“加、比、选”:
① 加:将每个路径的分支度量进行累计。
② 比:将到达节点的两条路径进行对比。
③ 选:选出到达节点的两条路径中度量值小的一条路径作为幸存路径。
根据上述 Viterbi 译码原理,我们可以得到这样的译码过程:
当步骤进行完毕,将会存在唯一一条幸存路径,便可以得到译码结果。
二、Viterbi译码的相关概念
- 分支度量(BM, Branch Metric),对于网格中每个路径,分支度量表示其对应的输出码字与接收到的码字之间的差距。
- 路径度量(PM,Path Metric) 网格中每个状态节点而言,对应所有到达该节点所走过的最有可能路径的分支度量值的累计结果。Viterbi译码过程的关键是,译码器可以使用分支度量和先前计算的状态路径度量递推地计算当前状态的路径度量.
- 硬判决(Hard decision) 是指接收端根据其判决门限对接收到的信号波形直接进行判决后输出0或1,也就供给译码器作为译码用的每个码元只取0或1两个值,以序列之间的汉明距离作为度量进行译码。适用于二进制对称信道(BSC).
- 软判决(Soft decision) 是指接受端对采样点直接输出模拟量,进行多电平量化(不是简单的0、1两电平量化)形成多比特的数字量,然后送往译码器,即编码信道的输出是没有经过判决的“软信息”。软判决译码器以欧几里德距离作为度量进行译码,软判决译码算法的路径度量采用“软距离”而不是汉明距离,最常采用的是欧几里德距离,也就是接收波形与可能的发送波形之间的几何距离,是一种适合于离散无记忆信道(DMC)的译码方法。
三、设计思路
综合上述原理,我们可以得到如下图所示的 Viterbi 译码电路设计图
如上图所示,译码电路可以大致分成上这几个部分,包括分支度量模块 BMG、加比选
模块 ACS、回溯模块 TBU、存储管理模块 MMU、控制模块 Control、存储单元 RAM。即五个核心单元,外加存储器 RAM。
其中,BMG-ACS-TBU 是一条主要路径,而 MMU 与 RAM 存储单元作为辅助模块为主要路径提供存储帮助。Control 模块则提供了各个模块需要的控制信号。
-
BMG
计算分支度量BM:即计算进入该状态的两个路径的分支度量(BM),即接收到的码元与两个路径对应的输出码元之间的汉明距离(硬判决)或欧几里得距离(软判决)。 -
ACS
计算路径度量PM:把两个路径的BM同各自对应的t-1时刻状态所存储的状态度量进行求和,得到t时刻的两个路径度量PM。
选取幸存路径: 比较两个路径度量PM,选取并保留最小的作为t时刻的状态度量,同时保留与之对应的路径作为形成路径。如两个相等,则任选其一作为幸存路径。 -
TB
回溯(Traceback): 从各个状态的形成路径中选取出状态度量最小的一条,顺次向前进行回溯,并输出译码结果(即相应寄存器状态的最高位)。 -
RAM 模块
存储每个状态记录的当前累计路径度量PM(由于每次计算的路径度量会经过比较舍弃差的路径,实际存储的相当于状态度量),所以(n, k, L) 卷积码的译码需要 2 L 2^L 2L个寄存器记录状态度量。
译码回溯深度,一般为m的5-10倍,m为寄存器个数,回溯深度越大误码率越低,但相应会导致延时的增加。如果回溯深度为N,则需要深度为N,宽度为 2 L 2^L 2Lbit的存储器存储幸存路径。
emnnn,具体工程文件后续上传吧,,
参考:
翻译 | 卷积码的维特比(Viterbi)译码
Viterbi译码算法及实现
卷积码文章来源:https://www.toymoban.com/news/detail-485296.html
软判决与硬判决的区别文章来源地址https://www.toymoban.com/news/detail-485296.html
到了这里,关于Verilog | 维特比译码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!