• 海明码(汉明码)


    海明码(汉明码)

    概念

    汉明码(Hamming Code),是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名。汉明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据位错误,以侦测并更正单一比特错误。由于汉明编码简单,它们被广泛应用于内存(RAM)。——百度百科

    编码方式

    海明码可以对一位比特错误起到检错和纠错的作用,对于海明码的编码方式包涵以下几个过程

    确定校验位数

    在海明码中,校验位((x))和信息位((y))满足如下关系:

    [2^x geq x +y ]

    根据此公式容易求出检验位和信息位的数量,有如下对应关系:

    信息位位数 1 2~4 5~11 12~26 27~57 58~120
    校验码位数 2 3 4 5 6 7

    确定校验位位置

    海明码中校验位位置是固定的均为2的幂次的位置(1,2,4,8,……)

    确定校验位的值

    海明码编码时对于每个校验位会将信息位分组,每一个校验位会覆盖多个信息位,对每个校验位其能覆盖的信息位有如下特点:

    [h为信息位地址\ p为校验位地址\ p&q>0 ]

    对于每个校验位所覆盖的区域,采用校验方式确定校验码的值,一般为偶校验

    纠错和检错

    确定校验位数

    在得到海明码之后,我们可以通过总位数来计算出相应的信息位和检验位各有多少,根据上述公式即可,同理即可得到校验位地址,并获得各个校验码

    检错

    假设各个校验码是由偶校验得到的,那么我们再次计算接收端的海明码对应的各个校验位的值,然后将新得到的校验位的值与发送来的值相比较,相同则证明该校验位覆盖的范围内的信息位全部是正确的,否则则该校验码所覆盖的范围内的信息位存在错误,通过各个校验码的比较我们可以确定那几个分组存在错误,通过查看分组的交集,便可以确定错误的信息位的位置

    纠错

    得到错误的信息位之后,对其取反即可

    示例

    发送端信息码:1010110

    信息码位数为7,所以可以确定校验码位数为4,海明码总位数为11

    校验码位置为:1,2,4,8

    计算校验码的值:(偶校验方式)

    [p1 = 偶校验(h1,h3,h5,h7,h9,h11) = 0\ p2 = 偶校验(h3,h6,h7,h10,h11) = 1\ p4 = 偶校验(h5,h6,h7) = 1\ p8 = 偶校验(h9,h10,h11) = 0\ ]

    获得海明码为:01110100110

    接收端海明码为:01110100111

    确定校验位:1,2,4,8

    计算校验码值:

    [p1 = 偶校验(h1,h3,h5,h7,h9,h11) = 1\ p2 = 偶校验(h3,h6,h7,h10,h11) = 1\ p4 = 偶校验(h5,h6,h7) = 0\ p8 = 偶校验(h9,h10,h11) = 1\ ]

    由此确定错误位为11位,因为特殊的分组方式,所以这里计算结果从高位开始排出为1011(二进制)=11,也可确定错误位

  • 相关阅读:
    DeepEarth开发文章汇总
    让人期待的Visual Studio 2010
    Silverlight & Blend动画设计系列文章
    杜拉拉“植入式营销”魔法(为写植入式广告fxgj介绍)
    C++ String Split
    一个类似Java String[] split(String regex)的VC++函数
    MSChart控件的属性与属性对话框
    植入式广告介绍 撰写 素材
    植入式营销 为何不能植入顾客脑海
    PQA2000 地震应急救生器
  • 原文地址:https://www.cnblogs.com/LeafLove/p/14695636.html
Copyright © 2020-2023  润新知