海明码检错与纠错,经典例子讲解~
平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从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特靠谱,学习更多开发实战技巧!
海明码检错与纠错,经典例子讲解~相关推荐
- CRC循环冗余校验,经典例子讲解~
平凡也就两个字: 懒和惰; 成功也就两个字: 苦和勤; 优秀也就两个字: 你和我. 跟着我从0学习JAVA.spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美! 关注微信 ...
- 校验码中码距与纠错能力的关系
纠错编码的基本原理 1. 基本概念 为了方便对差错编码原理进行叙述下面先介绍一些基本术语. 1. 信息码元--指进行差错编码前送入的原始信息编码. 2. 监督 ...
- 海明码 校验位数公式的理解
#问题 设海明码的校验位数为,数据位数为,它们需满足一个位数公式 最初看到公式时我感到很疑惑啊,百思不得其解,主要的问题是最后那个1哪来的. 看着公式望了半天,一点头绪都没有,好脑袋不如烂笔头,于是我 ...
- 【计算机网络】数据链路层 : 差错控制 ( 纠错编码 | 海明码 | “海明码“ 原理 | “海明码“ 工作流程 | 确定校验啊位数 | 确定校验码和数据位置 | 求校验码值 | 检错纠错 )★
文章目录 一. "海明码" 工作原理 二. "海明码" 工作流程 三. 确定校验码位数 四. 确定校验码和数据位置 0. 确定校验码位置 1. 引入二进制位 2 ...
- 检错纠错理论——海明码与海明距离
概念解释 先说明几个概念(非严谨定义) 码字:一个包含了数据位和校验位的n位单元,也就是"一种"编码 编码:由码字组成的可以表达传递信息的集合,这里不是指编码的过程,而是一个名词. ...
- 3.3.1网络原理数据链路层之差错控制(检错编码和纠错编码)->(奇偶校验码、CRC循环冗余码、海明码)(转载)
原文链接:https://blog.csdn.net/weixin_43914604/article/details/104864783 本博客为个人学习.研究或者欣赏用,如有侵权,请与我联系删除,谢 ...
- 【Computer Organization笔记03】信息编码与码制转换,数据表示:检错与纠错、码距、汉明码等
本次笔记内容: P5 计算机组成原理(05) P6 计算机组成原理(06) 注:本节课开始,我找到了对应内容的课件,请见于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的内容与对 ...
- 信息论小课堂:纠错码(海明码在信息传输编码时,通过巧妙的信道编码保证有了错误能够自动纠错。)
文章目录 引言 I 纠错 1.1 信息纠错的前提:信息冗余 1.2 发现抄写错误的方法 1.3 计算机的信息校验原理:奇偶校验 1.4 有效的纠错编码 II 案例 2.1 例子1:自身DNA的编码 2 ...
- 简单理解海明码(汉明码)纠错原理
昨天想了解海明纠错码,在网上搜了几篇文章都觉得讲得有点晦涩,不过最后好歹也是理解了,就用自己的方式表述一下,本文不注重介绍海明纠错码的算法实现(一个是并不复杂,另一个我认为大多数人也不需要具体去实现主 ...
最新文章
- linux sshd cpu 过高 问题解决
- RunTime运行时在iOS中的应用之UITextField占位符placeholder
- .net应用程序版本控制
- 格式说明_ISO11784/85 FDX-B动物芯片格式写码说明
- java 错误 代码_Java错误代码及异常处理
- 许家印深夜主持集团营销大会:恒大全国楼盘全线7折!
- java----数据结构与算法----JavaAPI:java.util.Collection接口
- python求解LeetCode习题Intersection of Two Linked Lists
- php limit计算结果,php – 在应用LIMIT之前获取结果数量的最佳方式
- java常用的库_java有哪些常用的库
- Delphi版 熊猫烧香源码
- 百度富文本编辑器UEditor增加自定义字体
- 2021-2027全球与中国CMF电池市场现状及未来发展趋势
- JavaEE 微信境外支付
- SpringAOP源码解析之aop:aspectj-autoproxy标签解析
- exo文件_eXo平台概述
- ModelSim illegal reference to net “***“ 报错问题解决
- ubuntu 下 ssd磁盘检测
- vue使表头文字居中,表格某一列文字左对齐的方式
- python calu_Python中*args,**kwargs的使用