校验码-海明码

1,奇偶校验码

    是通过增加冗余位使得码字中“1”的个数恒为奇数或者偶数的编码方式,是一种检错码。无法纠正错误。

    原编码            奇校验            偶校验

    0000               0000  1          0000  0

    0010               0010  0          0010  1

    1100               1100  1          1100  0


2、海明码

    为k个数据位设置r个校验位,则r个校验位能表示2的r次方个状态,用1个状态指出“没有错误发生”,用剩余的2的r次方减一个状态指出有错误发生在某一位,因此校验位的位数r与数据位k应满足以下关系:

                2的r次方 ≥ k+r+1

    海明码可以实现纠错,能指出哪一位出错,能对出错位求反得到该位的正确值。

例子:求011的海明码

第一步,确定校验位的位数

    k=3,那么r=3

第二部,确定校验位的位置,位置在2^i处(i=0,1,2,…)即在第1,2,4,8,16…处

海明码h6h5h4h3h2h1
校验位

r3
r2r1
数据位

d3

1

d2

1


d1

0



第三步,确定校验位的值

r1=d1⊕d2 (异或:不同为1,相同为0)1

r2=d1⊕d3    1

r3=d2⊕d3    0

第四步,检验

s3=r3 xor d2 xor d3

s2=r2 xor d1 xor d3

s1=r1 xor d1 xor d2

若s3,s2,s1为001,则第1位出错;若为100,则第4位出错。


说明:

对于:

    P1,P2,B3,P4,B5,B6,B7,P8,B9,B10)

确定校验位的值要首先确定采用奇校验还是偶校验。以偶校验为例

P1=B3⊕B5⊕B7⊕B9…

P2=B3⊕B6⊕B7⊕B10⊕B11…

P4=B5⊕B6⊕B7⊕B11⊕B12⊕B13⊕B14…

P8=B9⊕B10⊕B11⊕B12⊕B13⊕B14⊕B15…

①校验位为什么是几个数据抑或(⊕)的和?

我们说了我们采用的校验方法是偶校验,拿P1来说,它要使得P1,B3,B5,B7…这个数列中1的个数为偶数个。那么可以用上面的公式来求得P1的值为0。原因是比如上例数据100101,其中B3、B5、B7、B9为1、0、1、0,则1的个数为2个为偶数个,那么P1只要为0就可以满足P1,B3,B5,B7…中1的个数为偶数个了。其他的P2、P3、P4同理。

为什么P1是这几个数的和,而P2又是另外几个数的和,他们是怎么组合的呢?

这是个很妙的事情,对于Pi,从Pi开始连续i位然后隔i位再连续i位直至最后相抑或(⊕)得到Pi。比如P4=B5⊕B6⊕B7⊕B12⊕B13⊕B14⊕B15…。等号后边是从P4开始(包括P4)连续4位再跳过4位(B8,B9,B10,B11)再连续4位B12,B13,B14,B15…这些位相抑或(⊕)得到P4。其他的校验码同理。


(部分内容引用https://www.cnblogs.com/rainvector/p/3509522.html)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值