1、什么是海明码(提出者Richard Hamming )
海明码是一种多重(复式)奇偶检错系统,用于检错和纠错。
2如何确定校验码
其实计算海明校验码的值只需三步:
对于原始数据信息位m,计算得出需要的k位校验码
如何确定最小的校验位数 k k k
假设原有信息为 m m m位,则和校验位加起来长度有 m + k m+k m+k.校验位数k可以确定 $2^k $个状态,这些状态中必有一个其所有奇偶测试都是真的,于是剩下 2 k − 1 2^k-1 2
k
−1 种状态。所以通过
2 k − 1 > = m + k 2^k-1>=m+k
2
k
−1>=m+k
可以算出 k k k
如原始信息为0110 1110 8位
2 k − 1 > = 8 + k 2^k-1>=8+k
2
k
−1>=8+k
导出
k = 4 k=4
k=4
海明校验码是放在2的幂次位上的,如 1,2,4,8,16…等
计算校验码
来一波例子,假设原始信息为
位置 8 7 6 5 4 3 2 1
原始信息位 0 1 1 0 1 1 1 0
第一步
计算出K=4
1
第二步
确定校验码的位置在1 ,2 ,4,8位置上
1
则新的信息位:
位置 12 11 10 9 8 7 6 5 4 3 2 1
新的信息位 0 1 1 0 H8 1 1 1 H4 0 H2 H1
第三步
计算校验位的值,也是最为关键的一步
1
位置 二进制码
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
10 1010
11 1011
12 1100
海明码 出现的位置 对应位置上的值异或 结果
H1 3,5,7,9,11 0⊕1⊕1⊕0⊕1 1
H2 3,6,7,10,11 0⊕1⊕1⊕1⊕1 0
H4 5,6,7,12 1⊕1⊕1⊕0 1
H8 9,10,11,12 0⊕1⊕1⊕0 0
最终的信息位为
位置 12 11 10 9 8 7 6 5 4 3 2 1
最终信息位 0 1 1 0 0 1 1 1 1 0 0 1
校验码H8H4H2H1 = 0101
接收端如何检验和纠错呢
假设 0110 0111 1001 ->传输为 0111 0111 1001
0111 0111 1001 按上文重新算出校验码:H8H4H2H1=1100
出错的位数:原信息的校验码⊕出错后信息校验码
0101⊕1100=1001 转化为10进制就是第9位 属于出错位
————————————————
版权声明:本文为CSDN博主「sunny_phper」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/coolskyying/article/details/78963550