平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!
关注微信公众号【 IT特靠谱 】,每天都会分享技术心得~

海明码纠错与检错

海明码(Hamming Code)是一个能够有多个校验位。具有检测并纠正一位错误数据的纠错码。

1 海明码理论计算

假设数据位是n位,海明码的校验位是r位,则n和r必须满足关系: 2^r-1>=n+r,为了确保r位校验码能校验所有的数据位,由于r位校验码所能表示的最大十进制数为2r-1,同一时候也确保各位码本身不被其它校验码校验,r取满足条件的最小值即可!

海明码的校验码位置:必须是在2^n次方位置(n从0 开始,分别代表从右边数起各自是第1、2、4、8、16……海明码位)。数据位也就是在非2^n次方的位置。

假设数据位为8位,校验位长度未知(假设为r位),那么 2^r-1>=8+r,可以推测出校验位长度r应该为4(满足2^4 - 1 = 15 >= 8 + 4 =12),即这个海明码长12位(8数据位 + 4校验位)。

令校验位为P3,P2,P1和P0,校验位占据的海明码位置为P0=2⁰=1,P1=2¹=2,P2=2²=4,P3=2³=8;令数据位为D7,D6,D5,D4,D3,D2,D1和D0,数据位从高往低占据海明码空余编码位。最后形成的海明码如下所示:

海明码位 12 11 10 9 8 7 6 5 4 3 2 1
数据位 D7 D6 D5 D4 D3 D2 D1 D0
校验位 P3 P2 P1 P0

校验码校验的数据位对应海明码位置方法:第i位校验码从当前校验码位(包含当前校验码的位置)开始,每次连续校验i位后再跳过i位。然后再连续校验i位。再跳过i位。以此类推....

也就是说:第一组:P0校验码位校验的数据码位为:第1位(也就是P0本身)、第3位、第5位、第7位、第9位、第11位.....

第二组:P1校验码位校验的数据码位为:第2位(也就是P1本身)、第3位、第6位、第7位、第10位、第11位.....

第三组:P2校验码位校验的数据码位为:第4位(也就是P2本身)、第5位、第6位、第7位、第12位.....

第四组:P3校验码位校验的数据码位为:第8位(也就是P3本身)、第9位、第10位、第11位、第12位.....

最后每组通过异或逻辑运算。使每组的运算结果为0(偶校验),就可以得出每组校验码的值。

2 举例计算海明码

问:已知二进制码为:10110110,求它的海明编码?

答:(1)二进制码的长度为8(即:n=8),需要满足公式:2^r - 1 >= n + r,则r值应该取4。因此将数据位(D7~D0)和校验位(P3~P0)填入如下表格:

(2)根据校验码校验的数据位方法得出:

P0校验位校验了P0、D0、D1、D3、D4、D6位 ====》P0⊕0⊕1⊕0⊕1⊕0应当满足偶数个1,因此P0=0

P1校验位校验了P1、D0、D2、D3、D5、D6位 ====》P1⊕0⊕1⊕0⊕1⊕0应当满足偶数个1,因此P1=0

P2校验位校验了P2、D1、D2、D3、D7位 ====》P2⊕1⊕1⊕0⊕1应当满足偶数个1,因此P2=1

P3校验位校验了P3、D4、D5、D6、D7 ====》P3⊕1⊕1⊕0⊕1应当满足偶数个1,因此P3=1

将得到的校验位(P3~P0)填入表格,如下:

(3)因此得到海明码为:101110111000,其中红色位为校验位的值!

(4)扩展:接收端获取到海明码后,通过相同的方式计算出P3~P0,然后与海明码对应的校验位值进行比较,只要有校验位的值不对,则数据传输出现错误,也就说明海明码具有检错能力。

3 举例海明码纠错

依然根据上面的例子,我们将第6位(D2)的值改为0。也就是接收端接收到的海明码为:101110011000,其中黄色位为错误数据位!如何找出并纠正错误的数据位呢?

答:(1)已知海明码长度为12位,由于校验位占据2^0、2^1、2^2、2^3、2^4,.....2^n位置,可以推断出,校验位为:第1位、第2位、第4位、第8位,也就是P3~P0。剩余的位置都是数据位了(D7~D0)。分别填入下表:

(2)用上面同样的方法计算出收到的海明码的校验位值。

根据校验码校验的数据位方法得出:

P0校验位校验了P0、D0、D1、D3、D4、D6位 ====》P0⊕0⊕1⊕0⊕1⊕0应当满足偶数个1,因此P0=0

P1校验位校验了P1、D0、D2、D3、D5、D6位 ====》P1⊕0⊕0⊕0⊕1⊕0应当满足偶数个1,因此P1=1

P2校验位校验了P2、D1、D2、D3、D7位 ====》P2⊕1⊕0⊕0⊕1应当满足偶数个1,因此P2=0

P3校验位校验了P3、D4、D5、D6、D7 ====》P3⊕1⊕1⊕0⊕1应当满足偶数个1,因此P3=1

通过对比海明码的校验位值发现:P2和P1两个校验位值是错误的。首先说明了海明码在传输过程中出现了错误!然后我们要找出并纠正错误的数据位!

