汉明校验原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汉明校验原理
首先了解一个概念:
汉明距离:任意两个码字之间对应位上码元取值不同的位的数目定义为这两个码字之间的汉明距离,如:
10100和11101,汉明距离为2。
码组的最小汉明距离:在一个码组集合中,任意两个编码之间汉明距离的最小值称为这个码组的最小汉明距离。
接下来先记住一个概念:汉明码的最小汉明距离为d=3,我不知道怎么可以证明,但这个问题可能与它的编码格式有关吧,我们知道汉明码的编码格式如下(信息位用bn表示,校验位用pn表示):
P1 P2 b1 P3 b2 b3 b4 P3 b5...
试想如果只有1个信息位,那么只需要1个校验位就可以了,如果是2个信息位,则使用汉明码时,校验位至少是3位,我感觉这里的汉明距离和这个校验位的位数有关,猜测而已。但你可以例举几个,比如
1101对应的汉明码为1010101,1110对应的汉明码为0010110,它们之间的汉明距离为3,再如1111对应的汉明码为1111111,它和1101的汉明距离为3,和1110的汉明距离为4,你可以尝试着多例举几个,不过你是不可能找出汉明距离小于3的码字。
如果用d表示码组的最小汉明距离,那么
(1)当码组用于检测错误时,设可检测e个位的错误,则,
d >=
e + 1
因为汉明码的最小汉明距离为3,所以说汉明码最多可以同时检测2个错误
(2)若码组用于纠错,设可纠错t个位的错误,则
d >= 2t+1
同理,汉明码最多可以一次纠错1位的错误
(3)如果码组用于纠正t个错,检测e个错,则
d >= e+t+1, 这里e>t
同理,汉明码最多可以纠错1位的错误,同时可以检测1位的错误
接下来让我们看看汉明码的纠错过程:
为了理解更清楚,这里先引入一个例子:
对1101进行汉明编码,这里1101为信息位,为了保证校验码能表示编码后每一位出错的情况,校验位的位数需满足下式:
2^r>=n+1,其中n为汉明编码后的总码长,r为校验位位数,假设信息位位数为m,那么有n=r+m。
即有2^r>=r+m+1
对于m=4的信息,为了校验位能表示出每一位出错的情况,那么校验位至少为r=3.
eg:假设信息位用Di表示,校验位用Ji表示,那么对有4位信息位的信息编码后的汉明码为
J1J2D1J3D2D3D4,依次编号为a1a2a3a4...a7
以1101为例:
令校验位表示每位出错时的状态如下:
s1 s2 s3
a1:0 0 1 J1
a2:0 1 0 J2
a3:0 1 1 1
a4:1 0 0 J3
a5:1 0 1 1
a6:1 1 0 0
a7:1 1 1 1
最后还有无错误状态下的000
从可以看出对于校正子s1,a4,a5,a6,a7构成偶校验,对于s2,a2,a3,a6,a7构成偶校验,同理对于s3,a1,a3,a5,a7构成偶校验,所以可以得到以下校验式:
s1=a4⊕a5⊕a6⊕a7
s2=a2⊕a3⊕a6⊕a7
s3=a1⊕a3⊕a5⊕a7
在发送端,编码器根据上式分别设置校验位j1,j2,j3为1,0,0,生成的汉明码为1010101,在接收端,解码器根据上式分别计算出s1,s2,s3,如果无误,则s1,s2,s3均应该为0,如果有误,则可以根据s1,s2,s3的组合查询出错误位,如:
假如a6发生错误,则接收到的编码为1010111,那么分别计算上式,则可以得出s1=1,s2=1,s3=0,即110,查表可知a6位发生错误。