海明校验码详解

什么是海明码(提出者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 2k1 种状态。所以通过 2 k − 1 > = m + k 2^k-1>=m+k 2k1>=m+k 可以算出 k k k
      如原始信息为0110 1110 8位 2 k − 1 > = 8 + k 2^k-1>=8+k 2k1>=8+k导出 k = 4 k=4 k=4
  • 海明校验码是放在2的幂次位上的,如 1,2,4,8,16…等

  • 计算校验码

来一波例子,假设原始信息为

位置87654321
原始信息位01101110

第一步

	 计算出K=4

第二步

	确定校验码的位置在1 ,2 ,4,8位置上

则新的信息位:

位置121110987654321
新的信息位0110H8111H40H2H1

第三步

计算校验位的值,也是最为关键的一步
位置二进制码
10001
20010
30011
40100
50101
60110
70111
81000
91001
101010
111011
121100
海明码出现的位置对应位置上的值异或结果
H13,5,7,9,110⊕1⊕1⊕0⊕11
H23,6,7,10,110⊕1⊕1⊕1⊕10
H45,6,7,121⊕1⊕1⊕01
H89,10,11,120⊕1⊕1⊕00

最终的信息位为

位置121110987654321
最终信息位011001111001

校验码H8H4H2H1 = 0101

接收端如何检验和纠错呢
假设 0110 0111 1001 ->传输为 0111 0111 1001
0111 0111 1001 按上文重新算出校验码:H8H4H2H1=1100

出错的位数:原信息的校验码⊕出错后信息校验码
0101⊕1100=1001 转化为10进制就是第9位 属于出错位

  • 81
    点赞
  • 255
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值