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

news/2024/10/20 17:31:31/

概念解释

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

码字:一个包含了数据位和校验位的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.ppmy.cn/news/89996.html

相关文章

超越竞争的获客之道:DTC品牌出海策略全面解析

随着全球数字化的快速发展&#xff0c;DTC品牌正迎来一个全新的时代。然而&#xff0c;随着越来越多的DTC品牌进入国际市场&#xff0c;如何在激烈的竞争中脱颖而出&#xff0c;并获得新客户成为一个关键的挑战。本文Nox聚星将和大家深入探讨DTC品牌在出海时代如何破解获客困局…

[ 云计算 华为云 ] 华为云开天 aPaaS:构建高效的企业数字化平台(上)

文章目录 前言一、 什么是 aPaaS1.1 初识 aPaaS 二、华为云开天 aPaaS2.1 华为云服务类型与种类2.1.1 基础 aPaaS2.1.2 行业 aPaaS&#xff08;一&#xff09;工业 aPaaS&#xff08;二&#xff09;政务 aPaaS&#xff08;三&#xff09;电力 aPaaS&#xff08;四&#xff09;矿…

侵权:前端可能涉及到的侵权有哪些

前端开发可能涉及到的侵权行为包括但不限于以下几种 1. 侵犯著作权&#xff1a;在开发网站或应用程序时&#xff0c;使用未经授权的图片、文字、音频、视频、软件等作品&#xff0c;或直接复制他人的代码或框架等资源等。 react由原来的BSD 许可证 专利开源协议修改为MIT协议…

轻松提高SketchUp技能的15个简单技巧

SketchUp一直是设计界有名的3d建模软件之一&#xff0c;其直观的工作工具、开源库和无数的插件使 SketchUp 易于使用。通常&#xff0c;它被用来让孩子们接触建筑。其用户友好的界面使其成为初学者的绝佳应用程序。它包含一系列功能&#xff0c;能够以高效和突出的方式为学生和…

分布式全局唯一id实现-3 springCloud-MyBatis-Plus集成滴滴分布式全局id(Tinyid)

前言&#xff1a;滴滴通过mysql来定义好id 的初始值和增长的步长&#xff0c;每次可以将一段连续的数字id取出放入到内存中&#xff0c;当需要使用id 的使用&#xff0c;每次id1 &#xff0c;如果发现id 的值已经超出了改段最大的id 值&#xff0c;则取下个段的id 继续使用&…

MIME类型

秋风阁(https://focus-wind.com/) 文章目录 MIME类型参考文档MIME介绍MIME语法mimetype与Content-TypeMIME类型大全常用MIME类型application类型text类型image类型video类型audio类型model类型其他类型multipart复合类型 MIME类型 参考文档 IANA官方MIME类型大全IBM Integrat…

CompletableFuture详解-初遇者-很细

目录 一、创建异步任务 1. supplyAsync 2. runAsync 3.获取任务结果的方法 二、异步回调处理 1.thenApply和thenApplyAsync 2.thenAccept和thenAcceptAsync 2.thenRun和thenRunAsync 3.whenComplete和whenCompleteAsync 4.handle和handleAsync 三、多任务组合处理 1…

MyBatis动态SQL,基本语法加实战,一篇搞懂

问题&#xff1a; 有的时候我们需要实现批量删除&#xff1a;delete from t_car where id in(1,2,3,4,5,6,…这⾥的值是动态的&#xff0c;根据⽤户选择的 id不同&#xff0c;值是不同的); 多条件查询:有时我们需要根据多个不同地条件来进行查询&#xff0c;比如&#xff1a;se…