hamming_code.md
汉明码可用于单个二进制位的查错和纠错,用一个简单的例子了解其工作方式
例子
对11000010进行汉明编码,求编码后的码字。
- 列出表格,从左往右(或从右往左)填入数字,但2的次方的位置不填。
位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
数据 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
- 把数据行有1的列的位置写为二进制。
位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
数据 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | ||||
二进制 | 0011 | 0101 | 1011 |
- 收集所有二进制数字,求异或$0011\oplus 0101 \oplus 1011=1101$
- 把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 |
- 所以编码后的码字是101110010010
纠错
要检查某一位的错误,则需检查某一位所包含的所有奇偶校验位。这种错误的模式被叫做伴随式错误。如果所有奇偶校验位是正确的,就没有错误。除此以外的情况,错误的奇偶校验位的位置的和将识别错误的位。例如,如果位置为1、2、8的奇偶校验位指示了一个错误,那么位置为1+2+8=11的位出错了。如果只有一个奇偶校验位指示了错误,那么该奇偶校验位自身出错了。