通俗易懂解释汉明码(附MATLAB实现代码)

汉明码(Hamming Code),是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名。汉明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据位错误,以侦测并更正单一比特错误。本文将尽可能使用通俗易懂的语言对汉明码进行解释和说明。另外,本文参考了这篇文章,非常感谢这位大神的解释和启发。

前言

为了方便对文中的某些概念有更加深刻的理解,在解释汉明码的编码规则之前,请允许我先简单解释一下奇偶校验码这一概念,这里引入了百度百科关于奇偶校验码的描述。

奇偶校验码是一种增加二进制传输系统最小距离的简单和广泛采用的方法。是一种通过增加冗余位使得码字中"1"的个数恒为奇数或偶数的编码方法,它是一种检错码。

由上述描述,我们可以知道,奇偶校验码在原信息位上额外增加了一位奇偶校验位,从而使编码中1的个数恒定为奇数或偶数,当产生奇数位错误时,码字的奇偶校验性将会发生改变,因此我们就能检查出码字出现错误。但这种编码方式仅能发现奇数位错误,同时无法进行纠错。

纠错原理

首先,我们需要知道汉明码的核心思想是假设数据仅错一位。那么假设现在有一个七位的数据需要传输,那么我们可以先把这七位数据进行分组,具体分组如下图所示:

在这里插入图片描述

P1 P2 P3
p1、d1、d2、d4 p2、d1、d3、d4 p3、d2、d3、d4

因此对于p1、p2、p3、d1、d2、d3、d4来说,每个小块中都只对应一位数字,因此我们可以分别判断三组是否出现错误,从而定位该错误发生在哪一位上,下面举个简单的例子。

  • 假如说P1组发生了错误,而P2、P3组均为正确,那么可以定位为p1发生了错误。
  • 假如说P1组和P2组同时发生了错误,P3组是正确的,那么可以定位为d1发生了错误。
  • 假如说P1、P2、P3组均发生了错误,那么可以定位为d4发生了错误。

所以,我们可以发现,当分组合理时,通过对各组码字进行奇偶校验,就可以准确发现错误及定位错误码字从而实现纠错。

编码规则

由上述例子,我们可以发现,汉明码正是利用了不同分组的奇偶校验性来进行纠错,所以如何进行分组就是汉明码的一个核心问题。我们先引入百度百科上关于汉明码奇偶校验位的位置分配表,现在看不懂没关系,解释完就很清晰了。

在这里插入图片描述

汉明码的编码规则是,一串码字中所有2的i次幂位置均为奇偶校验码,同时该校验码需要使校验码所在组的1的个数为偶数。因此,我们可以简单列一下奇偶校验码的位置:1、2、4、8、16、32等。

由于我们知道,在二进制数中,2的i次幂可以写成0001、0010、0100、1000等形式,因此所有校验位覆盖了数据位置和该校验位位置的二进制与的值不为0的数。

还是不好理解是吗?通俗一点来说就是:

  • 凡是位置符合这种形式的,XXX1,归到P1;
  • 凡是位置符合这种形式的,XX1X,归到P2;
  • 凡是位置符合这种形式的,X1XX,归到P3;
  • 凡是位置符合这种形式的,1XXX,归到P4;

如此类推。现在再回头看看位置分配表,是不是就很好理解了,我们可以很神奇的发现,每一个奇偶校验位,仅会出现在单个组里,因此每个奇偶校验位仅完成单个组的奇偶校验。

为了增强理解,我们使用一个真实的例子来进行说明。假如目前我们需要传的码字为1011010,那么我们可以把奇偶校验位根据位置进行占位,得到新的码字XX1X011X010,其中X为奇偶校验位。那么根据分组,我们可以分为四组,分别是:

P1 P2 P3 P4
X10100 X11110 X011 X010

那么,为了满足各组的1的数量均为偶数,那么就可以确定奇偶校验位的准确码字了。

P
  • 37
    点赞
  • 212
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值