海明校验 详细代码及算法分析(Python)

背景介绍

海明码由Richard Hamming于1950年提出、目前还被广泛采用的一种很有效的校验方法,是只要增加少数几个校验位,就能检测出二位同时出错、亦能检测出一位出错并能自动恢复该出错位的正确值的有效手段,后者被称为自动纠错。它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。
这种能找出并纠正数据块在传输过程中出现的错误的编码方法,对于计算机技术和通信技术来说真是太重要了。发明这种编码技术的理查德·哈明因此而获得了第三届即1968年度的图灵奖。
在这里插入图片描述

海明编码

1.校验位位数

设校验码有k位有效信息和r个校验位,一个校验位Pi要负责监督多个有效位bi,因此r个校验位就有r个分组,每个可以构成一个指错字,也就是说每个“小组长”需要汇报自己组员的情况,一个组员可以加入多个小组,各个组长的信息综合起来便知道这个成员情况了。
r个校验位可以指出2r种状态,其中一种表示无错,剩下的状态可以指出2r-1位中某位的错误。
因此有式子(指出并纠正一处错误):
k + r ≤ 2 r − 1 k + r \leq 2^r - 1 k+r2r1
把r移到右边去:
k ≤ 2 r − r − 1 k \leq 2^r -r- 1 k2rr1

2.分组原则

为了方便最后算出哪一位出错,我们把位号为2n(n = 0, 1, 2, …)的位置全部留给校验位,其他的安放有效位,两者相互穿插组成海明码(Hamming Code)。
e.g.
k = 7, r = 4

位号 1 2 3 4 5 6 7 8 9 10 11
内容 P1 P2 b1 P3 b2 b3 b4 P4 b5 b6 b7

之后再看分组规则:
第i位由位号和=i的校验位组成
e.g.
7 = 1 + 2 + 4
对于Pi而言有:Pi = 2i-1(i≥1)
故:b4 = P1 + P2 + P3
而由于b4组分之一是P1,故P1的分组里包含b4

再举个例子:
设有效信息为b1b2b3b4 = 1011,其中k=4,k ≤ 23 - 3 - 1,因此取最小的r为3。
3 = 1 + 2, 5 = 1 + 4, 6 = 2 + 4, 7 = 1 + 2 + 4
参考上表可得:
P 1 = b 1 ⨁ b 2 ⨁ b 4 = 1 + 0 + 1 = 0 P_1 = b_1\bigoplus b_2\bigoplus b_4=1+0+1=0 P1=b1b

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值