海明碼,小名漢明碼(hamming code),以發明者理查德·衛斯里·漢明的名字命名。海明碼具有檢錯和糾錯雙功能,它基於奇偶校驗原理,只能檢查出某一位錯碼的位置。當有多位錯碼時,它就不適用了。
在了解漢明碼之前,先熟悉下異或運算和奇偶校驗。
異或運算
異或運算,相異為1,相同為0。它也叫模2和、模2加法,本質上是不帶進製的加法。常用的公式是:(ab
)a(a^b)^a
(ab)
a=b,即兩個數異或結果在與其中乙個數異或得到的是另乙個數。
常用的應用:多用在一些加密演算法中,將要加密的資料和一些已知數進行異或運算,得到加密後的資料。
奇偶校驗 :
1010110為例進行海明碼編碼。
第一步先確定需要多少位校驗碼。
設資料有n位,校驗碼有x位。則校驗碼一共有2
x2^x
2x種取值方式。其中需要一種取值方式表示資料正確,剩下2
x2^x
2x−1種取值方式表示有一位資料出錯。因為編碼後的二進位制串有n+x位,因此x應該滿足:2
x2^x
2x−1 ≥ n
nn + xxx
使不等式成立的x的最小值就是校驗碼的位數。在本例中,n=7,解得x=4。
資訊碼和校驗碼的對應關係如下表:
由於奇偶校驗原理一樣,偶校驗的計算更為簡單,實際中多用偶校驗,本例中也以偶校驗進行計算。
如圖中:
每一行都是從對應的校驗位開始校驗,即從第2
n2^n
2n/2
22位開始校驗,校驗2
n2^n
2n/2
22個,然後跳過2
n2^n
2n/2
22個。
下面計算本例子,將**中的位置用二進位制表示:
x1的計算:
x 1x1
x1是第乙個校驗碼,位置對應欄所有最後一位為1(***1格式)的相異或為0,即
則x 1x1
x1=0;x2x2
x2計算:
x 2x2
x2是第二個校驗碼,位置對應欄所有倒數第二位為1(xx1x格式)的相異或為0,即
則x 2x2
x2=1;x3x3
x3計算:
x 3x3
x3是第三個校驗碼,位置對應欄所有倒數第三位為1(x1xx格式)的相異或為0,即
則x 3x3
x3=1;x4x4
x4計算:
x 4x4
x4是第四個校驗碼,位置對應欄所有倒數第四位為1(1***格式)的相異或為0,即
則x 4x4
x4=0;所以最終的海明碼是01110100110。
**:
海明碼的編碼和校驗方法
海明碼 也叫漢明碼 具有一位糾錯能力。本文以1010110這個二進位制數為例解釋海明碼的編碼和校驗方法。編碼確定校驗碼的位數x 設資料有n位,校驗碼有x位。則校驗碼一共有2x種取值方式。其中需要一種取值方式表示資料正確,剩下2x 1種取值方式表示有一位資料出錯。因為編碼後的二進位制串有n x位,因此...
海明碼的編碼和校驗方法
海明碼 也叫漢明碼 具有一位糾錯能力。本文以1010110這個二進位制數為例解釋海明碼的編碼和校驗方法。編碼確定校驗碼的位數x 設資料有n位,校驗碼有x位。則校驗碼一共有2x種取值方式。其中需要一種取值方式表示資料正確,剩下2x 1種取值方式表示有一位資料出錯。因為編碼後的二進位制串有n x位,因此...
海明碼校驗原理
海明校驗的基本思想 將有效資訊按某種規律分成若干組,每組安排乙個校驗位,做奇偶測試,就能提供多位檢錯資訊,以指出最大可能是哪位出錯,從而將其糾正。實質上,海明校驗是一種多重校驗。海明校驗的特點 它不僅具有檢測錯誤的能力,同時還具有給出錯誤所在準確位置的能力。一 校驗位的位數 校驗位的位數與有效資訊的...