维特比译码器(Viterbi Decoder)硬件架构(一)--卷积码及编解码算法介绍

本文主要是介绍维特比译码器(Viterbi Decoder)硬件架构(一)--卷积码及编解码算法介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 卷积码(convolution code)

卷积码在无线通信里用的非常广泛,通常卷积码编码器开始工作前都要进行初始化,按编码器的初始状态不同可以分为两类:

1.1 末尾补零卷积码(Tail-bits)

通常卷积码编码器开始工作时都要进行初始化,编码开始前将编码器的所有寄存器单元都进行清零处理。而在编码结束时,需要添加0到码流末尾(Tailed Termination),使编码器状态归零, 这即是末尾补零卷积码。相对于编码比特而言,添加的末尾比特增加了编码开销。

1.2 咬尾卷积码(Tail biting)

咬尾卷积编码是一种特殊的卷积编码,它通过将编码器的移位寄存器的初始值设置为输入流的末尾比特值,使得移位寄存器的初始和最终状态相同。编码器开始工作时要进行特殊的初始化,将输入信息比特的最后m个比特依次输入编码器的寄存器中,当编码结束时,编码器的结束状态与初始状态相同。由于这个编码方法没有出现尾比特,因此称为咬尾编码。
      咬尾编码减少了尾比特的编码开销。对于咬尾编码方法,在译码过程中,由于编码器的初始状态和结尾状态是未知的,因此就需要增加一定的译码复杂度,才能确保好的译码性能。和普通的卷积编码相比,咬尾的方案最大的优点是克服了编码时的码率损失,并且适合迭代译码,不过付出的代价是译码复杂度的增加。

2. 编码过程

通常以 (n, k, L) 来描述卷积编码,其中:
              • k 表示编码器的 输入码元数
              • n 表示编码器的 输出码元数
              • L表示编码器的 约束长度
       由输入的 k 个信息比特,得到 n 个编码结果,所以 编码效率 = k/n。约束长度 L 的意思是,编码结果不仅取决于当前输入的 k 比特信息,还取决于前 (L-1) 段时间内的信息位。在 k = 1 的条件下,编码器需要的 移位寄存器级数 m = L - 1。例如,LTE 标准中编码器的结构如下图所示:

图中的 G1,G2, G3 是 生成式。

假设输入的比特流为 c1, c2, c3, ... 得到的编码结果为 d1, d2, d3, ...

2.1 对于tail-bits卷积码:

  • 其中移位寄存器 D 从左到右一次是 S0, S1, ... S5。对其初始化时,S0 = 0, S1 = 0, ... S5 = 0。

  • 进行编码时,有抽头的寄存器之间进行模 2 加法(即异或)运算。每次对一个输入信息完成编码之后,移位寄存器右移一位,抛弃最右端的移位结果,采用前一个输入作为最左端的信息位。

  • 当最后的码流比特进行编码完之后,编码器需要额外输入6个bit 0,使其恢复到初始状态,同时将额外产生的6bit输出放进输出码流末尾,一同发送到接收端。

2.2 tail-biting卷积码

  • 其中移位寄存器 D 从左到右一次是 S0, S1, ... S5。对其初始化时,S0 = Ck-1, S1 = Ck-2, ... S5 = Ck-6。
  • 进行编码时,有抽头的寄存器之间进行模 2 加法(即异或)运算。每次对一个输入信息完成编码之后,移位寄存器右移一位,抛弃最右端的移位结果,采用前一个输入作为最左端的信息位。
  • 当最后的比特进行编码完之后,寄存器又回到了设定的初始状态,就像一条蛇咬住了自己的尾巴,所以称为 咬尾 Tail Biting。

2.3 tail-bits和tail-biting的优缺点 

  • tail-bits的优点:(1)开始状态和结束状态对解码器来说是已知的,解码复杂的相对低些。  2)bit error rate (BER) 不受末尾补零操作的影响
  • tail-bits的缺点:(1)由于额外增添了一些bit需要发送,降低了传输码率。 (2)额外增添的bit需要消耗额外的发送时间,轻微降低了 Eb/No, Eb是energy-per-bit, No是noise-power0spectral-density。
  • tail-biting的优点:(1)码率不受影响。 (2)不影响bit error rate (BER) 。
  • tail-biting的缺点:(1)初始状态对解码器不可知,需要解码器花时间训练,来找到正确的开始状态和初始traceback状态,这样便增加了解码延时 (2)解码器复杂的相对较高。

 

 3. 状态转移图(State Diagram)

用状态转移图也可以描述编码过程,下图为(1,2,2)卷积编码器的状态转移图.

1)当前状态是’00‘,如输入为’0‘, 输出为’00‘

 

2)当前状态是’00‘,如输入为’1‘, 输出为’11‘

 


参考文献

LTE 咬尾卷积编码器的 Matlab 、C 语言及 FPGA 实现

Encoding/Decoding - Presentation of Convolutional Code


本博客所有文章均同步发表于www.mx1980.cn/blog

这篇关于维特比译码器(Viterbi Decoder)硬件架构(一)--卷积码及编解码算法介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/385007

相关文章

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为