海明校验
简介:本文旨在用最简洁的篇幅向大家介绍,如何快速的学会海明校验,并会做相关的题目。
海明码简介:海明码是一种多重(复式)奇偶检错系统,用于检错和纠错。
原理:在 k位数据中增加 r位校验位构成 n + k位码字,附加的 r位校验位能够均匀的拉大,每个校验位对码字中的若干位进行奇偶校验,这样当某一位出错后,会引起几个校验位的值的变化。这样既能检测出错误,又可以位纠错提供依据。
计算方法:
我们以一个具体的题目为例子来看:
真题演练
对于01100111,计算他的海明码。
第一步:
计算长度
通过公式计算海明码的校验码的长度r:
- 校验位数:假设有r位校验码,k位有效数据位,则有关系:
- 2r - 1 ≥ k + r
k = 8可以得到r=4
第二步:
画表格
编码前为:01101110
0 | 1 | 1 | 0 | x | 1 | 1 | 1 | x | 0 | x | x | |
二进制 | 1100 | 1011 | 1010 | 1001 | 1000 | 0111 | 0110 | 0101 | 0100 | 0011 | 0010 | 0001 |
海明码 | H12 | H11 | H10 | H9 | H8 | H7 | H6 | H5 | H4 | H3 | H2 | H1 |
对应位 | D8 | D7 | D6 | D5 | P4 | D4 | D3 | D2 | P3 | D1 | P2 | P1 |
G1组 | √ | √ | √ | √ | √ | |||||||
G2组 | √ | √ | √ | √ | √ | |||||||
G3组 | √ | √ | √ | √ | ||||||||
G4组 | √ | √ | √ | √ |
规则为:计算出每一位的二进制数,然后对于G1那么就选择出对应位为D的,然后对应的H的二进制第一位为1的,在下面打上√。
异或的原理为:
P1 = D7⊕D5⊕D4⊕D2⊕D1 = 1详细过程:1⊕0⊕1⊕1⊕0=1
P2 = D7⊕D6⊕D4⊕D3⊕D1 = 0
P3 = D8⊕D4⊕D3⊕D2 = 1
P4 = D8⊕D7⊕D6⊕D5 = 0
第三步:
获得海明码,将P的位置替换好。
011001111001
第四步:
海明码的验错:
原理:
- 将对应的校验位进行异或运算,即 Si = Pi ⊕ Pi’
- 若四位校验码为 0000,则表明该码字传输无误
- 若四位校验码不全为零,则将校验码的结果按低位到高位排布,即 S4S3S2S1,将此校验码转化成十进制数,表示海明码对应位数出现了错误。
假设发送海明码为1100110,接受海明码为1100100,这个时候G3G2G1=000,信息正确,从中提取有效信息为1101(也就是去掉P位之后,剩下的D位)
若海明码位1110110(D4D3D2P3D1P2P1),有效信息为1111(D4D3D2D1)
G3 = P3⊕D2⊕D3⊕D4=0⊕1⊕1⊕1=1
G2 = P2⊕D1⊕D3⊕D4=1⊕1⊕1⊕1=0
G1 = P1⊕D1⊕D2⊕D4=0⊕1⊕1⊕1=1
对应G3G21=101(十进制为5,对应D2),然后将D2求反获得信息为1101。
如果大家觉得有用的话,可以关注我下面的微信公众号,极客李华,我会在里面更新更多行业资讯,企业面试内容,编程资源,如何写出可以让大厂面试官眼前一亮的简历等内容,让大家更好学习编程,我的抖音,B站也叫极客李华。大家喜欢也可以关注一下