• 计组_海明校验码


     
    原理:
    在数据中加入几个校验码,并把数据的每一个二进制位分配在几个奇偶校验组中.

    设:校验位的个数为r,能表示2^r个信息,1个表示“没错误”, 2^r -1个指出错误发生在哪一位.

      k= 2^r –1-r个信息可用于纠正数据位.

      2^r≥k+r+1

    若要检测并纠正一位错,同时发现两位错,r,k应满足下列关系: 2^r-1≥k+r      (见表3.8)

    校验位和数据位是如何排列的

        校验位排列在  2^(i–1) (i =0,1,2,…)的位置上

        例:有一个编码 为D4D3D2D1,由此生成一个海明码

                7      6      5     4    3     2    1                                          

                D4      D3      D2     P3      D1      P2      P1

                                            2^2             2^1      2^0

              有一字节的信息需生成海明码

                D8 D7 D6 D5 P4 D4 D3 D2 P3 D1 P2 P1

                                     8                  4       2   1

    海明码的校验位Pi和数值位Di的关系
    (每个海明码的位号要等于参与校验它的几个检验位的位号之和。 )
    –例:有一个编码为1011

     

     

    P3= D4⊕D3 ⊕D2       

     0 =  1  ⊕ 0  ⊕ 1

    P2= D4 ⊕D3 ⊕D1              

     0 =  1  ⊕ 0  ⊕ 1

    P1 = D4 ⊕D2 ⊕D1

     1 =  1  ⊕ 1  ⊕ 1              

     

    最后 海明码为1010101

    7=4+2+1    6=4+2    5=4+1  3=2+1

    设 海明校验码共m位(m=K+r),形如:

    海明码编码规律通常是:

    1.校验位与数据位之和为m,每个校验位Pi在被分在位号2^(i-1)的位置,其余数据位由低到高排列.

    2.海明码的每一位Hi由多个校验位校验,关系是:被校验的每一位的位号等于校验它的各校验位位号之和.

    按上述规律讨论一个字节的海明码.

      D8D7D6D5 D4D3D2D1

    8位二进制数,k=8,根据2^r-1≥k+r , r应为5,m=13

    •海明码可表示为:H13H12……H2H1

    1.校验位与数据位之和为m,每个校验位Pi被分在位号2^(i-1)的位置,   P5~P1对应H13,H8,H4, H2 H1

    其余为数据位,形如:

      H13  H12  H11  H10  H9   H8   H7  H6  H5  H4  H3  H2  H1

      P5    D8    D7    D6    D5   P4   D4  D3   D2  P3  D1  P2   P1

      13     4      1      2      1     8     1    2     1    4    1    2    1

               8    2,8     8      8           2,4  4     4          2   

    每一位的位号等于校验它的各校验位位号之和.

    P1参与了D1 D2 D4 D5 D7的校验

    P2参与了D1 D3 D4 D6 D7的校验

    P3参与了D 2 D3 D4 D8的校验

    由此,可以找出有关数据位形成Pi值偶校验的结果。

    P1=D1⊕ D 2 ⊕ D4 ⊕ D5 ⊕ D7

    P2 =D1 ⊕ D3 ⊕ D4 ⊕ D6 ⊕ D7

    P3 =D 2 ⊕ D3 ⊕ D4 ⊕ D8

    P4 =D 5 ⊕ D6 ⊕ D7 ⊕ D8

    如果要分清是两位出错还是一位出错,还要补充一个P5总校验位。使:

    P5=D1⊕D2⊕D3⊕D4⊕D5⊕D6⊕D7⊕D8⊕P4⊕P3

          ⊕P2⊕P1

    由此,可以得出偶校验组。

    S1= P1⊕ D1⊕ D 2 ⊕ D4 ⊕ D5 ⊕ D7

     S2= P2⊕D1 ⊕ D3 ⊕ D4 ⊕ D6 ⊕ D7

    S3= P3⊕ D 2 ⊕ D3 ⊕ D4 ⊕ D8

    S4= P4⊕ D 5 ⊕ D6 ⊕ D7 ⊕ D8

    S5= P5⊕P4⊕P3⊕P2⊕ P1⊕D1⊕D2⊕D3⊕D4⊕D5⊕D6⊕D7⊕D8

    S1 ~ S5能反映出13位海明码的出错情况.

    S1= P1⊕ D1⊕ D 2 ⊕ D4 ⊕ D5 ⊕ D7

    S2= P2⊕D1 ⊕ D3 ⊕ D4 ⊕ D6 ⊕ D7

    S3= P3⊕ D 2 ⊕ D3 ⊕ D4 ⊕ D8

    S4= P4⊕ D 5 ⊕ D6 ⊕ D7 ⊕ D8

    S4 ~ S1为全0,说明没错. S4 ~ S1不为全0,说明有错. S5=1说明1位出错,而S5=0说明2位错,不再有效,且不能查出是哪2位出错

    S4 ~ S1的编码值正好等于出错的海明码的位号.如:1100和1011,分别表示H12(D8)和H11(D7)出错。

    如果 S4 ~ S1中仅有一个不为0,则表示校验位出错. S1≠0时P1(即H1)出错; S2≠0时P2(即H2)出错; S3≠0时P3(即H4)出错; S4≠0时P4(即H8)出错.

    如果S4 ~ S1中有2个或2个以上不为0,则表示有1位数据出错(两位[指r=4时]或者两位以上数据同时出错则检查不出来)。 S4 ~ S1的编码值正好等于出错的海明码的位号.如:1100和1011,分别表示H12(D8)和H11(D7)出错。

    假设S1 、 S4不为0, S2 、 S3为0,则说明P1和P4两个校验位出错,查公式,在S1和S4中同时出现而在S2和S3中不出现的数据仅有D5一个,故D5出错。或者查表, P1对应H1 , P4对应H8 ,出错的海明码位号=1+8=9,即H9出错, H9对应D5 。

  • 相关阅读:
    香港两日游的那些事儿
    香港两日游的那些事儿
    Node.js下的Hello World
    Node.js下的Hello World
    Node.js下的Hello World
    WP SyntaxHighlighter 初探
    WP SyntaxHighlighter 初探
    WP SyntaxHighlighter 初探
    Google的代码高亮-code-prettify
    Java 18套JAVA企业级大型项目实战分布式架构高并发高可用微服务电商项目实战架构
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/5528611.html
Copyright © 2020-2023  润新知