概念
此章節主要是在訊號傳送時,對訊號進行偵錯,並更正錯誤的訊號或要求傳送端重送。因此會利用錯誤偵測碼和錯誤更正碼。
主要有以下幾種
- 漢明距離(Hamming Distance)
- 同位位元檢查(Parity Bit Check)
- 循環冗餘碼(Cyclic Redundancy Code ,CRC)
- 漢明碼(Hamming Code)
漢明距離(Hamming Distance)
兩個碼中所具有不同位元值的數目,例如 0010 和 1110 的漢明距離就是 2,此一運算只需要用到 exclusive-or 運算就可以得到。實際偵錯和更正的方式如下
1、漢明距離:偵錯
假設我們要傳輸訊號只傳 0 跟 1,那我們無法得知傳來的訊號是否正確,但如果我們今天約定傳得訊號改成 000 和 111 ,如果出現 001 就代表這個訊號有問題,以上就是如何偵錯。
2、漢明距離:更正
接著我們要進行更正,去計算 001 跟 000 和 111 的漢明距離。
dh ( 001 , 000 ) = 1
dh ( 001 , 111 ) = 2
我們會將訊號更正為漢明距離較小的
將 001 更正為 000 。
這時候你會說,那萬一錯 2 碼的時候就無法更正,這時我們會說這組訊號的更正能力是 1 可以檢查出 1 碼的錯誤並更正。
3、碼率
我們可以進行偵錯並更正這很好,但我們也為此付出了代價。( 000 , 111 )這組code 只能表達 1 bit 的資訊量,但卻需要花費 3 bits 進行傳送。
傳遞的資訊量 / 傳送的資訊量 = 1bit / 3 bits = 1/3
我們會稱這組編碼的碼率是 1/3 。
4、漢明距離:偵錯能力
一組code的偵錯能力與漢明距離有關,公式如下
(漢明距離-1)/ 2
( 000 , 111)的漢明距離 = 3
(3-1)/ 2 = 1
同位位元檢查(Parity Bit Check)
1、概念
把要傳送的訊息加上 1 bit 同位位元,使資料中1的個數符合要求,分為 2 種偶同位檢查和奇同位檢查。偶同位檢查就是傳送的資料要有偶數個 1,奇同位檢查就是要有奇數個 1。
2、同位位元產生
假設我要傳送 7 bits 的資料M= 0001110 ,使用偶同位元檢查,因為M只有3個1,所以在M後面加1碼1,使得資料M'=00011101,讓資料最終1的數量變成偶數的。
3、缺點
若產生錯誤的位元數為偶數,則無法察覺,且不知道錯誤的資訊位置在哪。
循環冗餘碼(Cyclic Redundancy Code ,CRC)
假設要傳送的訊息M = 1101101 其生成函式為 x3+x2+1 取多項式的係數得到 N = 1101
1、步驟
(1)補 0
因為多項式最高項次是3次,所以在M後方補4個0 得到M'= 1101101000
若今天做高項次為 4 次則補 4 個 0
(2)長除法
接著將 M ' 除以 N 要注意的是因為是二進位的除法,所以是做 xor 運算,如圖

最後的餘數就是CRC碼 110 ,而我們要傳送的訊息則是把原本的訊息M後面加上CRC碼變成M'' = 1101101110 就是我們要的。
(3)檢查與解碼
將收到的資料M''視為多項式除以生成多項式,若能整除表示正確傳送,此時只要將資料後段的餘式去除就可以得到訊息。
2、常用來生成CRC的多項式

漢明碼(Hamming Code)
也是一種錯誤檢查碼,在資料中插入檢查碼來確認資料傳輸是否有誤,
1、漢明碼長度
公式:2^k ≥ n+k+1,N:資料長度,k: 漢明碼長度
舉個例子
假設傳送8 bits 的資料 11001010 我們可以得知 n = 8
2^k ≥ 8+k+1 ,可以得到 k=4
代表說加上漢明碼後傳送的資料會有 12 bits
2、編碼
先畫一個對照表,有12 bits 所以畫12格

接著將2的冪次(20、21、22、23)空下來填漢明碼,其餘的格子填上要傳送的資料

接由將漢明碼的欄位由大到小排列,然後將bit 數為1的轉為二進位填上去,最後用 xor 做計算。

把得到的漢明碼填到表格,注意要按照算是的欄位填入喔!!!
簡單來說要把 1 1 0 0 反過來變成 0 0 1 1 填入到剛剛的表格中。

這樣就編碼完成,得到 011000110101 完整的12碼
3、偵錯並更正
假接收到的資訊是 00111000100 總共 11 bits,我們一樣畫表格

幾著把 bit 為1欄位轉成二進位做 xor 運算

得到的結果為(1011)2 代表第11位有錯,我們就把第11位做not運算,也就是1變0,0變1就可以了,得到更正後的傳送資料 00111000101

參考資料:
漢明碼 https://yaojordan.medium.com/計概-hamming-code-漢明碼-78102d680c78