检错纠错理论——海明码与海明距离

news2024/11/24 14:00:35

概念解释

先说明几个概念(非严谨定义)

码字:一个包含了数据位和校验位的n位单元,也就是“一种”编码

编码:由码字组成的可以表达传递信息的集合,这里不是指编码的过程,而是一个名词。一个编码就是一套系统,包含所有编码所能组成的码字

海明距离:两个码字中不同位的个数,即两个码字中不同“字符”的差异总数

偶校验:在原有的码字上添加一位,使得包含了该校验位的码字所有的“1”的总数为偶数

二进制拆分:所有整数总可以拆分为2的幂的和

块编码的检错和纠错特性取决于它的海明距离。为了可靠的检测d个错误,需要一个海明距离为d+1的编码。——《特南鲍姆,计算机网络第6版》

 在刚接触这句话,我很难理解其含义。为何需要使用一个编码来检测错误?这就需要弄清楚此处编码的概念。事实上,这里的一个编码,不是指的编码的实例化即一个码字,而是这套编码(系统)中相邻两个码字的最短海明距离是d+1

之所以产生了错误,是因为出现了不可能(invalid)编码,该编码在这套编码体系中不存在!由于相邻码字之间海明距离为n,即有n位差异,当发生了错误的编码与这套编码中任意一个与之相邻的编码计算海明距离时,只有n-1种错误的可能,这是两个相邻处于该编码系统中合法码字中间的不合法码字

要检测n位错误,而如果这个编码系统中相邻码字的海明距离为n的话,这个发生了n位错误的编码就会被当作合法的相邻码字处理,无法检测出错误。海明距离小于n同样的道理。这个问题的核心在于是否会产生不合法的码字

纠错理论

要求的最小码距

  • 检测(detect)m个(bit的)错误:m+1
  • 纠正(correct)n个错误:2n+1(向接近的码字纠正)
  • 检测m并纠正n个错误:m+n+1(从一端考虑)

 

 

 纠错的过程与检错同理,但在发现错误时要向合法的码字靠拢来修复错误,因此需要确定哪一个码字离发生错误的码字的海明距离更近,因此就需要确定一个中心,产生了2倍关系,为了防止距离相等,又加上了一个1。可以看上面的图来理解。

海明码

海明码:m条消息位和r个校验位,能纠正所有的单个错误,是一种纠错码

校验位个数的确定: (m+r+1)<=2^r

其中m+r为可能发生的一位错误的总数(每一位发生了错误),1为正确即合法的码字,右边2的r次方为纠错码所能覆盖的情况总数

使用海明码来纠错

计算海明码(概述,详情参考相关书籍资料)

  1. 根据原有的码字来确认校验位的个数,利用上面的公式计算出r的取值
  2. 校验位分布在2的幂次方位上(1,2,4,8,16,...),其它位为原始数据位,依次填上即可
  3. 计算校验位:每个校验位负责该海明码(已经确定了形式,计算除了校验位的个数,给原始数据位和校验位都按顺序编好号了)的每位的位序号用二进制拆分后包含组成该校验位的位数的2的幂数的位,对所有这些负责的位上的值进行异或运算(实质上这就是偶校验,如果1的个数为奇数异或结果为1,为偶数结果为0)

根据海明码纠错

  1. 与海明码的计算过程相同,对接受到的“海明码”码字重新计算校验位,因为在发送时计算采用了偶校验,因此计算结果因为0,若为1则说明发生了错误
  2. 将所有产生了错误的校验位的序号相加就得到了错误位

从上述过程可以看到,该方法只能纠正一个位的错误。从直观上理解就是采用的是偶校验,所以只能检测出单个错误,偶数个错误将无法检测到。因此将发生错误的校验位序号相加得到的就是错误的位。

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

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

相关文章

Unity 环境雾与其它设置

