簡單理解海明校驗碼

二進制數(shù)據(jù)經(jīng)過傳送、存取等環(huán)節(jié),會發(fā)生誤碼(1變成0或0變成1),這就有如何發(fā)現(xiàn)及糾正誤碼的問題。所有解決此類問題的方法就是在原始數(shù)據(jù)(數(shù)碼位)基礎上增加幾位校驗位。我們常使用的檢驗碼有三種. 分別是奇偶校驗碼、海明校驗碼和循環(huán)冗余校驗碼(CRC)。

海明校驗碼是由RichardHamming于1950年提出、目前還被廣泛采用的一種很有效的校驗方法。它的實現(xiàn)原理,是在k個數(shù)據(jù)位之外加上r個校驗位,從而形成一個k+r位的新的碼字,使新的碼字的碼距比較均勻地拉大。把數(shù)據(jù)的每一個二進制位分配在幾個不同的偶校驗位的組合中,當某一位出錯后,就會引起相關的幾個校驗位的值發(fā)生變化,這不但可以發(fā)現(xiàn)出錯,還能指出是哪一位出錯,為進一步自動糾錯提供了依據(jù)。但是因為這種海明校驗的方法只能檢測和糾正一位出錯的情況。所以如果有多個錯誤,就不能查出了。

什么是碼距?
兩個碼組對應位上數(shù)字的不同位的個數(shù)稱為碼組的距離,簡稱碼距,又稱海明(Hamming)距離。例如00110和00100碼距為1,12345和13344碼距為2,Caus和Daun碼距為2。

海明校驗碼公式(假設為k個數(shù)據(jù)位設置r個校驗位)

2^r-1 ≥ k + r 

公式怎么得出來的呢?
假設有r個校驗位,一個位子有0或1兩種情況,r個位子就有2r種排列情況,能表示2r種狀態(tài)。其中一個狀態(tài)用來表示正確(沒有錯誤發(fā)生)的這種情況。其余的2r-1種狀態(tài)來表示錯誤發(fā)生在哪一位??偣灿衚+r位,所以2r-1一定要>=總位子k+r。
按照該不等可以得出k與r的對應關系

k值 r值
1 2
2~4 3
5~11 4
12~26 5
27~57 6
58~120 7
... ...

注意:海明校驗碼是放在2的冪次位上的,即“1,2,4,8,16,32······”

實戰(zhàn)求1011的海明碼
第一步:求r的值(即校驗位數(shù))
直接根據(jù)公式代入得:
2^r-1 ≥ 4 + r
2^r-r ≥ 5
得到r最小為3
所以海明碼的位數(shù)是4+3=7位
第二步:校驗位和信息位對號入座
注意: 信息位的位置分配是從高位到低位依次存放
注意: 海明校驗碼是放在2的冪次位上的

位數(shù)|1|2|3|4|5|6|7
:-:|:-:|:-:|:-:|:-:|:-:|:-:
信息位|||1||1|0|1
校驗位|r1|r2||r3|||
第三步:確定校驗位的值
校驗原則:被校驗的海明位的下標等于所有參與校驗該為的校驗位的下標之和

海明碼 海明碼下標 校驗位組 信息位
1 1 r1
2 2 r2
3 3=2+1 r1,r2 1
4 4 r3
5 5=4+1 r3,r1 1
6 6=4+2 r3,r2 0
7 7=4+3 r3,r2,r1 1

然后將校驗碼校驗的信息位的位置記錄下來:

  • r1: 3, 5, 7
  • r2: 3, 6, 7
  • r3: 5, 6, 7

然后做對應信息位的異或運算(異或的運算法則為:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同為0,異為1))

  • r1: 1 xor 1 xor 1 = 1
  • r2: 1 xor 0 xor 1 = 0
  • r3: 1 xor 0 xor 1 = 0

代入表格得到

位數(shù) 1 2 3 4 5 6 7
信息位 1 1 0 1
校驗位 1 0 0

注意:按照從低位到高位的排列順序得到海明碼:1010101

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容