海明碼的編碼和校驗方法

2021-09-29 20:29:09 字數 1336 閱讀 2944

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

編碼確定校驗碼的位數x

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

2x-1 ≥ n+x   

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

確定校驗碼的位置

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

2345

6789

1011

內容x1x21

x3010

x4110

求出校驗位的值

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

位置0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

內容x1

x21x3

010x4

110

為了求出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

1110

1001

10因此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。

海明碼的編碼和校驗方法

海明碼 也叫漢明碼 具有一位糾錯能力。本文以1010110這個二進位制數為例解釋海明碼的編碼和校驗方法。編碼確定校驗碼的位數x 設資料有n位,校驗碼有x位。則校驗碼一共有2x種取值方式。其中需要一種取值方式表示資料正確,剩下2x 1種取值方式表示有一位資料出錯。因為編碼後的二進位制串有n x位,因此...

海明碼之編碼原理和校驗方法

海明碼,小名漢明碼 hamming code 以發明者理查德 衛斯里 漢明的名字命名。海明碼具有檢錯和糾錯雙功能,它基於奇偶校驗原理,只能檢查出某一位錯碼的位置。當有多位錯碼時,它就不適用了。在了解漢明碼之前,先熟悉下異或運算和奇偶校驗。異或運算 異或運算,相異為1,相同為0。它也叫模2和 模2加法...

貸款卡編碼的校驗方法

貸款卡編碼一共有16位,最後兩位是校驗位 整個貸款卡編碼的規則如下 前三位 分別為數字或者大寫英文本母 第四位到第十四位 分別為數字 後兩位的校驗碼為 前十四位乘以權重相加後除以97後的餘數再加1後得到的數字,如果此數字為個位數,前面還需要補乙個零 前十四位編碼對應的權重為1,3,5,7,11,2,...