卷积编码和维特比译码

news2024/11/27 18:41:03

文章目录

  • 卷积编码
  • 维特比译码


卷积编码

卷积码是一种非分组码,通常适用于前向纠错。在分组码中,编码器产生的 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,至此也完成了正确的译码。


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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Calico介绍

Calico 是一个基于 BGP 的纯三层的网络方案,与 OpenStack 、Kubernetes 、AWS 、GCE 等云平台都能够良好地集成 。 Calico 在每个计算节点都利用 Linux Kernel 实现了一个高效的 vRouter 来负责数据转发 。每个 vRouter 都通过 BGP 协议把在本节点上运行的容器的路由…

msf渗透练习-php后门反弹

说明: 本章内容,仅供学习,不要用于非法用途(做个好白帽) (一)后门反弹是什么 后门反弹是指攻击者在成功入侵一台计算机后,在目标计算机上安装一个“后门程序”,将该程序…

内网安全:横向传递攻击(SMB || WMI 明文或 hash 传递)

内网安全:横向传递攻击. 横向移动就是在拿下对方一台主机后,以拿下的那台主机作为跳板,对内网的其他主机再进行后面渗透,利用既有的资源尝试获取更多的凭据、更高的权限,一步一步拿下更多的主机,进而达到控…

解决语言障碍:如何将Axure变为中文版?

Axure 是一款备受称赞的原型设计工具,被誉为 "交互神器"。然而,在国内,一些设计师对于使用 Axure 有所犹豫,其中语言环境不适应是主要的顾虑之一。在本文中,我们将探讨一种更适合国内设计师的 Axure 中文版即…

网工内推 | 国企专场,补贴福利多,CCNP认证以上优先

01 凯盛数智信息技术科技(上海)有限公司 🔷招聘岗位:网络工程师(IT工程师) 🔷职责描述: 1、负责公司数据中心机房、服务器及网络设备的管理和维护工作; 2、负责公司基础…

微信小程序实用工具——渐变色按钮(二)

今日推荐💁‍♂️ 今年的国美毕业展已经开始了🧑‍🎨🧑‍🎨在杭州的小伙伴可以快速出击了🏃‍♂️🏃‍♂️ 这里我想推荐其中的一副版画作品《突围》 在众多版画系作品中被它所吸引 文章目录 今…

【linux离线升级gcc版本---gcc4.8.5-->gcc12.2.0】

【linux离线升级gcc版本---gcc4.8.5-->gcc12.2.0】 🔻 一、gcc简介🔻 二、gcc下载上传🔻 三、查看和安装gcc-12.2.0需要的依赖3.1 🍁 查看gcc-12.2.0所需依赖库3.2 🍁 安装gmp、mpfr、mpc、isl &#x1f53…

DJ4-8 抖动与工作集

目录 4.8 抖动与工作集 1、缺页率对有效访问时间的影响 2、CPU 利用率急剧下降的原因 3、抖动 4、工作集模型 5、抖动的预防 4.9 请求分段存储管理方式 4.9.1 请求分段中的硬件支持 4.9.2 分段的共享与保护 4.8 抖动与工作集 1、缺页率对有效访问时间的影响 有…

总建面64万平,配3所幼儿园+54班九年制学校,坪山江岭竹元规划

近日,坪山区城市更新和土地整备局发布,关于《坪山区马峦街道江岭竹元片区城市更新单元规划》已通过深圳市城市规划委员会法定图则委员会审批。现予以公告。 项目位于坪山区马峦街道,南邻南坪快速路,北邻比亚迪路,东西两…

一种新型智能优化算法—鼠群优化(RSO)算法

目录 一、RSO理论基础 二、RSO数学模型 2.1 追逐猎物 2.2 攻击猎物 三、RSO流程图 四、运行结果 鼠群优化(Rat Swarm Optimizer,RSO)算法是由Dhiman G等人于2020年提出,主要启发于老鼠追逐和攻击猎物的种群行为。该优化算法具有结构简单&#xf…

DJ4-2 程序的装入和链接

目录 4.2.1 程序的装入 一、绝对装入方式 二 、可重定位装入方式 三、动态运行时装入方式 4.2.2 程序的链接 一、静态链接 二、装入时动态链接 三、运行时动态链接 在多道程序环境下,如果程序要运行,那么必须为之创建进程。而创建进程的第一件…

六级备考8天|CET-6|阅读强化2|19:30~21:00

目录 正确选项两大标准 练习 问题一 问题二 问题三 问题四​ 问题五 ​ 正确选项两大标准 1. 定位准确 2. 改写正确 举例: 练习 问题一 immediate vicinity oftoo close unprecedented 前所未有的; 问题二 主语:a global campaign 谓…

解决问题 Could not obtain transaction-synchronized Session for current thread

一、问题现象 在使用Hibernate的项目中,在一个定时任务中,执行某段代码,满足条件后,更新表数据。 程序在执行到更新表数据的时候,报错如下: Could not obtain transaction-synchronized Session for cur…

chatgpt赋能python:用Python优化微信群SEO

用Python优化微信群SEO 随着微信群的普及,越来越多的人开始将其作为社交媒体和个人品牌的重要推广渠道之一。然而,想要让你的微信群在搜索引擎中排名靠前,就需要进行一些有效的SEO技巧,以吸引更多的目标用户。 在本文中&#xf…

黏糊糊的菜单

先看效果&#xff1a; 再看代码&#xff1a; <!--黏糊糊的菜单 可融合--> <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-s…

【pytorch】维度变换

【pytorch】维度变换 View操作unSqueeze操作图片处理的一个案例squeeze 维度删减操作维度扩展-expand维度扩展-repeat矩阵的转置操作-transpose View操作 将一个四维的张量&#xff08;b x c x h x w&#xff09;转换成一个二维的张量 对于四张图片 将每一张图像用一行向量进…

阿里内部秀出新天际的SpringBoot实战笔记,让开发像搭积木一样简单

​什么是 Spring Boot Java (面向对象编程语言)经过 30 多年的发展&#xff0c;产生了非常多的优秀框架。Spring (为解决企业应用程序开发的复杂性而创建的框架)曾是最受欢迎的 Java 框架之一&#xff0c; 但随着 Node、Ruby、Groovy、PHP 等脚本语言的蓬勃发展&#xff0c;使…

行业热点 | Quest 3发布、苹果MR发布在即, 6月初XR大戏即将上演

编者按&#xff1a; 昨夜&#xff0c;朋友圈被Quest3占领&#xff0c;Meta首款消费级MR头显Quest 3在其一年一度的游戏展示会前正式发布&#xff0c;扎克伯格亲自站台&#xff0c;这也侧面透露确实将还有几天就要发布的苹果MR头显视为强有力的竞争对手。 另一边&#xff0c;W…

Linux系统的开机自启脚本方法

centOS中 方法1&#xff1a;/etc/rc.local /etc/rc.local是rc.d/rc.local的软链 1、在自己需要启动的文件目录中编写一个shell脚本文件auto_run_script.sh&#xff08;文件名称你们随意&#xff09;。我的这个timeTest文件是timeTest.cpp编译过来的。主要是过几秒打印一下时…

Dubbo中的常用组件

微服务的架构主要包括服务描述、服务发现、服务调用、服务监控、服务追踪以及服务治理这几个基本组件。 那么每个基本组件从架构和代码设计上该如何实现&#xff1f;组件之间又是如何串联来实现一个完整的微服务架构呢&#xff1f;今天我就以开源微服务框架Dubbo为例来给你具体…