突然忘了这个概念,备注一下
设:
数据有 m(message)位,校验码有 p(parity)位
则:校验码一共有 2^p 种取值;(每一位表示一个1或0,所以就是 2^p)
如果想通过校验码指出任一位上发生的错误必须满足:
2^p - 1 ≥ m + p
这里减一是为了减去正确的值
在上面的变量中,已知的是 m,因为你接受数据一定知道数据的长度
设 m = 4,通过计算不等式得到 p ≥ 3,设 p = 3,且为 p1,p2,p3
规定海明码放到 2^n(n = 0、1、2......)位置上。如下
1(001) | 2(010) | 3(011) | 4(100) | 5(101) | 6(110) | 7(111) |
---|---|---|---|---|---|---|
2^0 | 2^1 | 2^2 | ||||
p1 | p2 | m1 | p3 | m2 | m3 | m4 |
其中
海明码 | 对应位 1 | 对应位 2 | 对应位 3 | 说明 |
---|---|---|---|---|
p1(001) | 3(011) | 5(101) | 7(111) | p1 是 2^0,也就是 001 ,表示校验第一位为 1 的 m |
p2(010) | 3(011) | 6(110) | 7(111) | p2 是 2^1,也就是 010 ,表示校验第二位为 1 的 m |
p3(100) | 5(101) | 6(110) | 7(111) | p3 是 2^2,也就是 100 ,表示校验第三位为 1 的 m |
设传输的信息m 是 1010,则 m3 =1,m5 = 0,m6 = 1,m7 = 0,按照上面所说如下
海明码值 | |||
---|---|---|---|
p1 = 0(奇),1(偶) | 1 | 0 | 0 |
p2 = 1(奇),0(偶) | 1 | 1 | 0 |
p3 = 0(奇),1(偶) | 0 | 1 | 0 |
注意是奇校验码还是偶校验码