首先放个图,为汉明码中信息位N与校验位K的位数关系:
2^(K-1)>=N+K+1
码距:一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit)数叫这两个码字的码距,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。
以汉明校验码中的偶校验为例,若汉明码最高位号为m,最低位号为1,即有Hm、Hm-1、Hm-2···H2、H1。
一、
编码规则为:
⑴每个校验位Pi在汉明码中被分到位号2^(i-1)的位置上,其余各位为信息位。
⑵汉明码的每一位Hi有多个校验位校验,其关系式是被校验的每一位位号等于校验它的各校验位的位号之和。
⑶在增大码距时,应使所有编码的码距尽量均匀的增大,以保证对所有代码的检测能力平衡的提高。
二、
校验规则为:
⑴当S5~S1为00000时,表明无错。
⑵当S5~S1中仅有一位不为0时,表明是某一校验位出错或者是3位汉明码同时出错。由于3位同时出错的情况很少,故通常认为是某一位出错,出错位是该Si对应的Pi位。
⑶当S5~S1中有2位不为0时,表明是两位汉明码同时出错,此时只能发现错误,但无法确定出错位置。
⑷当S5~S1中有3位不为0时,表明1位信息位出错或3位汉明码同时出错,由于3位同时出错的情况很少,故通常认为是某一位信息位出错。出错位的位号由S5~ S1 的4位代码值指明,此时不仅能检查出一位错,而且能够准确的定位,因而可以纠正这个错误(该位取反)。
⑸当S5~S1中有4位或5位不为0时,表明出错情况严重,系统工作可能出现故障,应当检查系统硬件的正确性。
按照以上原则,我们来看一道例题:设有一个8位信息为1010 1100,试求汉明编码的生成和校验过程。
1.编码生成:由信息位与校验位的关系2^(K-1)>=N+K+1得,K=5,即有5位校验位。将校验位关系列出,校验过哪些信息位就列出,按偶校验有:
P1=D1⊕D2⊕D4⊕D5⊕D7=1
P2=D1⊕D3⊕D4⊕D6⊕D7=1
P3=D2⊕D3⊕D4⊕D8=1
P4=D5⊕D6⊕D7⊕D8=0
在上述4个公式中,不同信息位出现在Pi项中的次数是不一样的,其中D4和D7出现了3次,而D1、D2、D3、D5、D6、D8仅出现两次。此时,不同公式中的码距不同,,因此需要再补充一项校验公式,使得各信息位被校验的次数相等:P5=D1⊕D2⊕D3⊕D5⊕D6⊕D8=1 。
则其二进制表示的汉明码为1101 0011 0101 1
2.校验
假设上述汉明码经传送后,H11(D7)位发生了错误,原码字就变为 1111 0011 0101 1
检错只需要将接收到的码字重新进行偶校验即可。
检错关系式为:
S1=P1⊕D1⊕D2⊕D4⊕D5⊕D7=1
S2=P2⊕D1⊕D3⊕D4⊕D6⊕D7=1
S3=P3⊕D2⊕D3⊕D4⊕D8=0
S4=P4⊕D5⊕D6⊕D7⊕D8=1
S5=P5⊕D1⊕D2⊕D3⊕D5⊕D6⊕D8=0
从S5向上,将校验结果列出得01011,即误字为01011,转化为十进制即为H11位出错。H11位为1,取反变为0即为正确信息。
纠正后的汉明码为 1101 0011 0101 1
来源:51CTO
作者:wx5e2e56c1a480f
链接:https://blog.51cto.com/14671287/2480262