汉明编码

汉明编码是一种可用于纠错的编码方式,通过增加很少的冗余位来达到纠正错误的目的。普通的汉明编码具有一位的纠错能力。

例子

最常见的汉明编码是4->7的:也就是说4位的数据+3位的纠错码,总共每次传输7位的数据,如果其中有一位翻转,我们也可以通过校验的方式准确得知是哪一位出错的。

假设待编码的数据是1011,编码过程见下表:

校验位1 校验位2 数据位1 校验位3 数据位2 数据位3 数据位4
校验位1 1^0^1 1 0 1
校验位2 1^1^1 1 1 1
校验位3 0^1^1 0 1 1
结果 0 1 1 0 0 1 1

上表的含义是:校验位1 = 数据位1 ^ 数据位2 ^ 数据位4,依此类推。至于为什么是这样的,后面再讲。

由上表可知,1011的编码结果是0110011。假设数据在传输过程中第5位翻转了,变成了0110111。现在我们来校验汉明码:

校验位1 校验位2 数据位1 校验位3 数据位2 数据位3 数据位4 校验结果
校验位1 0 1 1 1 0^1^1^1=1
校验位2 1 1 1 1 1^1^1^1=0
校验位3 0 1 1 1 0^1^1^1=1

检验结果为101≠0,因此出错了,根据校验结果101(首位的1来自于校验位3)可知第5位出错了,与事实相符。

解释

鸽了鸽了,,有时间再写。。。