卷积编码和维特比译码

文章目录

  • 卷积编码
  • 维特比译码


卷积编码

卷积码是一种非分组码,通常适用于前向纠错。在分组码中,编码器产生的 n 个码元的一个码组,完全决定于这段时间中 k 比特输入信息。这个码组中的监督位仅监督本码组中 k 个信息位。卷积码在编码时虽然也是把 k 比特的信息段编成 n 个比特的码组,但是监督码元不仅和当前的 k 比特信息段有关,而且还同前面 m = (N -1) 个信息段有关,所以一个码组中的监督码元监督着N个信息段。通常将 N 称为编码约束度,并将 nN 称为编码约束长度。
一般说来,对于卷积码,k 和 n 的值是比较小的整数,且 n 大于 k,将卷积码记作 (n,k,N),码率定义为 k n \frac{k}{n} nk
编码器由三种主要的元件构成,包括 Nk 级移存器,n 个模2加法器和一个旋转开关。每个模2加法器的输入端数目可以不同,它连接到一些移存器的输出端,模2加法器的输出端接到旋转开关上,旋转开关每时隙旋转一周,输出 n 比特。将时间分成等间隔的时隙,在每个时隙中有 k 比特从左端进入移存器,并且移存器各级暂存的信息向右移 k 位。
卷积编码器一般原理方框图如下图所示。
在这里插入图片描述
一种 (3,1,3) 卷积编码器的方框图如下图所示。
在这里插入图片描述
根据上面方框图有:
c i = b i {c_i}={b_i} ci=bi
d i = b i ⊕ b i − 2 {d_i}={b_i}⊕{b_{i-2}} di=bibi2
e i = b i ⊕ b i − 1 ⊕ b i − 2 {e_i}={b_i}⊕{b_{i-1}}⊕{b_{i-2}} ei=bibi1bi2
其中, b i {b_i} bi为当前输入的信息位, b i − 1 {b_{i-1}} bi1 b i − 2 {b_{i-2}} bi2为移存器存储的前两位信息。
根据 M 3 M 2 {M_3M_2} M3M2的不同,定义的状态表如下。

M 3 M 2 {M_3M_2} M3M2对应的状态
00a
01b
10c
11d

移存器状态和输入输出码元的关系如下表所示。

移存器前一状态 M 3 M 2 {M_3M_2} M3M2输入 b i {b_i} bi M 3 M 2 M 1 {M_3M_2M_1} M3M2M1 c i d i e i {c_id_ie_i} cidiei移存器下一状态 M 3 M 2 {M_3M_2} M3M2
a(00) b 1 = 0 {b_1}=0 b1=0000000a(00)
a(00) b 1 = 1 {b_1}=1 b1=1001111b(01)
b(01) b 2 = 0 {b_2}=0 b2=0010001c(10)
b(01) b 2 = 1 {b_2}=1 b2=1011110d(11)
c(10) b 3 = 0 {b_3}=0 b3=0100011a(00)
c(10) b 3 = 1 {b_3}=1 b3=1101100b(01)
d(11) b 4 = 0 {b_4}=0 b4=0110010c(10)
d(11) b 4 = 1 {b_4}=1 b4=1111101d(11)

可以看到,状态a的下一状态只能是a或b,状态b的下一状态只能是c或d,状态c的下一状态只能是a或b,状态d的下一状态只能是c或d。
卷积码的几何表述可以分为码树图、状态图和网格图。
上面 (3,1,3) 卷积编码器对应的码树图如下图所示。
在这里插入图片描述
在码树图中,输入信息位为0,则状态向上移动,输入信息位为1,则状态向下移动。
可以看到,从第四级支路开始,码树的上半部和下半部相同,这意味着从第四个输入信息位开始,输出码元已经与第一位输入信息无关,即此编码器的约束度 N=3。而且在码树图上,通过输入信息位很容易读出编码之后的输出序列,比如输入序列为:1101,则输出序列为:111 110 010 100。读的时候,输入信息位为1则读下面支路,输入信息位为0则读上面的支路。
上面 (3,1,3) 卷积编码器对应的状态图如下图所示。
在这里插入图片描述
在状态图中,虚线表示输入信息位为1时状态转变的路线,实线表示输入信息位为0时状态转变的路线。
线条旁边的3位数字是编码输出比特,利用状态图也可以很容易的根据输入序列得到输出序列。读取的时候从a状态开始,输入为1读虚线上的3位作为输出,输入为0读实线上的3位作为输出,然后跳到下一状态接着读取。
上面 (3,1,3) 卷积编码器对应的网格图如下图所示。
在这里插入图片描述
在网格图中,虚线表示输入信息位为1,实线表示输入信息位为0。
可以看到,在第4时隙以后的网格图形完全是重复第3时隙的图形,这也反映了该卷积码的约束长度为 3。


维特比译码

