hamming_code.md

汉明码可用于单个二进制位的查错和纠错,用一个简单的例子了解其工作方式

例子

对11000010进行汉明编码,求编码后的码字。

  1. 列出表格,从左往右(或从右往左)填入数字,但2的次方的位置不填。
位置 1 2 3 4 5 6 7 8 9 10 11 12
数据 1 1 0 0 0 0 1 0
  1. 数据行有1的列的位置写为二进制。
位置 1 2 3 4 5 6 7 8 9 10 11 12
数据 1 1 0 0 0 0 1 0
二进制 0011 0101 1011
  1. 收集所有二进制数字,求异或$0011\oplus 0101 \oplus 1011=1101$
  2. 把1101依次填入表格中2的次方的位置(低位在左)。
位置 1 2 3 4 5 6 7 8 9 10 11 12
数据 1 1 0 0 0 0 1 0
二进制 0011 0101 1011
校验 1 0 1 1
  1. 所以编码后的码字是101110010010

纠错

要检查某一位的错误,则需检查某一位所包含的所有奇偶校验位。这种错误的模式被叫做伴随式错误。如果所有奇偶校验位是正确的,就没有错误。除此以外的情况,错误的奇偶校验位的位置的和将识别错误的位。例如,如果位置为1、2、8的奇偶校验位指示了一个错误,那么位置为1+2+8=11的位出错了。如果只有一个奇偶校验位指示了错误,那么该奇偶校验位自身出错了。