1.计算1011海明码的校验位
根据公式n+k<=-1 (n是信息码位数,1011就是4)
则 k=3
4+3<=-1
由上可知校验码有3个
又因为
=4 =2 =1
可以列出下列表格
7 | 6 | 5 | 4 | 3 | 2 | 1 |
d3 | d2 | d1 | x2 | d0 | x1 | x0 |
1 | 0 | 1 | 1 |
x0 x1 x2 分别为3个校验码的位置
又因为
7=4+2+1 6=4+2 5=4+1 3=2+1
2 1 0 2 1 2 0 1 0 此行表示校验码位置,例如7里面包含 x2 x1 x0而6只有 x1 x0
因此得到分组
x2(d3 d2 d1)x1(d3 d2 d0)x0(d3 d1 d0)
将分组里的值进行异或操作
d3d2d1 =101=0=x2
d3d2d0 =101=0=x1
d3d1d0 =111=1=x0
最终可得
7 | 6 | 5 | 4 | 3 | 2 | 1 |
d3 | d2 | d1 | x2 | d0 | x1 | x0 |
1 | 0 | 1 | 0 | 1 | 0 | 1 |
信息码加上校验码后的结果为
1010101
2.海明码校验和纠错
(因为网上说海明码最多只能纠错1位,我也不太理解,因此只用1位做例子)
当发送端发送1010101时,接收端接收到的是1110101(这里设置第2位错误)
二进制 | 十进制 | 正确 | 错误 | ||
0 | 0 | 1 | 1 | 1 | 1 |
0 | 1 | 0 | 2 | 0 | 1 |
0 | 1 | 1 | 3 | 1 | 1 |
1 | 0 | 0 | 4 | 0 | 0 |
1 | 0 | 1 | 5 | 1 | 1 |
1 | 1 | 0 | 6 | 0 | 0 |
1 | 1 | 1 | 7 | 1 | 1 |
根据上表进行分组
将二进制各个位上为1对应的码数找出来后进行异或操作,为0正确,为1代表有错误
二进制第一位 X1 1111=0
二进制第二位 X2 1101=1 这里有错误
二进制第三位 X3 0101=0
上面发现错误,然后将上面按位排列X3X2X1,得二进制数 010 转换为十进制 2
因此可对应上表找到 十进制2所对应的错误码位置
纠错只要把该码取反即可 ,即上面的1变成0就行了