题目:
假设数据为11001010,如果采用海明校验,实现检出2个错纠正1个错,至少需要设置多少位校验位,应放在哪些位置上,写出生成的海明码。(要求写出海明码求得的过程)
答案解析:
计算校验位数量与位置:
检二纠一公式 :
(检一纠一公式:)
计算出k值(m为原始数据长,k为校验位数。本题m=8)
海明码长度:
P1,P2,P3,P4,P5分别在H1,H2,H4,H8,H13(13是最后一位,足够长应该是C16)
得出海明码应有13位及校验码对应位置:
H13 | H12 | H11 | H10 | H9 | H8 | H7 | H6 | H5 | H4 | H3 | H2 | H1 |
P5 | D8 | D7 | D6 | D5 | P4 | D4 | D3 | D2 | P3 | D1 | P2 | P1 |
1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 |
计算校验位值:
根据1~12对应的二进制数:
1. | 0 | 0 | 0 | 1 |
2. | 0 | 0 | 1 | 0 |
3. | 0 | 0 | 1 | 1 |
4. | 0 | 1 | 0 | 0 |
5. | 0 | 1 | 0 | 1 |
6. | 0 | 1 | 1 | 0 |
7. | 0 | 1 | 1 | 1 |
8. | 1 | 0 | 0 | 0 |
9. | 1 | 0 | 0 | 1 |
10. | 1 | 0 | 1 | 0 |
11. | 1 | 0 | 1 | 1 |
12. | 1 | 1 | 0 | 0 |
计算:
P1(0001)=H1+H3+H5+H7+H9+H11= 1
//对应二进制最后一位为1,H1就是校验位P1本身不用计算
P2(0010)=H2+H3+H6+H7+H10+H11=0
P3(0100)=H4+H5+H6+H7+H12 =1
P4(1000)=H8+H9+H10+H11+H12 =0
P5(前12位或)=H1+H2+……+H12=0
海明码如下:
H13 | H12 | H11 | H10 | H9 | H8 | H7 | H6 | H5 | H4 | H3 | H2 | H1 |
0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 |