什么是海明码?

网络协议
海明校验码详解

sunny_phper
原创
关注
52点赞·30012人阅读
什么是海明码(提出者Richard Hamming )
海明码是一种多重(复式)奇偶检错系统,用于检错和纠错。
如何确定校验码
其实计算海明校验码的值只需三步:
对于原始数据信息位m,计算得出需要的k位校验码

如何确定最小的校验位数 k k k
假设原有信息为 m m m位,则和校验位加起来长度有 m + k m+k m+k.校验位数k可以确定 $2^k $个状态,这些状态中必有一个其所有奇偶测试都是真的,于是剩下 2 k − 1 2^k-1 2k−1 种状态。所以通过 2 k − 1 > = m + k 2^k-1>=m+k 2k−1>=m+k 可以算出 k k k
如原始信息为0110 1110 8位 2 k − 1 > = 8 + k 2^k-1>=8+k 2k−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 ,2 ,4,8位置上
复制
则新的信息位:

位置    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    
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位 属于出错位

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值