汉明码(计算机组成原理)没听课也能懂

汉明码是什么

汉明码是一种具有一位纠错能力的二进制代码
简单点来说就是,如果你接收到一个二进制数字串,这个二进制数字串是符合汉明码规则的。那么如果这个数字串出错了,0变成了1,1变成了0;你可以利用汉明码的规则发现并纠正这个错误。(注意:汉明码只具有一位纠错能力)

汉明码的检测位

想要检测的二进制代码有n位,想让它具有纠错能力,成为汉明码,就需要给它增添k个检测位,组成n+k位二进制代码。其中这个k应该满足:

2^k >= n+k+1

当然在考试中也可以直接记表

nk
12
2~43
5~114
12~265

知道了该有几个检测位,那么检测位该在哪一个位置呢?

如果有3个检测位:1,2,4号位上
如果有4个检测位:1,2,4,8号位上
如果有5个检测位:1,2,4,8,16号位上

相信你已经看出规律了

ok检测位的个数和位置你已经清楚了,接下来就是检测位的取值,是0还是1

在汉明码中有对检测位 gi 的规定有如下三条

  • 每一个小组独占自己检测位的那一位,也就是 gi 占第 2i-1
  • 每两个小组 gi 和 gj 又分别独占一位,也就是 2i-1 + 2j-1
  • 每三个小组 gi gj gk 又分别共同占一位 ,即2i-1 +2j-1 +2k-1

举例:k为4的情况
既是有4个检测位,这三个检测位分别在1号,2号,4号,8号位置上。
(从左到右,从1开始计数,记作为C1 C2 C4 C8
C1:1,3,5,7,9,11,
C2:2,3,6,7,10,11,14
C4:4,5,6,7,12,13,14
C8:8,9,10,11,12,13,14

计算过程:
可以先把各组独占的写出来,这里有1,2,4,8
然后,Ci与其他各组的一个相加,Ci与其他两个相加
C1:C1,C1+C2,C1+C3,C1+C4,C1+C2+C3,C1+C2+C4,C1+C3+C4…
最后去掉重复的号位。

接下来就是各个检测位的取值:

配偶原则,让各组检测位中 1 的个数为偶数个。

举例:C1:1,3,5,7
C1是占着1号位,需要让1,3,5,7号位上面1的个数成偶数个,
0100101
上面这串汉明码中, 3号位取0,5号位取1,7号位取1,已经是2个1了,所以C1就取0

当然也可以用异或运算来实现(相同为0,不同为1)
C1 = 一号位 ⊕ 三号位 ⊕ 五号位
C1 = 0⊕1⊕1=0

例题:配置0101的汉明码?
解答:0100101
(注:配置汉明码,要先放检测位 ||C1C2,0,C4,1,0,1||)

汉明码如何纠错

汉明码的纠错过程,实际上就是对送过来的汉明码形成新的检测位,通过这个新的检测位来确定出错的位置。
我们知道,检测位所在小组的取值要保证 1 的个数为偶数个,我们要做的就是,把接受到的汉明码,再求一下检测位是否正确,若我们发现检测位对应小组中 1的个数为奇数个,那肯定就是出错了。

例题:
已知传送后接收到的汉明码(按照配偶原则)为0100111,正确的汉明码是?

解:
新检测位:
P1= 1⊕3⊕6⊕7 = 0⊕1⊕1⊕1= 1
P2= 2⊕3⊕6⊕7 = 1⊕0⊕1⊕1= 1
P4= 4⊕5⊕6⊕7 = 0⊕0⊕1⊕1= 0
错误位在6号,正确的汉明码是0100101

(注:P1和P2同时不为零,说明有一个错位是两个组都包含,但P4组不包含的,推断可以知道是6号位。 其实更简单的做法就是P4P2P1,高位到地位写出来:110
这个二进制数对应的就是6,也就是出错的地方)

最后还有一种,是按照配奇原则的汉明码,和上面类似,只要保证各小组 1 小组个数是奇数个就好了。
1100101按照配奇原则配置汉明码为 11101001101

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐沐沐沐沐雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值