汉明码(Hamming Code),是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名。
本文以101101100这个二进制数为例解释海明码的编码和校验方法。
首先我们要知道汉明码是采用奇偶校验的码,汉明码默认一串数据只错一位。
设数据有n位,校验码有x位。则校验码一共有2x种取值方式。其中需要一种取值方式表示数据正确,剩下2x-1种取值方式表示有一位数据出错。因为编码后的二进制串有n+x位,因此x应该满足
2^x-1 ≥ n+x
1。使不等式成立的x的最小值就是校验码的位数。在本例中,n=9,解得x=4。
2。 确定校验码的位置。校验码在二进制串中的位置为2的整数幂。剩下的位置为数据位。
(其中r1,r2,r3,r4就是校验的海明码)
3.接下来我们需要解出各个校验位。
首先将各个数据位所在位置用二进制表示,比如第一个0在第3位,换为二进制就是 I1=3=2^0 + 2^1 =0011。
I1=0011 I2=0101 I3=0110 I4=0111
I5=1001 I6=1010 I7=1011 I8=1100 I