组成
海明码具有一位纠错能力,通过插入多位冗余码来进行错误检测和纠正。
假设数据码原码有k位,那么,假设需要r位冗余码来纠错,那么新的码总共有n=k+r位。想要能做到纠正和错误检测,那么冗余码就要覆盖所有出错的情况,共有2n种,加上完全正确的1种,即:
2r≥n+1=k+r+1
将数据从1开始编号,第2i为校验位,其他位为数据位。
计算
第i位校验位Ci负责位置编号二进制第logi+1低位为1的数据位,例如:
- C1负责1,3,5,7……位(倒数第一位为1)
- C2负责2,3,6,7……位(倒数第二位为1)
- C4负责4,5,6,7……位(倒数第三位为1)
计算校验位主要有配奇原则和配偶原则,就是要让这一校验位所负责的位数(包括校验位自己)里面,1的数量分别是奇数或偶数。
配偶原则:
Ci=D1⊕D2⊕...⊕Dm
配奇原则:
Ci=D1⊕D2⊕...⊕Dm=1⊕D1⊕D2⊕...⊕Dm
纠错
重新计算每一位校验位:
配偶原则:
Pi=Ci⊕D1⊕D2⊕...⊕Dm
配奇原则:
Pi=Ci⊕D1⊕D2⊕...⊕Dm=1⊕Ci⊕D1⊕D2⊕...⊕Dm
对于配奇或者配偶原则,得到的Pi都应该是0,如果不是,那么就说明有错,错误的位置是:
...P4P2P1
将这一位取反就是正确的值。