> hamming | (7,4) | ecc <
// 漢明碼 – 用於可靠資料傳輸的錯誤更正碼
錯誤更正
自動偵測並修正資料中的單一位元錯誤。
雙位元錯誤偵測
可以偵測(但無法更正)每個區塊中的雙位元錯誤。
額外負擔極低
每 4 個資料位元只需 3 個奇偶位元(效率 75%)。
>> 技術說明
漢明碼的運作原理:
Hamming(7,4) 代碼在每 4 個資料位元後加入 3 個奇偶位元,形成 7 位元區塊。奇偶位元放置在 2 的冪次位置(1、2、4)。當發生錯誤時,聯合綜合症(奇偶檢查結果)會直接指出出錯位元的位置。
Hamming(7,4) 結構:
資料:1011(4 位元) 位置:P1 P2 D1 P3 D2 D3 D4 Hamming:1 0 1 1 0 1 1 P1 = D1 ⊕ D2 ⊕ D4 = 1 ⊕ 0 ⊕ 1 = 0 P2 = D1 ⊕ D3 ⊕ D4 = 1 ⊕ 1 ⊕ 1 = 1 P3 = D2 ⊕ D3 ⊕ D4 = 0 ⊕ 1 ⊕ 1 = 0
為什麼選擇漢明碼:
- >記憶體錯誤更正
- >衛星通訊
- >資料儲存系統
- >網路傳輸
- >RAID 陣列
>> 常見問題
什麼是漢明碼?
漢明碼是 Richard Hamming 在 1950 年提出的一種錯誤更正碼。透過在資料中加入奇偶位元,系統可以自動偵測並修正單一位元錯誤。
(7,4) 代表什麼意思?
Hamming(7,4) 代表總共 7 位元,其中 4 位元是資料位,3 位元是奇偶位。它可以修正 7 位元區塊中任何一個單一位元錯誤。其他變體包括 (15,11)、(31,26) 等。
錯誤更正是如何運作的?
接收資料時會重新計算奇偶位元。如果結果不一致,綜合症(差值)會直接指出哪一個位元出錯。只要將該位元翻轉即可完成修正。
漢明碼與其他 ECC 編碼有何不同?
對於單一位元錯誤,漢明碼簡單又高效;像 Reed–Solomon 這類更複雜的編碼可以修正多位元錯誤,但需要更高的額外負擔。漢明碼非常適合低雜訊通道。
// 速查表
| Pos | bit | covered by |
|---|---|---|
| 1 | p1 | p1 |
| 2 | p2 | p2 |
| 3 | d1 | p1 p2 |
| 4 | p3 | p3 |
| 5 | d2 | p1 p3 |
| 6 | d3 | p2 p3 |
| 7 | d4 | p1 p2 p3 |
// 計算範例
Data 1011 -> positions 3,5,6,7 = 1,0,1,1 p1 = d3^d5^d7 = 1^0^1 = 0 p2 = d3^d6^d7 = 1^1^1 = 1 p3 = d5^d6^d7 = 0^1^1 = 0 Codeword (pos 1..7) 0110011 Received 0110111 (bit 5 flipped) Syndrome s3 s2 s1 = 1 0 1 = 5 -> flip bit 5 -> 0110011 corrected
>> 更多問題
問:漢明碼中的 (7,4) 是什麼意思?
答:4 位元資料加 3 位元校驗位,組成 7 位元碼字。校驗位放在 2 的冪次位置(1、2、4)。最小距離為 3:可糾正 1 位元錯誤,能偵測 2 位元錯誤但無法糾正。
問:伴隨式如何指出錯誤位置?
答:每個校驗位檢查位置編號中對應位元為 1 的那些位置。三個結果按二進位讀出,就是出錯位元的位置(0 表示無錯)。範例中 101 指向第 5 位。
問:什麼是擴展漢明碼(SECDED)?
答:增加一個總校驗位,把 (7,4) 變成 (8,4),可糾 1 位元錯、檢 2 位元錯。ECC 記憶體採用同樣原理,通常是 (72,64):64 位元資料配 8 位元校驗。