将信息位分组进行偶校验---->多个校验位------> 多个检验位标注出出错位置
要学习海明码,那么必须得掌握一下偶校验码
什么是偶校验码呢
偶校验码就是整个校验码(有效信息位和校验位)中“1”的个数为偶数,多个校验位反应多种状态的信息
了解了偶校验码我们就可以来了解一下海明码是怎么实现的
1.将这n个信息位分为多少个分组
2.这n个信息位应该怎么分到这个分组中
需要设计多少个校验位 包括 信息位+校验位
信息位 校验位
------------>2^k种状态-------------->2^k>=n+k+1 1种正确状态
n k
n 1 2-4 5-11 12-26 27-57 58-120
k 2 3 4 5 6 7
如果n=4 k=3
2^3>=4+3+1 8>=8成立
2^4>=10+4+1=15 n为10也是成立的.
下面举一个例子
信息位1010
1.确定海明码的位数:2^k>=n+k+1 n=4------>k=3
信息位+校验位=海明码的位数
信息位D4D3D2D1(1010)校验位P3 P2 P1
对应的海明码为H7H6H5H4H3H2H1
2.确定校验位的分布
H7 H6 H5 H4 H3 H2 H1
D4 D3 D2 P3 D1 P2 P1
校验位Pi放在海明位号为2^i-1位置上
P1,P2,P3
P1=2^1-1=2^0=1
P2=2^2-1=2^1=2
P3=2^3-1=2^2=4
P1 P2 P3 分别放在H1, H2, H4 上 D4,D3,D2,D1分别放在其他位置
因为上面已经记录过了所以分成三个组
3.求校验位的值
把信息位对应的海明码数写下来
H3: 3-------->0 1 1
H5: 5-------->1 0 1
H6: 6-------->1 1 0
H7: 7-------->1 1 1
选择1的海明码找到信息位,然后用信息位的形式进行异或
P1=H3异或H5异或H7
=D1异或D2异或D4
=0 1 1
=0
异或这种运算有一个很简单的方法判断它是1还是0,那就是看他有奇数个1还是偶数个1,如果有奇数个1那么就是1,如果有偶数个1那么就是0
P2=H3异或H6异或H7
=D1异或D3异或D4
= 0 1 0
= 1
P3=H6异或H5异或H7
=D4异或D2异或D4
=0 1 1
=0
4.纠错 校验方程
S1=P1异或D1异或D2异或D4
S2=P2异或D1异或D3异或D4
S3=P3异或D2异或D3异或D4 偶校验=0
接收到1010010
S1=P1异或D1异或D2异或D4=0
S2=P2异或D1异或D3异或D4=0
S3=P3异或D2异或D3异或D4=0
接收到10100000
S1=P1异或D1异或D2异或D4=0
S2=P2异或D1异或D3异或D4=1
S3=P3异或D2异或D3异或D4=0
那么第010位出错------->第2位
用图来表示就是这样的