Hamming Code

Error-correction code (ECC) 是用來在不可靠或有雜訊的通訊頻道上控制資料錯誤的機制,Hamming code 是其中一種經典的 ECC。

基本概念

Hamming code 的核心思想是在資料中加入 parity bit——每個 parity bit 是某一組 data bits 的奇偶校驗值,讓接收端能驗證資料的正確性。

Parity bit 的數量 需滿足:

其中 是 data bit 的數量。例如 時,(因為 )。

Parity bit 必須放在 2 的次方的位置:位置 1()、位置 2()、位置 4()……以此類推。以 4 個 data bit 的情形,bit string 的排列為 D7, D6, D5, P4, D3, P2, P1。

Parity Bit 計算

Parity bit 負責覆蓋所有 bit location 中第 個 bit 為 1 的位置。以 4-bit data 的情形:

  • (位置 1,二進位 001)覆蓋位置 1, 3, 5, 7(, D3, D5, D7)
  • (位置 2,二進位 010)覆蓋位置 2, 3, 6, 7(, D3, D6, D7)
  • (位置 4,二進位 100)覆蓋位置 4, 5, 6, 7(, D5, D6, D7)

以 data 1101(D7=1, D6=1, D5=0, D3=1)為例,使用 even parity 計算:

Bit DesignationD7D6D5P4D3P2P1
Bit Location7654321
Binary Location111110101100011010001
Data Bits1101
Parity Bits010

覆蓋 D7, D5, D3,其中 1 的個數為 2(偶數),所以 覆蓋 D7, D6, D3,1 的個數為 3(奇數), 覆蓋 D7, D6, D5,1 的個數為 2,。因此完整傳輸的 bit string 為 1100110

錯誤偵測與修正

接收端重新計算每個 parity group 的 parity。若 校驗失敗,將對應的位元標為 1,最後把這些位元組合成二進位數字,即為發生錯誤的 bit location,將該位置翻轉便完成修正。

以接收到 1100010(bit 3 被翻轉,正確應是 1100110)為例:

  • group(, D3, D5, D7):1 的個數為 1,奇數,校驗失敗
  • group(, D3, D6, D7):1 的個數為 3,奇數,校驗失敗
  • group(, D5, D6, D7):1 的個數為 2,偶數,校驗正確

失敗而 正確,錯誤位置為二進位 011,即位置 3(D3)。翻轉 D3 即可還原正確資料。

even 或 odd parity 的選擇不影響正確性,但 encoding 和 decoding 必須使用相同的選擇

Hamming Code 種類

Parity bitsTotal bitsData bitsNameRate
231Hamming(3,1)1/3 ≈ 0.333
374Hamming(7,4)4/7 ≈ 0.571
41511Hamming(15,11)11/15 ≈ 0.733
53126Hamming(31,26)26/31 ≈ 0.839
66357Hamming(63,57)57/63 ≈ 0.905
7127120Hamming(127,120)120/127 ≈ 0.945
8255247Hamming(255,247)247/255 ≈ 0.969
9511502Hamming(511,502)502/511 ≈ 0.982

parity bit 數量越多,data bit 佔總 bit 的比例(code rate)越高,overhead 也越低。

Hamming Code 能力

Hamming code 能做兩件事:

  1. 偵測到一個 bit flip 並且修正
  2. 偵測到兩個 bit flip 但無法修正

但其同時只能做上述兩件事中的一件事,下面的 SECDED 透過再加入一個 parity bit 解決這個問題

SECDED

[7,4] 的基礎上再加入一個 overall parity bit 後成為 [8,4] extended Hamming code,即 SECDED(Single Error Correction, Double Error Detection)。SECDED 能夠同時:

  • detect 且 correct 單一 bit 錯誤
  • detect(但無法 correct)雙 bit 錯誤

這個 overall parity bit 計算整串 data 的 1 的數量奇偶性