CRC即循環榮譽校驗碼(Cyclic Redundancy Check):是數據通訊領域中最常用的一種差錯校驗碼,其特徵是信息字段和校驗字段的長度可以任意選定。
CRC的基本原理:
在K位信息碼後拼接R位的校驗碼,整個編碼長度爲N位,因此,這種編碼也叫(N,K)碼。對於一個給定的(N,K)碼,可以證明存在一個最高次冪爲N-K=R的多項式
G(X)。根據G(X)可以生成K位信息的校驗碼,而G(X)叫做這個CRC碼的生成多項式。校驗碼的具體生成過程爲:假設要發送的信息用多項式C(X)表示,將C(X)左移R位(可表示
成C(X)*2R),這樣C(X)的右邊就會空出R位,這就是校驗碼的位置。用C(X)*2R除以生成多項式G(X)得到的餘數就是校驗碼
二、基本原理:
任意一個由二進制位串組成的代碼都可以和一個係數僅爲”0”和”1”取值的多項式一一對應。例如:代碼111010對應的多項式爲X^5+X^4+X^3+X,多項式X^4+X+1對應的代碼
爲10011。
若設碼字長度爲N,信息字段爲K位,校驗碼段爲R位(N=K+R),則對於CRC碼集中的任一碼字,存在且僅存在一個R次多項式g(x),使得V(x)=A(x)g(x)=x……x^Rm(x)+r(x);
其中m(x)爲K次原始的信息多項式,r(x)爲R-1次校驗多項式(即CRC校驗和),g(x)稱爲生成多項式:g(x)=g0+g1*1+g2*2+......g(R-1)*(R-1)+gR*R
發送方通過指定的g(x)產生CRC碼字,接收方通過g(x)來校驗收到的CRC碼字。三、生成方式
藉助於多項式除法,其餘數爲校驗字段。
例如:信息字段代碼爲:1011001;對應
m(x)=x^6+x^4+x^3+1假設生成多項式爲:g(x)=x^4+x^3+1;則對應g(x)的代碼爲11001;
X^4m(x)=x^10+x^8+x^7+x^4對應的代碼記爲10110010000;
採用多項式除法:得餘數爲1010(即校驗字段爲:1010)
發送方:發出的傳輸字段爲:10110011010信息字段校驗字段接收方:使用相同的生成碼進行校驗:接收到的字段/生成碼(二進制除法)
如果能夠除盡,則正確。下面是餘數(1010)的計算步驟:
出發沒有數學上的含義,而是採用計算機的模二除法,即,除數和被除數做異或運算。進行異或運算時除數和被除數最高位對齊,按位異或。10110010000
^1100101111010000
1111010000
^11001
0011110000
11110000
^11001
00111000
111000
^11001
001010
則四位CRC監督碼就位:1010。
四、算法介紹:
設編碼前的原始信息多項式爲P(x),P(x)的最高冪次加1等於K;生成多項式爲G(x),G(x)的最高冪次等於r;CRC的信息多項式爲T(x).
發送方編碼方式:將P(x)乘以xr(即對應的二進制碼序列左移r位),再乘以G(x),所得餘式即爲R(x)。用公式表示爲T(x)=xrP(x)+R(x)
接收方的解碼方式:將T(x)除以G(x),得到一個數,如果這個餘數爲0,則說明傳輸中無錯誤發生,否則說明傳輸有誤。舉例說明:設信息編碼爲1100,則生成多項式爲1011,即P(x)=X^3+X+1,計算CRC的過程爲
XrP(x)=X^3(X^3+X^2)=X^6+X^5G(x)=X^3+X+1
即R(x)=x.注意到G(x)最高冪次r=3,得出CRC爲010。