zoukankan      html  css  js  c++  java
  • 计算及校验海明码的3个举例

    海明码具有检错纠错能力,用于传输质量较好的信道,因为出错太多检测不出来。

    m位数据需要满足具有r位校验码

    m+r ≤ 2r-1

    校验位放在2n位置上,如??1? 111? 1111 111? 111...

    校验码依次在20 21、 22、 23、 24位置上,有的是从后往前写的,结果不影响,知道怎么算就行。

    例1,计算1011的海明码及检验

    1. 算校验位

    原数据1011, 有4位数据位, 需满足4+r≤2r-1这个公式, 求得r=3,表明有3个检验位,以下用a、b、c、...来代替

    得到ab1c011

    2. 算校验位值

    令发送方和接受方都采用偶检验的方法,也就是保证1的个数为偶数。采用奇检验结果也一样,但收发双方一定要用相同的检验方法。

    a b 1 c 0 1 1

    第一位检验位a的计算方法:从a开始检验一位,跳过一位,即20位,利用偶检验确定a。

    第二位检验位b的计算方法:从b开始检验两位,跳过两位,即21位,利用偶检验确定b。

    第三位检验位c的计算方法:从c开始检验四位,跳过四位,即22位,利用偶检验确定c。


    a b 1 c 0 1 1

    a 1 0 1 偶检验确定a=0


     a b 1 c 0 1 1

    b 1 1 1 偶检验确定b=1


     a b 1 c 0 1 1

    后面没有了,所以就是c 0 1 偶检验确定c=0


     代入abc得海明码0110 011

    3. 检验

    传输海明码,若在信道上受到干扰,导致一位编码出现异常由0110 0110111 011

    根据确定检验位的值来检验,第n组 检验2n位,跳过2n位,分别把每组的数据异或,得出错位置。这里的异或也就是相当于偶检验的过程,1的个数为偶数G就为0。


     0 1 1 1 0 1 1

    G1=0⊕101=0


    0 1 1 1 0 1 1

    G2=1⊕1⊕1⊕1=0


    0 1 1 1 0 1 1

    G3=1⊕0⊕1⊕1=1


    由于发送端采用的是偶检验那么G3G2G1=000可说明传送中没有出错,G3G2G1=100转化为十进制说明海明码第4位出错,将第四位纠错后变成0110 011

    例2,计算0111 011的海明码及检验

    1. 算校验位

    m=7,根据m+r ≤ 2r-1求得r=4

    a b 0 c 1 1 1 d 0 1 1

    2. 算校验位值

    令发送方和接受方都采用偶检验的方法,也就是保证1的个数为偶数。

    a b 0 c 1 1 1 d 0 1 1


    a b 0 c 1 1 1 d 0 1 1

    a 0 1 1 0 1 偶检验确定a=1


    a b 0 c 1 1 1 d 0 1 1

     b 0 1 1 1 1 偶检验确定b=0


    a b 0 c 1 1 1 d 0 1 1

    c 1 1 1 偶检验确定c=1


    a b 0 c 1 1 1 d 0 1 1

    d 0 1 1 偶检验确定d=0


    代入abcd得海明码1001 1110 011

    3. 检验

    传输海明码,若在信道上受到干扰,导致一位编码出现异常由1001 1110 0111001 1110 111

    根据确定检验位的值来检验,第n组 检验2n位,跳过2n位,分别把每组的数据异或,得出错位置。


    1 0 0 1 1 1 1 0 1 1 1

     G1=1⊕0⊕1⊕111=1


    1 0 0 1 1 1 1 0 1 1 1

    G2=0⊕0⊕1⊕1⊕1⊕1=0


    1 0 0 1 1 1 1 0 1 1 1

    G3=1⊕1⊕1⊕1=0


    1 0 0 1 1 1 1 0 1 1 1

    G4=0⊕1⊕1⊕1=1


    由于发送端采用的是偶检验那么G4G3G2G1=0000可说明传送中没有出错,G4G3G2G1=1001转化为十进制说明海明码第9位出错,将第9位纠错后变成1001 1110 011

    例3,计算0111 0110 11的海明码及检验

    再来个多的,再多就没有意义了。

    1. 算校验位

    m=10,根据m+r ≤ 2r-1求得r=4

    a b 0 c 1 1 1 d 0 1 1 0 1 1

    2. 算校验位值

    令发送方和接受方都采用偶检验的方法,也就是保证1的个数为偶数。

    a b 0 c 1 1 1 d 0 1 1 0 1 1


    a b 0 c 1 1 1 d 0 1 1 0 1 1

    a 0 1 1 0 1 1偶检验确定a=0


    a b 0 c 1 1 1 d 0 1 1 0 1 1

    b 0 1 1 1 1 1偶检验确定b=1


    a b 0 c 1 1 1 d 0 1 1 0 1 1

    c 1 1 1 1 1偶检验确定c=1


    a b 0 c 1 1 1 d 0 1 1 0 1 1

    d 0 1 1 0 1 1偶检验确定d=0


    代入abcd得海明码0101 1110 0110 11

    3. 检验

    传输海明码,若在信道上受到干扰,导致一位编码出现异常由0101 1110 0110 110001 1110 0110 11

     根据确定检验位的值来检验,第n组 检验2n位,跳过2n位,分别把每组的数据异或,得出错位置。


    0001 1110 0110 11

    G1=0⊕0⊕1⊕1⊕0⊕11=0


    0001 1110 0110 11

    G2=0⊕0⊕1⊕1⊕1⊕11=1


    0001 1110 0110 11

    G3=1⊕1⊕1⊕1011=0


    0001 1110 0110 11

    G4=0⊕0⊕1⊕1011=0


    由于发送端采用的是偶检验那么G4G3G2G1=0000可说明传送中没有出错,G4G3G2G1=0010转化为十进制说明海明码第2位出错,将第2位纠错后变成0101 1110 0110 11

  • 相关阅读:
    centos6.5的开机自动部署出现unsupported hardware detected
    Nginx的安装
    sshpass的使用方法
    dhcp 的安装和配置文件
    SMBus总线概述
    SMBus与I2C的差别
    vim搭建笔记
    pcie dma的玩法
    Virtex6 PCIe 超简版基础概念学习(二)
    揭开Altera公司支持OpenCL的设计工具的神秘面纱
  • 原文地址:https://www.cnblogs.com/xfk1999/p/calculate-hamming-code.html
Copyright © 2011-2022 走看看