例如传送过来的数据是
:1010
(k表示校验码的位数)
(n表示例如1010表示n=4)
第一步--->通过公式找到k值;
--->2^k>=n+k+1;
--->k=3;
第二步 给1010每一个位标上位置;
---> 1 0 1 0
--->D4 D3 D2 D1
第三步 找到校验码插入的位置;
(已知k=3,有三位校验码)
--->p1=(2^i-1)=1;
--->p2=(2^i-1)=2;
--->p3=(2^i-1)=4;
第四步:将校验码插入编码的位置排列;
--->H7 H6 H5 H4 H3 H2 H1
--->D4 D3 D2 p3 D1 p2 p1
---> 1 0 1 0
第五步:将每位数据对应的位置记下来,通过
十进制转成二进制();
---> 位 十进制 二进制
--->D1 H3: 3 0 1 1
--->D2 H5: 5 1 0 1
--->D3 H6: 6 1 1 0
--->D4 H7: 7 1 1 1
第六步:进行异或操作(这里用@代替异或操作);
(异或口诀:同为0,异为1)
(这里要注意如果上面的二进制位,某一位为0,则不能加入下面异或操作,
比如二进制位看,从上往下看,,竖列,则D3无法加入到p1里面异或如下)
--->p1=D1@D2@D4=0@1@1=0;
--->p2=D1@D3@D4=0@0@1=1; --->表示错误->2;
--->p3=D2@D3@D4=1@0@1=0;
第七步:将刚才p1p2p3得到得数字放到1010中去,得到
--->D4 D3 D2 p3 D1 p2 p1
--->1 0 1 0 0 1 0
接收到得数据:1010010;
第八步:纠错进行偶检验;
--->s1=p1@D1@D2@D4=0@0@1@1=0;
--->s2=p2@D1@D3@D4=1@0@0@1=0;
--->s3=p3@D2@D3@D4=0@1@0@1=0;
--->都为0则表示无错误;
//
如果出错得话例如p2=0等话;
--->s1=p1@D1@D2@D4=0@0@1@1=0;
--->s2=p2@D1@D3@D4=0@0@0@1=1; --->(010)换成十进制表示第2位出错
--->s3=p3@D2@D3@D4=0@1@0@1=0;
--->(010)第二位出错,按位取反;
这就是海明校验码;