海明码(汉明码)
概念
汉明码(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,也可确定错误位
标签:校验位,h7,明码,校验,信息,校验码,汉明码 来源: https://www.cnblogs.com/LeafLove/p/14695636.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。