维特比译码算法是维特比在1967年提出的,这种方法比较简单,计算快,故得到了广泛的应用。基本原理是:将接收到的信号序列和所有可能的发送信号序列比较,选择其中汉明距离最小的序列认为是当前发送信号序列。
在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。如0000和1111的汉明距离是4,0000和0101的汉明距离是2。
下面通过这个例子来说明维特比译码过程,假设发送的序列为 1101,编码之后的序列为 111 110 010 100。
由于这是一个 (n,k,N) = (3,1,3) 卷积码,发送序列的约束度 N = 3,所以首先要考察前 nN = 9 位,即 111 110 010,沿路径每一级有4种状态,每种状态只有两条路径可以到达,故4种状态共有8条到达路径,现在比较这8条路径的对应序列和接收序列 111 110 010 之间的汉明距离,列表如下。

路径对应序列汉明距离幸存与否
aaaa000 000 0006
abca111 001 0114
aaab000 000 1117
abcb111 001 1005
aabc000 111 0016
abdc111 110 0100
aabd000 111 1105
abdd111 110 1013

将到达每个状态的两条路径的汉明距离作比较,将距离小的一条路径保留,称为幸存路径(surviving path)。若两条路径的汉明距离相同,则可以保留任意一条,这样就只剩下4条路径。
接下来继续考察后继三位100,计算上述四条幸存路径增加一级后的8条可能路径的汉明距离,如下表所示。

路径原幸存路径的汉明距离新增路径新增距离总距离幸存与否
abca+a4aa(000)15
abdc+a0ca(011)33
abca+b4ab(111)26
abdc+b0cb(100)00
abcb+c5bc(001)27
abdd+c3dc(010)25
abcb+d5bd(110)16
abdd+d3dd(101)14

表中最小的汉明距离是0,对应的路径是abdcb,其对应的序列是 111 110 010 100,与输入的编码序列一致,故其对应的发送序列就是 1101,至此完成了译码。
如果序列中有少量的比特错误,也是可以完成译码的。
还是上面的这个例子,发送的序列为 1101,编码之后的序列为 111 110 010 100,假设接收到的序列中第4位和第11位发生了错误,即收到的序列为 111 010 010 110。
同样的方法列表分析,先考察前 nN = 9 位 111 010 010,比较8条路径的对应序列和接收序列 111 010 010 之间的汉明距离,列表如下。

路径对应序列汉明距离幸存与否
aaaa000 000 0005
abca111 001 0113
aaab000 000 1116
abcb111 001 1004
aabc000 111 0017
abdc111 110 0101
aabd000 111 1106
abdd111 110 1014

接下来继续考察后继三位110,计算上述四条幸存路径增加一级后的8条可能路径的汉明距离,如下表所示。

路径原幸存路径的汉明距离新增路径新增距离总距离幸存与否
abca+a3aa(000)25
abdc+a1ca(011)23
abca+b3ab(111)14
abdc+b1cb(100)12
abcb+c4bc(001)37
abdd+c4dc(010)15
abcb+d4bd(110)04
abdd+d4dd(101)26

表中最小的汉明距离是2,对应的路径仍然是abdcb,其对应的序列是 111 110 010 100,与输入的编码序列一致,故其对应的发送序列就是 1101,至此也完成了正确的译码。


以上就是卷积编码和维特比译码的所有内容了!
本文参考资料:
通信原理 / 樊昌信,曹丽娜编著

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/27350.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【马蹄集】第十四周作业

第十四周作业 目录 MT2134 泡泡MT2135 调整队伍MT2141 快排变形MT2142 逆序MT2143 线段树 MT2134 泡泡 难度:黄金    时间限制:1秒    占用内存:128M 题目描述 小码哥小时候喜欢吹泡泡,有一次他吹出了 n n n 个一样小的泡泡&…

SSM-Spring+SpringMVC+MyBatis框架的水果商城网站

项目介绍 主要功能: 前端用户购物端: ①角色信息:用户注册、用户登录、个人中心 ②个人中心:基本信息、我的订单、商品收藏、修改密码 ③首页管理:公告、留言、折扣大促销、热门商品 ④商品详情:收藏、加入…

使用阿里云OSS实现图片文件上传

说明&#xff1a;注册用户时&#xff0c;经常会用到上传头像。文件的上传/接收与一般文本数据不同。 一、创建Demo页面 先准备一个Demo页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>图片上传…

影响电磁铁磁力大小的因素有哪些

影响电磁铁磁力大小的因素主要有四个&#xff0c;一是缠绕在铁芯上线圈的圈数&#xff0c;二是线圈中电流的强度&#xff0c;三是缠绕的线圈与铁芯的距离&#xff0c;四是铁芯的大小形状。 首先要了解电磁铁的磁性是如何产生的&#xff0c;通电螺线管的磁场&#xff0c;由毕奥&…

总结895

学习目标&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲&#xff0c;背诵15篇短文&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化3讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 每日必复习&#xff08;5分钟&#xff09;…

JMM如何实现volatile写/读的内存语义