开启雾 window->Rendering->Lighting->Environment Fog Color&#xff1a;雾的颜色。Fog Mode&#xff1a;雾效的模式Fog Density&#xff1a;雾效的浓度&#xff0c;取值范围0~1&#xff0c;数值越大雾效浓度越高。。Linear Fog Start&#xff1a;线性雾效开始距离&…

谈谈 Dapr 的优缺点,应用场景,以及未来的发展趋势,生态成熟度

谈谈 Dapr 的优缺点&#xff0c;应用场景&#xff0c;以及未来的发展趋势&#xff0c;生态成熟度 优点缺点应用场景未来发展趋势生态成熟度 本文采用 GPT4 生成&#xff0c;仅供参考。 Dapr 是一个分布式应用程序运行时&#xff0c;其目标是提供一组通用的功能&#xff0c;可以…

我找到了一个生信分析专用服务器!

写在前面 生信分析离不开计算资源&#xff0c;从事生信工作开始&#xff0c;我都在寻找可以满足我开展分析的服务器&#xff0c;不过在寻找过程中发现了以下问题&#xff1a; 如何获得计算资源、部署分析环境、安装生物信息学软件以及保障计算资源的安全和稳定。 当前面临的主要…

SSM框架学习-请求映射路径、请求参数、json数据传送参数以及日期型参数传递

1. 请求映射路径 在进行多人开发&#xff0c;每个人设置不同的请求路径&#xff0c;要解决冲突问题 设置模块名作为请求路径前缀 两种方式 方式一&#xff1a; public class BookController {//请求路径映射RequestMapping("/book/save")ResponseBodypublic String …

新一代企业数字化联盟成立,甄知科技与众多企业“强强联手”搭建品牌服务生态

5月18日&#xff0c;新一代企业数字化联盟&#xff08;以下简称“新一代联盟”&#xff09;成立大会在上海举行。该联盟由包括甄云科技、得帆信息、甄知科技、盖雅工场、甄零科技、易立德信息、鼎医、数划云在内的8家创新型数字化软件科技企业发起&#xff0c;旨在希望通过强强…

【Java入门】数据类型与变量

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于Java入门篇系列&#xff0c;该专栏主要讲解&#xff1a;什么是java、java的数据类型与变…

PyCharm 点击运行,没有执行所有的py文件内容

&#xff08;JDD_KK原创&#xff09; 基于 Pycharm&#xff0c;python3 问题&#xff1a;编写了一个测试工程&#xff0c;创建了多个.py文件。 多个py文件为&#xff1a; data_test/test_datademo.py interface_test/test_interface1.py test_test/test_test.py web_test/test…

【LCD 应用编程】获取LCD屏幕参数信息(分辨率、像素深度、RGB格式)

目录 一、LCD显示的基本原理 1、认识 FrameBuffer 2、理解LCD的分辨率和深度 二、接口函数 ioctl 1、函数声明 2、结构体介绍 三、获取LCD屏的信息&#xff08;分辨率、深度&#xff09; 一、LCD显示的基本原理 1、认识 FrameBuffer FrameBuffer 是帧缓冲&#xff0c;…

[VPX611]基于 6U VPX 总线架构的SATA3.0 高性能数据存储板

板卡概述 VPX611 是一款基于6UVPX 总线架构的高性能数据存储板&#xff0c;该板卡采用2 片XilinxKintex-7 系列FPGA 作为主控单元&#xff0c;FPGA 内嵌RAID 控制器&#xff0c;最大支持8 个mSATA 盘&#xff0c;最大存储容量可以达到8TByte&#xff0c;持续数据写入带宽可以达…

Scrum专业能力之Scrum框架和用敏捷思维管理产品

一、理解和应用Scrum框架 理解和应用Scrum框架&#xff0c;让团队和组织最多30天就可以迭代增量式交付可上线的具有价值的完工产品。成功地应用Scrum框架要求理解和应用Scrum价值观以及经验主义的原则&#xff0c;以便在处理产品交付的内在复杂性的同时&#xff0c;专业地向组…

