海明碼的編碼和校驗方法


 

  海明碼(也叫漢明碼)具有一位糾錯能力。本文以1010110這個二進制數為例解釋海明碼的編碼和校驗方法。

  編碼

  確定校驗碼的位數x

  設數據有n位,校驗碼有x位。則校驗碼一共有2x種取值方式。其中需要一種取值方式表示數據正確,剩下2x-1種取值方式表示有一位數據出錯。因為編碼后的二進制串有n+x位,因此x應該滿足

2x-1 ≥ n+x   

  使不等式成立的x的最小值就是校驗碼的位數。在本例中,n=7,解得x=4。

  確定校驗碼的位置

  校驗碼在二進制串中的位置為2的整數冪。剩下的位置為數據。如圖所示。

位置 1 2 3 4 5 6 7 8 9 10 11
內容 x1 x2 1 x3 0 1 0 x4 1 1 0

 

  求出校驗位的值

  以求x2的值為例。為了直觀,將表格中的位置用二進制表示。

位置 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011
內容 x1 x2 1 x3 0 1 0 x4 1 1 0

  為了求出x2,要使所有位置的第二位是1的數據(即形如**1*的位置的數據)的異或值為0。即x2^1^1^0^1^0 = 0。因此x2 = 1。

  同理可得x1 = 0, x3 = 1, x4 = 0。

位置 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011
內容 0 1 1 1 0 1 0 0 1 1 0

 

  因此1010110的海明碼為01110100110。

  校驗

  假設位置為1011的數據由0變成了1,校驗過程為:

  將所有位置形如***1, **1*, *1**, 1***的數據分別異或。

  ***1: 0^1^0^0^1^1 = 1

  **1*: 1^1^1^0^1^1 = 1

  *1**: 1^0^1^0 = 0 

  1***: 0^1^1^1 = 1

  以上四組中,如果一組異或值為1,說明該組中有數據出錯了。***1 **1* 1***的異或都為1,說明出錯數據的位置為1011。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM