维特比译码器(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

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

如何安装HWE内核? Ubuntu安装hwe内核解决硬件太新的问题

《如何安装HWE内核?Ubuntu安装hwe内核解决硬件太新的问题》今天的主角就是hwe内核(hardwareenablementkernel),一般安装的Ubuntu都是初始内核,不能很好地支... 对于追求系统稳定性,又想充分利用最新硬件特性的 Ubuntu 用户来说,HWEXBQgUbdlna(Har