内存屏障类型表 StoreLoad Barriers是一个“全能型”的屏障&#xff0c;它同时具有其他3个屏障的效果。现代的多处理器大多支持该屏障&#xff08;其他类型的屏障不一定被所有处理器支持&#xff09;。执行该屏障开销会很昂贵&#xff0c;因为当前处理器通常要把写缓冲区中的数…

基于html+css的图展示112

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

【图书推荐 | 13】后端系列

【赠书活动第十二期 】 图书推荐 本期书籍&#xff1a;后端系列 图书列表 本期图书列表&#xff1a; Spring Cloud 微服务快速上手项目驱动零起点学JavaNode.js 从基础到项目实战Diango Web 开发实例精解Flask Web 全栈开发实战精通Hadoopsmysql 数据库基础与实战应用Neo4j 图谱…

【Hive】安装配置及导入Hdfs数据

知识目录 一、写在前面&#x1f495;二、Hive的安装与配置✨2.1 Hive简介2.2 上传与解压2.3 拷贝MySQL驱动2.4 hive-site.xml文件2.5 启动hive 三、导入Hdfs数据到Hive✨3.1 修改Hadoop集群配置3.2 初始化3.3 创建表3.4 从Hdfs导入数据 四、总结撒花&#x1f60a; 一、写在前面…

MySQL-索引详解(上)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️树高千尺&#xff0c;落叶归根人生不易&…

Qt(C++)绘制指针仪表盘显示当前温度

一、功能介绍 当前文章要实现的功能: 使用Qt绘制一个仪表盘,用来显示当前的温度,绘制刻度、绘制数字、绘制温度指针。仪表盘全程使用QPainter进行绘制,QPainter是Qt框架中非常重要的一个类,绘制功能的实现离不开它。如果想要使用Qt进行高质量的绘图或UI设计,必须掌握QP…

Django新手必看:如何创建应用和定义数据表。(详细讲解)

Django新手必看&#xff1a;如何创建应用和定义数据表。 1. Django创建应用1.1 创建应用1.2 应用的添加 2. Django ORM2.1 定义数据表2.2 定义项目数据表2.3 通用字段选项2.4 外键使用2.5 应用数据库迁移 &#x1f3d8;️&#x1f3d8;️个人简介&#xff1a;以山河作礼。 &…

学习HCIP的day.11

目录 十一、BGP的属性 1、权重属性 2、本地优先级 3、as-path 4、起源属性 5、MED --多出口的鉴别属性 十二、BGP选路规则 十三、BGP的社团属性 十四、BGP的在MA网络中的下一跳问题 五、BGP的认证 十一、BGP的属性 BGP协议在选路时&#xff0c;先对比属性&#xf…

Java(30天拿下---第一天)

Java开发&#xff08;30天拿下---第一天&#xff09; 一 hello world以及JDK,JRE,JVM二 转义字符三 注释四 代码规范五 DOS命令&#xff08;了解&#xff09;六 变量1.加号的使用2.数据类型整型浮点型字符类型布尔类型自动类型转换强制类型转换String类型 七 API文档 一 hello …

ASP.NET Core Web API入门之一:创建新项目

ASP.NET Core Web API入门之一&#xff1a;创建新项目 一、引言二、创建新项目三、加入Startup类&#xff0c;并替换Program.cs内容四、编辑Program.cs代码五、修改控制器的路由六、运行项目 一、引言 最近闲着&#xff0c;想着没真正从0-1开发过ASP.NET Core Web API的项目&a…

softmax之温度系数

1.数学表示 这是传统的softmax&#xff1a; q i e x p ( z i ) ∑ j e x p ( z j ) q_i \frac{exp(z_i)}{\sum_jexp(z_j)} qi​∑j​exp(zj​)exp(zi​)​ 或者写&#xff1a; q i e x p ( z i ) / 1.0 ∑ j e x p ( z j / 1.0 ) q_i \frac{exp(z_i)/1.0}{\sum_jexp(z_j/…

七、进程地址空间

一、环境变量 &#xff08;一&#xff09;概念 环境变量(environment variables)&#xff1a;系统当中用做特殊用途的系统变量。 如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我们的所链接的动态静态库在哪里&#xff0c;但是照样可…

vue3---模板引用 nextTick

目录 模板引用--ref 访问模板引用 v-for 中的模板引用 函数模板引用 组件上的 ref 简单理解Vue中的nextTick 示例 二、应用场景 三、nextTick源码浅析 实战 --- vue3实现编辑与查看功能 模板引用--ref 虽然 Vue 的声明性渲染模型为你抽象了大部分对 DOM 的直接操作&…

LeetCode - 15 三数之和

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满…

Cmake工具的简单使用

引言 本篇文章讲述如何简单的使用cmake工具构建一个项目&#xff0c;帮助入门的c新手学会如何使用cmake. 我们在Clion新创建一个项目时&#xff0c;会发现&#xff0c;除了main.cpp文件之外&#xff0c;还存在一个build-debug目录和一个CMakelists.txt文件&#xff0c;如图: …