关于汉明码的一些总结

汉明码(检两位错,纠一位错)

~~~借鉴自大佬的博客,写的很好~~~

-----------------------------------------------采用偶校验和奇校验原理部分相同,本篇采用偶校验

校验码个数k:

        k=2^{k}\geq n+k+1    (n为数据位数)

附表 k的取值:

n12-45-1112-2627-5758-120······
k234567······

 

 

 

校验码分别设为 p_{1}p_{2}p_{3}p_{4} ······

校验码位置:2^{i} 位置上(1、2、4、8、16 ······)

确定校验码的值(保证组内数据1的个数为偶数从而确定校验码p_{i}的值):

    p_{1} 由二进制位置为xxx1的数据组确定(位置为1,3,5,7,9,11 ·······的数据组)

    p_{2} 由二进制位置为xx1x的数据组确定(位置为2,3,6,7,10,11 ·······的数据组)

    p_{3} 由二进制位置为x1xx的数据组确定(位置为4,5,6,7 ·······的数据组)

    p_{4} 由二进制位置为1xxx的数据组确定(位置为8,9,10,11 ·······的数据组)

    ······

检错:

将接收到的序列的2^{i}位置上的p_{i+1} 及其对应的数据组 异或 得到的i+1个值 逆序排列 转化为十进制 即为出错的位置

 

 

 

例:

数据 1010

校验码个数 k=3

设汉明码为 H1,H2,H3,H4,H5,H6,H7

数据为D1,D2,D3,D4

校验码为P1,P2,P3

则 H1=P1 H2=P2 H4=P3 剩下的依次放入数据

H1H2H3H4H5H6H7
P1P2D1P3D2D3D4
  1 010

 

 

 

 

P1 由3,5,7位置上的数据决定(分别为1,0,0),所以P1 = 1

P2 由3,6,7位置上的数据决定(分别为1,1,0),所以P2 = 0

P3 由5,6,7位置上的数据决定(分别为0,1,0),所以P3 = 1

H1H2H3H4H5H6H7
P1P2D1P3D2D3D4
1011010

 

 

 

 

所以汉明码为 1011010

 

假设收到的序列为 1011110

H1H2H3H4H5H6H7
1011110

 

 

 

 

H1⊕H3⊕H5⊕H7= 1

H2⊕H3⊕H6⊕H7= 0

H4⊕H5⊕H6⊕H7= 1

逆序排列为 101

即第5位出了差错,取反即为原序列,

再去掉2^{i}位置上的数就是要传送的数据

 

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值