海明码学习

本篇校验均以偶校验为基础

:因为奇偶校验码只有一个校验位,它只能发现这组数据的错误,但不能明确知道哪一位的编码发生错误,无法纠错,海明码就能解决这一问题。

海明码的设计思路:引入多个校验位,对信息位分组偶校验,通过每个分组校验后的结果,得出错误的位置。

1.需要多少个校验位

编码由信息码+校验码组成

设有n个信息位,k个校验位

则发生错误的情况有n+k种,校验位有种2^{k}可能性,用校验位的可能性来表示编码的所有可能(正确和错误的),那么要满足 2^{k}\geqn+k+1

 若有4个信息位(n=4),则校验位至少需要3位(k=3)

n12-45-1112-2627-5758-120
k234567

2.确定校验位的位置(信息位:1010)

校验位P_{i}放在编码的第2^{i-1}的位置

即第一个校验位(i=1)放在编码的第一个位置,第二个校验位放在第二个位置,第三个校验位放在第四个位置,以此类推……(1,2,4,8,16……)

7654321
信息位信息位信息位校验位信息位校验位校验位
1010

3.求校验位的值

有几个校验位就有几个分组

将上段编码分为3组,然后把每个信息位的位置用二进制表示出来

信息位位置二进制表示
3                011
5101
6110
7111

二进制的每一位对应一个校验位,什么意思呢?

举例:十进制3 -->011

二进制011
对应的校验码位置421

 

 

 如果信息码某一位的数字为1,则对应位置的校验码和这个信息码就是一个分组(一个信息码可能和多个校验码是一组)(看不懂这句话看下方表格颜色与分组后结果)

 例如:3,5,7的低位都是1,低位对应第一个位置的校验码,则第一个位置的校验码和第3,5,7位的信息码为一组。

总结:将信息码的位置转为二进制形式,从低位开始对应一个位置的校验码,如果这位为1,则这个信息码与对应的校验码是一组

信息位位置二进制表示
3                011
5101
6110
7111

分组后:

第一组: (1,3,5,7)

第二组:   (2,3,6,7) 

第三组:(4,5,6,7)

成功分组后就把位置对应的二进制抛到脑后了。

接着把每组的每个信息位对应的编码异或,得到这组校验码的值。

7654321
信息位信息位信息位校验位信息位校验位校验位
1010

第一组:位置3\oplus位置5\oplus位置7:0\oplus1\oplus1=0

第二组:位置3\oplus位置6\oplus位置7:0\oplus0\oplus1=1

第三组:位置5\oplus位置6\oplus位置7:1\oplus0\oplus1=0

得到完整的海明码:

 

7654321
信息位信息位信息位校验位信息位校验位校验位
1010010

 4.纠错

按照以上步骤得到的编码刚好具有纠察哪一位错误的功能(妙啊)

校验码配合对应组的信息位异或即可纠错(信息位与校验位的异或一定是0)

例:

原信息码:1010010

错误信息码:1010000

将校验码与对应的信息码异或

第一组:位置1\oplus位置3\oplus位置5\oplus位置7:0\oplus0\oplus1\oplus1=0

第二组:位置2\oplus位置3\oplus位置6\oplus位置7:0\oplus0\oplus0\oplus1=1

第三组:位置4\oplus位置5\oplus位置6\oplus位置7:0\oplus1\oplus0\oplus1=0

  

 

 010,说明在第二个位置出现错误(注意位序)

如果位置6发生错误,那么第二组与第三组的异或结果为1,最后得到110,说明位置6错误

为什么这么奇妙?

拿有3个校验码这个特例说明一下。

图中p为校验码,d为信息码

若d1(第一位信息码)错误,则p1,p2检验失败,结果异或为1,与p3最终得到011,d1就是在位置3上

若d4错误,则p1,p2,p3检验失败,异或结果全为1,最终得到了111,而d4就是在位置7上

5.补充

 

 海明码的纠错能力:1位

               检错能力:2位

增加一位全校验位,使海明码变为偶校验码。

87654321
全校验位信息位信息位信息位校验位信息位校验位校验位
11010010

 若每组校验位异或值=0,则信息无错误

每组校验位异或值≠0,且全体偶校验失败,则有一位错误,可纠正

每组校验位异或值≠0,且全体偶校验成功,则有两位错误,需重传。

参考:王道考研b站计算机组成原理视频【2021版】2.1.5_海明校验码_哔哩哔哩_bilibili

百度海明码 汉明码_百度百科

我说的不是很清楚(以我的思路想的),不明白的,可以去看视频。

如有错误和意见,请尽管提出。

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值