ECC校驗 漢明碼(Hamming Code)

2021-10-16 12:56:35 字數 2401 閱讀 8279

本文主旨意在講清如何根據原理構造常用的漢明碼,鑑於本人在網路查閱資料過程翻閱大量低效/無效文章,特記錄如下內容。前篇主要表明如何簡單直接的構造漢明碼,後續在了解漢明碼具體校驗原理的情況下,將會補錄有關原理的內容。

error correcting code (ecc):糾錯碼。

漢明碼(hamming code),糾錯碼的一種,通用常用於各類memory中糾正/檢測single bit,檢測double bits錯誤。根據結果型別可分為:

需要特別注意的是,以上兩種型別的漢明碼只能針對1 bit,2 bit進行檢測或者糾正1 bit錯誤,如果資料位錯誤bit數不止兩個,最終可能無法檢測出錯誤。只不過乙個檢測資料中同時出現多bit資料錯誤發生的概率特別小,所以這種漢明碼檢測方式仍然是主流。

漢明碼構造可以分為兩塊:

漢明碼實際是由校驗碼與資料位穿插而成,校驗碼穿插形式如下圖所示(舉例32bit長度資料):

可以直接看出(暫時忽略第39bit),p1, p2, p4, …等校驗位依次代表0b1,0b10,0b100, …等特殊二進位制數換算得到的位置。而資料位則根據長度依次填入序號3, 5, 7, …等位置。

資料位d0~d31依次表明32-bit資料的每一位,校驗位p1, p2, p4, …等則由已填充的資料位計算獲取,直觀檢視如下:

根據這張表提供的規律,可以直接構造任意資料長度的漢明碼。其中:

p1 = d[0] ^ d[1] ^ d[3] ^ … ^ d[30]

p2 = d[0] ^ d[2] ^ d[3] ^ … ^ d[31]

p4 = d[1] ^ d[2] ^ d[3] ^ … ^ d[31]

p8 = d[4] ^ d[5] ^ d[6] ^ … ^ d[25]

p16 = d[11] ^ d[12] ^ d[13] ^ … ^ d[25]

p32 = d[26] ^ d[27] ^ d[28] ^ … ^ d[31]

不考慮pp7位的情況下,這種方式構造得到的漢明碼一般稱為7,4漢明碼(即:7 bit漢明碼,資料位佔4 bit,校驗位佔3 bit),只能糾正/檢查1 bit錯誤。如果需要檢測2 bit錯誤,可以增加1 bit校驗位pp7,該校驗位是前述所有資料位與計算所得校驗位異或的結果,這種構造方式得到的漢明碼一般稱為8,4漢明碼(即:8 bit漢明碼,資料位佔4 bit,校驗位佔4 bit)。同時可以從原理上看出漢明碼構造的規律——某種意義上的二分法1

。原始資料:10101,按上表拆分後可以有,

p1p21p4

010p8

p1 = 1 ^ 0 ^ 0 ^ 1 = 0

p2 = 1 ^ 1 ^ 0 = 0

p4 = 0 ^ 1 ^ 0 = 1

p8 = 1 = 1

所以構造得到的漢明碼為0b001101011當接收端獲取傳送端傳來的漢明碼後,利用檢驗位與構造時對應資料位再次異或得到的結果,檢測當前獲取資料是否出現bit錯誤,並根據情況進行糾正。且當獲取的新校驗值為全0,則資料未發生錯誤,或發生多bit錯誤。

假設接收到的漢明碼為0b001100011,此時接收方並不知道該資料是否正確,所以進行漢明碼的校驗操作,資料可分割為:

p1p2

d0p4

d1d2

d3p8d40

0110

0011

p1_check = p1 ^ 1 ^ 0 ^ 0 ^ 1 = 0

p2_check = p2 ^ 1 ^ 0 ^ 0 = 1

p4_check = p4 ^ 0 ^ 1 ^ 0 = 1

p8_check = p8 ^ 1 = 0

p8p4p2p1 =0b0110 = 6,所以是第6 bit資料位發生錯誤,如果需要糾正該bit,翻轉即可獲得正確資料:0b0011010111待補充可能有人會問,為什麼針對單bit錯誤的檢測總是要強調糾錯這個事,理論上來說發現錯誤並糾正這是很正常的流程。但是,在這裡需要考慮,不是所有場景都需要做糾錯這個操作。例如:在帶i$(instruction cache)的soc中,僅僅需要向core傳遞是否出現錯誤這個訊號,這個時候core會重新從main memory中獲取該資料並傳送,極端情況下可能會重啟操作。所以,是否糾正檢測的單bit錯誤,應該是由系統設計的場景決定。

以p16為分界線判斷出錯資料位在其左側還是右側,p8, p4, p2, p1同理。最後根據p16p8p4p2p1二進位製碼確定錯誤bit。 ↩︎

校驗碼 漢明碼 CRC碼

資料校驗碼 任意兩個碼字之間最少變化的二進位制位數,被稱為資料校驗碼的碼距 例如用四位二進位制數表示16種狀態,此時碼距為1,即兩個碼字之間最少僅有乙個二進位制不同,這種編碼沒有檢錯能力。檢糾錯能力實現原理 在編碼中,除去合法的碼字外,再加入一些非法的碼字,當某個合法的碼字出現錯誤時,就變成為非法碼...

漢明碼詳細講解

漢明碼,是r.hamming與1940年於貝爾實驗室提出的。1.奇偶校驗碼 奇偶校驗碼。假設傳輸資訊位為k n 1位,表示為a1,an 1,加上一位奇偶校驗位 冗餘位 a0,構成乙個n位的碼字a0 an 1,在接收端校驗時,可按照關係式 s a0 a1 a2 an 1來計算。若s 0,則無錯,若s ...

計網筆記 海明碼(漢明碼)

海明碼是可以發現雙位元錯誤,並可以糾正單位元錯誤的編碼方案。一般來講,檢錯編碼不一定具有糾錯能力,但是糾錯編碼具有檢錯能力 其工作流程可以分為以下四個步驟 1 確定校驗碼位數r 2 確定校驗碼和資料的位置 3 求出校驗碼的值 4 檢錯並糾錯。在以下的工作流程中,我們要傳送的資料d 101101.我們...