海明校验思路
之前学习的奇偶校验码中的偶校验只能发现奇数位错误,并且不能确定哪一位出错,所以只要出现错误就要重新传输。
海明码思想:
1.将信息位分组进行偶校验。(导致多个校验位)
2.对n个信息位进行k个分组,每个分组对应一个校验位。
3.k个校验位可以表示2^ k种状态,海明码是n个信息位+k个校验位,一共是n+k个位,都有可能出错,还有一种正确的状态。故校验位2^k种状态都需要包括这些情况。
2^k>=n+k+1
(考试的时候带几个k算即可求出)
求解步骤
例:信息位:1010
1.确定海明码位数:n=4->k=3 (一共7位)
信息位:D4 D3 D2 D1 = 1 0 1 0
校验位:P3 P2 P1
海明码:H7 H6 H5 H4 H3 H2 H1
2.校验位的位置:
Pi放在海明位号为2^(i-1)的位置上。(即为1 2 4 8 16…)可以理解为权重,P1的权重为1,P2的权重为2…以此类推。
3.求校验位:
已经将信息位分为了三组,再在每组进行偶校验。首先需要求Pi的值。
方法:将信息位所在海明码的位号展开成二进制:
H3: 3-> 0 1 1
H5: 5-> 1 0 1
H6: 6-> 1 1 0
H7: 7 -> 1 1 1
对应权重为:4 2 1与P3 P2 P1对应。
末位为1的归为P1所属分组。 P1=D1 D2 D4 的异或=0
倒数第二位归为P2所属分组。P2=D1 D3 D4 的异或=1
倒数第三位归为P3所属分组。P3=D2 D3 D4 的异或=0
4.纠错:
校验方程:
S1= P1 D1 D2 D4 的异或
S2=P2 D1 D3 D4 的异或
S3=P3 D2 D3 D4 的异或
(每个分组进行偶校验)
若接收到1010010
则: S1=0 S2=0 S3=0
若接收到1010000
则:S1=0 S2=1 S3=0
对应二进制数:2 故第二位出错
5.全校验位:
一般海明码使用的时候要加上全校验位,对整体偶校验。
S3 S2 S1 = 0 0 0 且全体偶校验成功。 无错误
S3 S2 S1 !=0 0 0 且全体偶校验失败。 有一位错,可纠正。
S3 S2 S3 !=0 0 0 且全体偶校验成功。 有两位错误,要重传。