海明码(汉明码)

海明码(汉明码)

概念

汉明码(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,也可确定错误位

posted @ 2021-04-23 21:34  落水清心  阅读(1620)  评论(0编辑  收藏  举报