存储器的校验——汉明码(Hanming Code)

汉明码可以检查出2个位的错误并且纠正1个位。
我们直接结合一个实例来分析步骤,有一个字节的数据如下:
10011010
我们要添加几个位,来检查出错误。
添加位的规则是:
1.首先空出2的整数倍的数,这些数将用来校验奇偶,这些位我们称它为奇偶校验位。(1,2,4,8,16,32,etc),其他的空位填写数据位。

_ _1_001_1010

2.每一个奇偶校验位会检查_ _1_001_1010中的特定的一组数(group),
一般情况下,这组数是这样的:
Group1: 1,3,5,7,9… 检验奇数位
Group2: 2,3,6,7,10,11… 检验两个,跳过两个,检验两个,跳过两个
Group3: 4,5,6,7,12,13,14,15…检验4个,跳过4个
Group4: 8,9,10,11,12,13,14,15…检验8个,跳过8个

比如我们想要进行偶校验,就要求我们每一个Group的1的个数是偶数个,那么:

第1组检验位为 1,3,5,7,9,11: (其中第一个就是待定的校验位,下面每组都是)
? _ 1 _ 0 0 1 _ 1 0 1 0. 看看1,3,5,7,9,11各位,发现正好是偶数个1,所以校验位1设为0就行了: 0 _ 1 _ 0 0 1 _ 1 0 1 0
第2组检验位为 2,3,6,7,10,11:
0 ? 1 _ 0 0 1 _ 1 0 1 0. 发现是奇数个1,于是设置校验位2为1,这样算上校验位的1,恰好是偶数个1: 0 1 1 _ 0 0 1 _ 1 0 1 0
第3组检验位为 4,5,6,7,12:
0 1 1 ? 0 0 1 _ 1 0 1 0. 发现是奇数个1,于是设置校验位4为1: 0 1 1 1 0 0 1 _ 1 0 1 0
第4组检验位为 8,9,10,11,12:
0 1 1 1 0 0 1 ? 1 0 1 0. 发现是偶数个1,于是设置校验位8为0: : 0 1 1 1 0 0 1 0 1 0 1 0
最后配置好的汉明码:
011100101010.

纠错过程:
比如我们传送的011100101010,但接收到的是011100101110
出错位可以这样确定:

对接受到的汉明码011100101110 进行每一个校验码的验算,即他所在的组(算上他,与之前不同的是,之前校验码是待定的,现在已经有值了)的1的个数应该是偶数个,这就暗示我们将要覆盖这个值(实际上并不是,仅仅是验算)的新校验码应该是0才对,但是由于接收到的有错误,我们在验算中发现有的校验位要填1。

这里,验算后发现第2个和第8个校验位要填1,那么错误的数据位就是2+8=10.

reference:

http://users.cs.fiu.edu/~downeyt/cop3402/hamming.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值