海明碼的作用:不但能夠檢驗出錯,還能查出哪一位出錯了。
例如傳送過來的資料是
: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裡面異或如下)
--->[email protected]@[email protected]@1=0;
--->[email protected]@[email protected]@1=1; --->表示錯誤->2;
--->[email protected]@[email protected]@1=0;
第七步:将剛才p1p2p3得到得數字放到1010中去,得到
--->D4 D3 D2 p3 D1 p2 p1
--->1 0 1 0 0 1 0
接收到得資料:1010010;
第八步:糾錯進行偶檢驗;
--->[email protected]@[email protected][email protected]@[email protected]=0;
--->[email protected]@[email protected][email protected]@[email protected]=0;
--->[email protected]@[email protected][email protected]@[email protected]=0;
--->都為0則表示無錯誤;
//
如果出錯得話例如p2=0等話;
--->[email protected]@[email protected][email protected]@[email protected]=0;
--->[email protected]@[email protected][email protected]@[email protected]=1; --->(010)換成十進制表示第2位出錯
--->[email protected]@[email protected][email protected]@[email protected]=0;
--->(010)第二位出錯,按位取反;
這就是海明校驗碼;