海明码校验原理透析

 海明码校验是为了保证数据传输正确而提出的,本来就是一串要传送的数据,

如:D7,D6,D5,D4,D3,D2,D1,D0,这里举的是八位数据,可以是n位数据。就这样
传送数据,不知道接收到后是不是正确的。所以,要加入校验位数据才能检查是
否出错。这里涉及到一个问题,要多少位校验数据才能查出错误呢?
    我们只要能检测出一位出错,则对于8位信息数据,校验位为4位。满足下列
条件:2的k次方大于等于n+k+1,其中k为校验位位数,n为信息数据位位数。
验证一下,2的4次方等于16,n+k+1等于8+4+1等于13。
    8位信息数据与4位校验位总共有12位数据,怎么排列呢?我们先把校验位按
P4,P3,P2,P1排列,用通式Pi表示校验位序列,i为校验位在校验序列中的位置。
    传送的数据流用M12,M11,M10,M9,M8,M7,M6,M5,M4,M3,M2,M1表示,接下来的
问题是如何用D7,D6,D5,D4,D3,D2,D1,D0与P4,P3,P2,P1来表M12,M11,M10,M9,M8,
M7,M6,M5,M4,M3,M2,M1了。校验位在传送的数据流中位置为2的i-1次方,则P1在
M1位,P2在M2位,P3在M4位,P4在M8位。其余的用信息数据从高到低插入。
    传送的数据流为D7,D6,D5,D4,P4,D3,D2,D1,P3,D0,P2,P1。
    接下来,我们要弄明白如何找出错误位的问题。引进4位校验和序列S4,S3,S2
,S1。S4,S3,S2,S1等于0,0,0,0表示传送的数据流正确;如S4,S3,S2,S1等于0,0,1
,0则表示传送的数据流中第2位出错;如S4,S3,S2,S1等于0,0,1,1则表示传送的数
据流中第3位出错;依次类推。
    用M12,M11,M10,M9,M8,M7,M6,M5,M4,M3,M2,M1如何表示S4,S3,S2,S1呢,简单
的方法就是S1=1时,S4,S3,S2从0,0,0到1,1,1的所有的Mx异或。即S1等于M1异或
M3异或M5异或M7异或M9异或M11。也就是S1等于P1异或D0异或D1异或D3异或D4异或
D6。S2=1时,S4,S3,S1从0,0,0到1,1,1的所有的Mx异或。即S2等于M2异或M3异或
M6异或M7。S3=1时,S4,S2,S1从0,0,0到1,1,1的所有的Mx异或。即S3等于M4异或
M5异或M6异或M7异或M12。S4=1时,S3,S2,S1从0,0,0到1,1,1的所有的Mx异或。即
S4等于M8异或M9异或M10异或M11异或M12。这样,对于一串码流,知道几位校验位
,可以很快确定哪一位出错。
    而在发送端,可以根据S4,S3,S2,S1的表达式求出P4,P3,P2,P1的表达式,只要
把式子右边的P4或P3或P2或P1移到左边替换掉S4或S3或S2或S1就可以了。
    下面举例说明:用^表示异或
     D7,D6,D5,D4,D3,D2,D1,D0=11010001
     S4=M8^M9^M10^M11^M12=D7^D6^D5^D4^P4;     P4=D7^D6^D5^D4;
     S3=M4^M5^M6^M7^M12  =D7^D3^D2^D1^P3;     P3=D7^D3^D2^D1;
     S2=M2^M3^M6^M7      =   D3^D2^D0^P2;     P2=   D3^D2^D0;
     S1=M1^M3^M5^M7^M9^M11=D6^D4^D3^D1^D0^P1; P1=D6^D4^D3^D1^D0;
     所以,
     P4=D7^D6^D5^D4=1^1^0^1=1
     P3=D7^D3^D2^D1=1^0^0^0=1
     P2=   D3^D2^D0=  0^0^1=1
     P1=D6^D4^D3^D1^D0=1^1^0^0^1=1
     故,传送码流为D7,D6,D5,D4,P4,D3,D2,D1,P3,D0,P2,P1等于
     110110001111
     若接收端收到110110001111,则
     S4=M8^M9^M10^M11^M12=1^1^0^1^1=0
     S3=M4^M5^M6^M7^M12=1^0^0^0^1=0
     S2=M2^M3^M6^M7=0^0^1^1=0
     S1=M1^M3^M5^M7^M9^M11=1^1^0^0^1^1=0
     故,接收码流正确。
     若M6出错,由0变为1。则
     S4=M8^M9^M10^M11^M12=1^1^0^1^1=0
     S3=M4^M5^M6^M7^M12=1^0^1^0^1=1
     S2=M2^M3^M6^M7=0^1^1^1=1
     S1=M1^M3^M5^M7^M9^M11=1^1^0^0^1^1=0
     即S4S3S2S1=0110,此为十进制的6,说明第六位出错,也就是M6出错。完全符合。

 

转自:http://blog.china.alibaba.com/blog/jx8873/article/b0-i2238062.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值