漢明碼介紹(Hamming Code Intro)
什麼是奇偶同位位元檢查? 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