海明校验码

网上搜了很多关于海明校验码的介绍,看的云里雾里,后面看到一个博客,才弄懂了海明校验码的计算方法,特此分享下。

链接如下:

常用校验码(奇偶校验码、海明校验码、CRC校验码) - FunnyOne - 博客园 (cnblogs.com)

m个数据+k个校验位=m+k个码字

公式:m+k+1<2^k

例:求 1011的海明校验码

m=4, 根据公式 4+k+1<2^k => k=3 即校验位为3位,则新的码字为7位

因为海明校验码是放在2的幂次位上,所以插在位置1,2,4中

位置

1

2

3

4

5

6

7

信息位

1

0

1

1

位置

用到的校验码

1

校验位

2

校验位

3

1+2

4

校验位

5

1+4

6

2+4

7

1+2+4

校验码的位置是1,2,4。位置3= 1 + 2,所以位置3用到的校验码是1和2;位置7= 1 + 2 + 4组成的,所以位置7用到的校验码是1,2和4。

然后将校验码校验的位置记录下来:

校验码1(位置1):3,5,7
校验码2(位置2):3,6,7
校验码3(位置4):5,6,7

注意:后面的数字串是位置的下标,不是值,值还是0或1。

然后做异或运算(相同时为0,不同时为1)

校验码1(位置1):1 xor 0 xor 1  = 0
校验码2(位置2):1 xor 1 xor 1  = 1
校验码3(位置4):0 xor 1 xor 1  = 0
带入表格:

位置

1

2

3

4

5

6

7

信息位

0

1

1

0

0

1

1

接收端接收校验

若此时接收方收到的数据相比源数据,在第6位发生了错误:

位置

1

2

3

4

5

6

7

信息位

0

1

1

0

0

0

1

接收方采用前面类似的方式进行计算校验,区别在于要加上校验位自身这一位,即:

C1= 0(校验码1) xor 1 xor 0 xor 1  = 0
C2= 1(校验码2) xor 1 xor 0 xor 1  = 1
C3= 0(校验码3) xor 0 xor 0 xor 1  = 1

错误位判断:

由于海明校验采取的是偶校验,则上面校验结果全为0说明数据无误(奇校验为1说明数据无误),则C1监督式包含的数据位无错,即3,5,7位数据无错,错误位发生在C2,C3三个监督式包含的位上。

找到C2,C3共同包含的位,为6,7位,而C1表明7位数据无错,则错误位为6位。

也可以用计算公式C3C2C1即110,转换成10进制就是6位。

  • 13
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值