浑元太极和领域驱动设计-UMLChina建模知识竞赛第4赛季第2轮

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答&#xff0c;先全部答对者得分&#xff0c;本轮总分为3分。 1. [多选] 开发团队中&am…

在 Visual Studio 2022 中使用 GitHub Copilot chat

本文通过实际应用场景和示例代码展示了 GitHub Copilot Chat 在 Visual Studio 2022 中的优势和特点。最后&#xff0c;鼓励读者在实际工作中尝试使用 Copilot Chat&#xff0c;以提升开发效率和代码质量。希望这些信息和经验能为你在使用GitHub Copilot时提供帮助和启发。 1. …

openssh kex.c拒绝服务漏洞漏洞(CVE-2016-8858)处理

一、漏洞描述 OpenSSH&#xff08;OpenBSD Secure Shell&#xff09;是OpenBSD计划组所维护的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现&#xff0c;支持对所有的传输进行加密&#xff0c;可有效阻止窃听、连接劫持以及其他网络级的攻击。OpenSSH 6.x版…

leetcode二叉树中的最大路径和(java)

二叉树中的最大路径和 leetcode 124题- 原题链接二叉树中的最大路径和 (hard)解题思路二叉树专题 leetcode 124题- 原题链接 leetcode 124 .二叉树的最大路径和 二叉树中的最大路径和 (hard) 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一…

Selenium、JUnit、Appium…一网打尽,轻松掌握自动化测试工具

目录 前言&#xff1a; 一、 自动化测试原理 二、 自动化测试工具和技术 三、 自动化测试案例 四、 总结 前言&#xff1a; 自动化测试是现代软件开发中必不可少的组成部分&#xff0c;它可以让开发者快速、高效地测试软件&#xff0c;并确保其符合预期要求。在本文中&am…

工业开源网站

12、JCAE JAVA based environment for CAE applications. jCAE - Java Computer Aided Engineering 13、gCAD3D gCAD3D.org 14、boardcad http://www.boardcad.com/ 15、solvespace SolveSpace - parametric 3d CAD 16、DraftSight 不开源 2D CAD Drafting and 3D Design | Dra…

公司来了个00后卷王,卷的让人崩溃.....

前几天我们公司一下子也来了几个新人&#xff0c;这些年前人是真能熬啊&#xff0c;本来我们几个老油子都是每天稍微加会班就打算走了&#xff0c;这几个新人一直不走&#xff0c;搞得我们也不好走。 2023年春招已结过去了&#xff0c;最近内卷严重&#xff0c;各种跳槽裁员&a…

抖音矩阵系统源码开发技术分析

在这个过程中&#xff0c;开发人员使用了多种编程语言、框架和工具&#xff0c;包括 Python、Java、Hadoop、Spark 和 Kafka 等。他们还使用了不同的数据库技术&#xff0c;例如 MySQL 和 MongoDB。 整个开发过程通常分为四个主要阶段&#xff1a;需求分析、设计、开发和测试。…

数值计算 - 常用函数值计算方法

秦九韶算法 什么是秦九韶算法&#xff1f; 可以把多项式改写为便于递推的形式&#xff1a; 泰勒展开式 什么是泰勒展开式&#xff1f; 泰勒公式&#xff0c;也称泰勒展开式。是用一个函数在某点的信息&#xff0c;描述其附近取值的公式。如果函数足够平滑&#xff0c;在已知函…

网络作业8【计算机网络】

网络作业8【计算机网络】 前言推荐网络作业8一. 单选题&#xff08;共16题&#xff0c;60分&#xff09;二. 填空题&#xff08;共2题&#xff0c;20分&#xff09;三. 阅读理解&#xff08;共1题&#xff0c;20分&#xff09; 最后 前言 2023-5-23 16:54:08 以下内容源自《【…