同位元
偶同位:傳數個bit時,1的個數要為偶數
奇同位:傳數個bit時,1的個數要為奇數
1. 特色
- 前面提到的ASCII和EPROM都有使用到這個技術
- 製作簡單
- 如果有發生偶數個位元同時出錯那就無法偵錯
2. 以7bit資料+1bit檢查碼為例
CRC循環冗餘檢查碼
1. 特色
- 數據通信領域中最常用的一種差錯校驗碼,以多項式做XOR⊕計算為基礎
- 多項式是代數學中的一種概念,主要用來表示未知數的變數和係數的常數,ex: x⁵+x+1
- 過程會是由送方將資料經過處理(XOR)後送給收方,送方會在進行校正(XOR)結果為0就是正確,1代表有error code
2. 算法
-
送方:
主要有4個重要角色,M(X)、G(X)、R(X)、T(X),可以把他們想成被除數、除數、餘數、要送出的資料
而這裡的除都是用XOR(相同為0不同為1)來進行相減
- 步驟
- 將G(X)多項式轉成位元串,ex: x⁵+x+1 -> 100011
- M(X)後面加上n個0,n就會是G(X)多項式最高指數,ex: G(X)為x⁵+x+1,那M(X)後面加上5個0
- M(X)後面加上n個0 除 G(X)位元串會得到R(X)
- M(X)後面加上n個0 ⊕ R(X)得到T(X),也就是要送出的資料
-
收方: 拿到T(X)後要進行驗算
- 步驟
- T(X) 除 G(X)位元串,餘數為0就是正確,1代表有error code
漢明碼
1. 特色
2. 編碼送出步驟
- 先將資料+漢明碼合併,作法就是先將資料位元列出來,並在資料長度內2ⁿ的位置空出空位給漢明碼
EX: 一個二進位值為10101111的8 bits位元組,漢明碼位置如下
- 計算漢明碼位置要放的字元,橫軸將漢明碼的bit欄位由大到小排列,然後直欄將bit數為1的欄位對應的位置寫出,並將欄位數字需要哪幾個漢明碼組成出來的字元標上1,以剛剛例子如下圖
- 將剛剛中間紅色字的字元進行偶同位的計算,並將結果放入對應的漢明碼位置
- 填完後的結果即為漢明碼編碼後的送出資料
3. 收方驗證步驟
-
收到資料後先算總共有幾個位元,ex: 一個漢明碼編碼後的收到的值為1101110101
-
橫軸資料位元長度內2ⁿ的位置由大到小排列,然後直欄將bit數為1的欄位對應的位置寫出,並將欄位數字需要哪幾個橫軸組成出來的位置標上1,並一樣用偶同位算出最下方的值
-
如果結果為0表示資料正確,若非為0,將2進制轉回10進制就可以知道是哪個bit出錯
分類會依照第一篇介紹的分類架構來進行
由於是將學習過程記錄下來,如果有任何錯誤歡迎糾正
以下參考連結在學習過程中覺得非常有幫助:
-漢明碼
-WIKI
-台大線上課程