海明码

组成

海明码具有一位纠错能力,通过插入多位冗余码来进行错误检测和纠正。

假设数据码原码有kk位,那么,假设需要rr位冗余码来纠错,那么新的码总共有n=k+rn = k + r位。想要能做到纠正和错误检测,那么冗余码就要覆盖所有出错的情况,共有2n2^n种,加上完全正确的11种,即:

2rn+1=k+r+12^r \ge n + 1 = k + r +1

将数据从11开始编号,第2i2^i为校验位,其他位为数据位。

计算

ii位校验位CiC_i负责位置编号二进制第logi+1\log i+1低位为11的数据位,例如:

  • C1C_1负责1,3,5,71,3,5,7……位(倒数第一位为11
  • C2C_2负责2,3,6,72,3,6,7……位(倒数第二位为11
  • C4C_4负责4,5,6,74,5,6,7……位(倒数第三位为11

计算校验位主要有配奇原则配偶原则,就是要让这一校验位所负责的位数(包括校验位自己)里面,11的数量分别是奇数或偶数。

配偶原则:

Ci=D1D2...DmC_i = D_1 \oplus D_2 \oplus ... \oplus D_m

配奇原则:

Ci=D1D2...Dm=1D1D2...DmC_i = \overline {D_1 \oplus D_2 \oplus ... \oplus D_m}=1\oplus D_1 \oplus D_2 \oplus ... \oplus D_m

纠错

重新计算每一位校验位:

配偶原则:

Pi=CiD1D2...DmP_i=C_i \oplus D_1 \oplus D_2 \oplus ... \oplus D_m

配奇原则:

Pi=CiD1D2...Dm=1CiD1D2...DmP_i=\overline{C_i \oplus D_1 \oplus D_2 \oplus ... \oplus D_m}=1 \oplus C_i \oplus D_1 \oplus D_2 \oplus ... \oplus D_m

对于配奇或者配偶原则,得到的PiP_i都应该是00,如果不是,那么就说明有错,错误的位置是:

...P4P2P1...P_4 P_2 P_1

将这一位取反就是正确的值。


海明码
https://blog.kisechan.space/2024/hanming-code/
作者
Kisechan
发布于
2024年12月4日
更新于
2024年12月6日
许可协议