(3)出错位数应该是错误的校验位之和,即:P2的位置 + P1的位置 = 4 + 2 = 6位,也就是海明码的第6位数据是错的。那么我们将第6位取反,即可纠正错误!纠正后的海明码为:101110111000

(1) 商务合作微信号:M9392W

(2) 购物商城: 扫码即可进入博主开发的小程序购物商城,享超大优惠购物,支持一下博主吧~

(3) 博主微信公众号IT特靠谱,学习更多开发实战技巧!

海明码检错与纠错,经典例子讲解~相关推荐

  1. CRC循环冗余校验,经典例子讲解~

    平凡也就两个字: 懒和惰; 成功也就两个字: 苦和勤; 优秀也就两个字: 你和我. 跟着我从0学习JAVA.spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美! 关注微信 ...

  2. 校验码中码距与纠错能力的关系

    纠错编码的基本原理 1.        基本概念 为了方便对差错编码原理进行叙述下面先介绍一些基本术语. 1.        信息码元--指进行差错编码前送入的原始信息编码. 2.        监督 ...

  3. 海明码 校验位数公式的理解

    #问题 设海明码的校验位数为,数据位数为,它们需满足一个位数公式 最初看到公式时我感到很疑惑啊,百思不得其解,主要的问题是最后那个1哪来的. 看着公式望了半天,一点头绪都没有,好脑袋不如烂笔头,于是我 ...

  4. 【计算机网络】数据链路层 : 差错控制 ( 纠错编码 | 海明码 | “海明码“ 原理 | “海明码“ 工作流程 | 确定校验啊位数 | 确定校验码和数据位置 | 求校验码值 | 检错纠错 )★

    文章目录 一. "海明码" 工作原理 二. "海明码" 工作流程 三. 确定校验码位数 四. 确定校验码和数据位置 0. 确定校验码位置 1. 引入二进制位 2 ...

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

    概念解释 先说明几个概念(非严谨定义) 码字:一个包含了数据位和校验位的n位单元,也就是"一种"编码 编码:由码字组成的可以表达传递信息的集合,这里不是指编码的过程,而是一个名词. ...

  6. 3.3.1网络原理数据链路层之差错控制(检错编码和纠错编码)->(奇偶校验码、CRC循环冗余码、海明码)(转载)

    原文链接:https://blog.csdn.net/weixin_43914604/article/details/104864783 本博客为个人学习.研究或者欣赏用,如有侵权,请与我联系删除,谢 ...

  7. 【Computer Organization笔记03】信息编码与码制转换,数据表示:检错与纠错、码距、汉明码等

    本次笔记内容: P5 计算机组成原理(05) P6 计算机组成原理(06) 注:本节课开始,我找到了对应内容的课件,请见于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的内容与对 ...

  8. 信息论小课堂:纠错码(海明码在信息传输编码时,通过巧妙的信道编码保证有了错误能够自动纠错。)

    文章目录 引言 I 纠错 1.1 信息纠错的前提:信息冗余 1.2 发现抄写错误的方法 1.3 计算机的信息校验原理:奇偶校验 1.4 有效的纠错编码 II 案例 2.1 例子1:自身DNA的编码 2 ...

  9. 简单理解海明码(汉明码)纠错原理

    昨天想了解海明纠错码,在网上搜了几篇文章都觉得讲得有点晦涩,不过最后好歹也是理解了,就用自己的方式表述一下,本文不注重介绍海明纠错码的算法实现(一个是并不复杂,另一个我认为大多数人也不需要具体去实现主 ...

最新文章

  1. linux sshd cpu 过高 问题解决
  2. RunTime运行时在iOS中的应用之UITextField占位符placeholder
  3. .net应用程序版本控制
  4. 格式说明_ISO11784/85 FDX-B动物芯片格式写码说明
  5. java 错误 代码_Java错误代码及异常处理
  6. 许家印深夜主持集团营销大会:恒大全国楼盘全线7折!
  7. java----数据结构与算法----JavaAPI:java.util.Collection接口
  8. python求解LeetCode习题Intersection of Two Linked Lists
  9. php limit计算结果,php – 在应用LIMIT之前获取结果数量的最佳方式
  10. java常用的库_java有哪些常用的库
  11. Delphi版 熊猫烧香源码
  12. 百度富文本编辑器UEditor增加自定义字体
  13. 2021-2027全球与中国CMF电池市场现状及未来发展趋势
  14. JavaEE 微信境外支付
  15. SpringAOP源码解析之aop:aspectj-autoproxy标签解析
  16. exo文件_eXo平台概述
  17. ModelSim illegal reference to net “***“ 报错问题解决
  18. ubuntu 下 ssd磁盘检测
  19. vue使表头文字居中,表格某一列文字左对齐的方式
  20. python calu_Python中*args,**kwargs的使用

热门文章

  1. python怎样按某一列值拆分Excel表格
  2. Lake Shore350型低温温度控制器
  3. php使用grpc简单教程
  4. 六大设计原则-接口隔离原则
  5. 5-3中央处理器-数据通路的功能和基本结构
  6. 介绍Jackson JsonNode和ObjectNode(*)
  7. 100条信号完整性效应的经验法则
  8. 从零开始,一步一步编写网页
  9. 报Warning如下: Warning: The CUDA driver must recompile the GPU librariesbecause your device is more rec
  10. 什么是自动气象站 校园气象站