【计算机组成原理】海明校验码(Hamming Code)

在学习计算机组成原理时对海明码不是特别理解,查阅了相关网上的资料也是头昏眼花,大量的字母公式搞得头大,但是为了发扬螺丝钉精神我决定硬着头皮看下去,现在对海明码已经有了一些自己的理解,希望在此用简单的方式记录,方便日后的复习以及帮助对海明码不理解的同学们。

首先我们需要知道一个重要概念,什么是码距?

所谓码距,是指一个编码系统任意两个合法编码之间至少有多少个二进制位不同。

例如我们现在有一套编码为:00,01,10,11,在这套编码中至少有一个数字不相同,我们称这套编码的码距为1。

如果采用奇偶校验的方法,我们至多可以将一组编码的码距提升1,如上的例子就可以将码距提升为2。

以偶校验为例:上述编码可以写成:000,011,101,110,这样做的主要目的是将原来可以表示十进制0~3的数,扩大到0~7。而在0~7这8个数中只有4个数是正确的,那么也就是说只要出现了另外的4个数就说明数据出错了。

但是奇偶校验只能检测出数据是否出错,而不能检测出哪一位出错,例如收到数据111,我们无法判断究竟是由011,101,110,这三者中的哪一个变来的,为了解决这一问题,我们该进入正题了。

 

前面可能啰嗦了一点,但是校验的原理就是通过扩大码距来实现的,在一定程度上来说码距越大,校验的效果越好。

海明码的公式:2^{k}-1\geqslant n+k  这个式子的意思是,可以用来校验错误的数字个数2^{k}-1要大于或者等于原数据位数(n)和校验位数(k)的和。显然在2^{k}中我们要留出一个数表示数据正确,所以我们用2^{k}-1来代表出错的位数。

理解了公式之后我们通过一个例子来学习一下海明码到底怎么用。

以0110为例:通过公式我们计算出k=3,我们将三个校验位设为P1,P2,P3。

接着我们将数据位对应的H_{m}中的m分别用二进制表示

 故最后的海明码为:

即0110011。

有了海明码之后我们如何判断错误呢?假如我们收到这样一串内容:0100011

S1 = P1 \oplus H3 \oplus H5 \oplus H7 = 1 \oplus 0 \oplus 0 \oplus 0 = 1 (结果出错)

S2 = P2 \oplus H3 \oplus H6 \oplus H7 = 1 \oplus 0 \oplus 1 \oplus 0 = 0(结果正确)

S3 = P3 \oplus H5 \oplus H6 \oplus H7 = 0 \oplus 0 \oplus 1 \oplus 0 = 1(结果出错)

综上,说明由P1(H1)和P3(H4)确定的那位结果出错了,将H1和H4的下标相加得到H5即为出错位。那么我们将H5取反即可得到正确的数据。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 16

打赏作者

洋Key

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值