漢明碼介紹(Hamming Code Intro)

Gordon Fang
Nov 3, 2018

--

什麼是奇偶同位位元檢查? What are Odd Parity Check and Even Parity Check?

同位元檢查(Parity Check)用來驗證資料的正確性,其方法很簡單,分作兩種,說明如以下:

1.奇同位元檢查(Odd Parity Check):在原始資料中加上同位元檢查碼,使1為奇數個數,接收端會檢查每一個位元,確認1是否為奇數個數,若1的出現總次數為奇數則代表驗證無誤,大多一般電腦多採用這套驗證方法。

2.偶同位元檢查(Even Parity Check):在原始資料中加上同位元檢查碼,使1為偶數個數,接收端會檢查每一個位元,確認1是否為偶數個數,若1的出現總次數為偶數則代表驗證無誤。

什麼是漢明碼? What is Hamming code? How it works?

在通訊領域,漢明碼又稱為海明碼,於1950年,由美國數學家理查德·衛斯里·漢明(Richard Wesley Hamming)發明,相較於基偶同位元檢查,除了不能糾正錯誤,且也只能偵測到錯誤,而漢明碼主要功能是具有1位元錯誤偵測與更正功能,能找出錯誤位元的位置。

漢明碼使用的是將檢查碼(Check Code)附加在資料中,來進行檢查與驗算,步驟如以下,先取K個bits作為檢查碼,M這邊為資料的代稱,M<=2^n,K=n+1,假設資料是8個bits,那麼8<=2^3,K=3+1,檢查碼(K)為4碼,如上述漢明碼為資料和檢查碼的結合,8bits(原始資料)+4bits(檢查碼),所以漢明碼為12位元所組成。

P1到P12為位元位置,檢查碼C1,C2,C4,C8(2^n),依序將資料填進去,這邊資料以10010110為示範,需要注意的一點是,在檢查碼需要空出來,所以要資料跳過,接著我們將資料是1的位元挑出來,將其編碼作XOR運算,算式在上圖右側,得到檢查碼為0110,將結果填回去表格,再重複以上的步驟,我們在判斷一個編碼是否有錯,會檢查加入檢查碼後的資料,將位元是1的位置編碼作XOR運算,若其結果均為0,編碼驗證無誤

這邊我們嘗試修改P5位置的原始資料,原本為1改為0,再重新作XOR運算,運算結果於上圖右側,很顯然答案告訴我們編碼有錯,也將位置告訴我們,錯誤位元在P5(0101)

這邊補充一點,個人本身於在書上和網站上看到,有些教材是從P1編碼到P12,不管是從左到右編排(LSD->MSD, P1 ~ P12),或是從右到左編排(MSD<-MSD, P12 ~ P1),都並不影響驗證和校正。

參考 Reference

http://forum.slime.com.tw/thread202587.html

https://zh.wikipedia.org/zh-tw/%E6%B1%89%E6%98%8E%E7%A0%81

http://oilcut123.pixnet.net/blog/post/354497867-%5B%E6%95%99%E5%AD%B8%5D-crc(%E5%BE%AA%E7%92%B0%E5%86%97%E9%A4%98%E7%A2%BC)%E9%95%B7%E9%99%A4%E6%B3%95-%E6%95%99%E4%BD%A0%E5%A6%82%E4%BD%95%E7%AE%97crc%E9%95%B7

--

--

Gordon Fang
Gordon Fang

Written by Gordon Fang

Hi 我是 Gordon,目前是自然語言實驗室的研究生,曾經是金融業軟體工程師,我對大語言模型、設計模式、Linux、平面設計都有涉略,歡迎相互交流。

Responses (1)