效驗碼
-
校驗碼:指能夠發現或能夠自動糾正錯誤的數據編碼,也稱檢錯糾錯編碼。
-
實現原理:通過加一冗余碼,來檢驗或糾錯編碼
-
碼字 : 由若干位代碼組成的一個字
-
碼距:將兩個碼字逐位進行對比,具有不同的位的個數稱為兩個碼字間的距離,一種編碼方案可能有若干個合法碼字,各合法碼字間的最小距離稱為“碼距。也稱海明距離。
計算碼距方法
計算0100和1111
-
直接觀察法:可以看出,有3個數位值不同,所以碼距為3.
-
異或計算法:0100⊕1111=1011 ,結果為1011,里面有幾個1就代表有多少個數位值不同,即碼距是多少,這里碼距是3。
-
若碼距=2,有檢錯能力;若碼距≥3,可能還會糾錯能力
奇偶校驗碼
校驗原理
- 在原編碼中加一個校驗位,則原編碼就變成了校驗碼,它的碼距為2,可以檢查出奇數位錯誤,但不能檢查出偶數位錯誤,增加的冗余位為奇偶校驗位,一般校驗位設置在原編碼的最左邊或最右邊。
- 奇校驗碼:整個校驗碼(信息位+校驗位)中1的個數位奇數
- 偶校驗碼:整個校驗碼(信息位+校驗位)中1的個數位偶數
奇偶校驗
- 偶校驗的硬件實現:各信息進行異或(模2加)運算,得到的結果即為偶校驗位
- 奇偶校驗碼的碼距d=2,僅能檢測岀奇數位錯誤,無糾錯能力
異或法制
奇數個一相異或 為 1
偶數個零相同或 為 1
總結
- 上述奇偶校驗碼不能發現偶數位錯誤,能發現奇數位錯誤,但是不能定位。
海明校驗碼
-
一種多重奇偶校驗碼。
-
實現原理:在有效信息位中加入幾個校驗位形成海明碼,並把海明碼的每一個二進制位分配到幾個奇偶校驗組中。當某一位出錯后,就會引起有關的幾個校驗位的值發生變化。
-
特點:可以發現錯誤,定位錯誤位置,自動糾正錯誤。 可以檢測雙比特錯誤,但只能糾正單比特錯誤。
海明校驗碼的分布規律
- 校驗位P放在海明位號為 2 ^(i-1) 的位置上
海明碼糾錯以及定位
實現原理
- 每個校驗組分別利用校驗位和參與形成該校驗位的信息位進行奇偶校驗檢查,即異或運算⨁,構成k個校驗方程。
S1=P1⨁D1⨁D2⨁D4
S2=P2⨁D1⨁D3⨁D4
S3=P3⨁D2⨁D3⨁D4
- 若S1S2S3=000,則說明無錯,否則說明出錯。這個數的值就是出錯的位置,如S1S2S3=001,表示第1位出錯,即H1出錯,直接將該位取反就可以達到糾錯的目的。
海明碼完善
總結
循環冗余校驗碼(CRC)
-
首先,發送端和接受端會有一個生成多項式G(x)約定,生成多項式G(x)的最高次冪為R。任意一個二進制數碼都可用一個系數為0或1的多項式與之對應。比如:二進制數碼 1101 對應的
G(x)=1*X3+1*X2+0*X1+1*X0= X3+X2+1
-
確定生成多項式即為除數
-
在發送端,將要傳送的K位二進制信息碼左移R位,將它與生成多項式G(x)所對應的的二進制數碼進行模2除法,產生余數,生成一個R位檢驗碼,並附在信息碼后,構成一個新的二進制碼(CRC)碼,共
K+R
位。
模2除算法
用於求 CRC
碼
1、被除數最高位 為 1,上 1 否則 上 0
2、兩者進行異或運算,一直得到校驗位(一定比被除數少 1 位)
求得: 101001
的 CRC 碼為 101001 001
拓展
模2運算:分為模2加、模2減、模2乘、模2除,不考慮進位和借位。
檢錯與糾錯
注意: 余數與出錯位的規律,並不是簡單的余數的二進制轉十進制,因為有三位對應二的三次方即為八除去正確的 000
,即為七個一循環。
糾錯概述
但是實際一般運用於檢錯
特點
理論上可以證明循環冗余校驗碼的檢錯能力有以下特點:
1)可檢測出所有奇數個錯誤;
2)可檢測出所有雙比特的錯誤;
3)可檢測出所有小於等於校驗位長度的連續錯誤;