汉明码的原理、生成及检验

help text:
principle
纠错原理


汉明码的原理、生成及检验


在计算机运行过程中,由于种种原因导致数据在存储过程中可能出现差错,为了能够及时发现错误并且将错误纠正,通常可以将原数据配成汉明编码。

汉明码具有一位纠错能力。

设将要进行检测的二进制代码为n位,为使其具有纠错能力,需要再加上k位的检测位,组成n+k位的代码。那么,新增加的检测位数k应满足:
2 k ≥ n + k + 1 2^k\geq n+k+1 2kn+k+1 or 2j-1 ≥ \geq n+k

汉明码的原理、生成及检验_第1张图片
图示:汉明码分组

n:有效数据位数
k:检测位数(也是分组数)
1:表示全部正确(无错情况)


汉明码的纠错


根据以上说的汉明码的配偶原则和配奇原则我们来看汉明码的纠错。设接收到的错误汉明码(按配偶原则配置)是0100111,我们可以根据上述规律来确定出错位。
那么新的检测位是 (+表异或/检测是否为偶(奇)数个"1")1

P1=①位+③位+⑤位+⑦位,即P1=0+0+1+1=0 //even-check 0 -> right
P2=②位+③位+⑥位+⑦位,即P2=1+0+1+1=1//even-check 1 ->wrong
P4=④位+⑤位+⑥位+⑦位,即P4=0+1+1+1=1

根据 P4P2P1 构成的二进制是 110,将110转换成十进制为6,说明是第6位出错
或者根据配偶原则的规律,其“1”的个数必须是偶数也能判断出是第6位,所以第六位应将“1”改为“0”,那么正确的汉明码应为0100101。

那么为什么在汉明码纠错过程中,新的检测位P4P2P1的状态即指出了编码中错误的信息位?

汉明码属于分组奇偶校验,P4P2P1=000,说明接收方生成的校验位和收到的校验位相同,不同说明出错。

由于分组时校验位只参加一组奇偶校验,有效信息参加至少两组奇偶校验

如果校验位出错:P4P2P1的某一位将为1,刚好对应位号4、2、1

001 -> 1
010 -> 2
011 -> 4

1`2`4为添加的校验位

若果有效信息出错:将引起P4P2P1中至少两位为1(有效位至少两组共有,仅校验位特别标志特定组),如上列错误,将使P4,P2均为1,P1=0 P4P2P1=110.(对应出错位号//no.6)


  1. question:为什么汉明码的校验位只有一位?请证明
    personal answer: even-odd check中状态二异(1的个数非奇即偶)仅一位即可表示 ↩︎

你可能感兴趣的:(Algorithm)