汉明码编码原理
汉明码也叫做海明码,它通过向原始数据中添加校验数据来进行查错和纠错。具体来说,
-
假设数据位有n位,则校验位为k,k满足 2^k >= n+k+1
-
汉明码的位数为n+k,且校验位位于2的幂次的位置
-
每个检验位都规定检验了对应位置,如:
H1 负责 1 3 5 7… 位数的校验
H2 负责 2 3 6 7… 位数的校验
H4 负责 4 5 6 7… 位数的校验 -
校验位的结果 = 对应检验数据位的异或
-
例:数据:0011 n=4,计算得k=3
则汉明码:H1 H2 0 H4 0 1 1
H1 = 0 ⊕ 0 ⊕1 = 1
H2 = 0 ⊕ 1 ⊕1 = 0
H4 = 0 ⊕ 1 ⊕ 1 = 0
所以最终传输的数据:100011
汉明码查错纠错原理
-
汉明码只能检测并纠正一位错误。它是对每个校验位负责的校验的位数进行异或操作,如果结果为0则无错。
-
假设刚才的数据出现差错变成了100001:
P1 = 1 ⊕ 3 ⊕ 5 ⊕ 7 = 0 无错 第1、3、5、7位无措
P2 = 2 ⊕ 3 ⊕ 6 ⊕ 7 = 1 有错 第6位出错