1. 程式人生 > >CRC迴圈冗餘校驗碼

CRC迴圈冗餘校驗碼

Ⅰ.CRC校驗

       CRC(Cyclic Redundancy Check):即迴圈冗餘檢驗碼,是資料通訊領域中最常用的一種差錯校驗碼,其特徵是資訊欄位和校驗欄位的長度可以任意選定。

Ⅱ.基本原理

       在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)*x的R次方,這樣C(x)的右邊就會空出R位,這就是校驗碼的位置。通過C(x)*X的R次方除以生成多項式G(x)得到的餘數就是校驗碼。

       (1)傳送端

           1.在傳送端先將資料分組,每組K位資料。假定要傳送的資料是M;

           2.在資料M後面新增供差錯檢測的N位冗餘碼,然後構成一幀傳送出去,一共傳送(K+N)位。

       (2)冗餘碼可以通過下面的方法得出:

           1.用二進位制模2運算進行2^n*M(相當於M左移n位)的運算。意思就是在M後面補n個0。現在M就變成了K+N位; 
           2.用M除以收發雙方事先商定的長度為n+1的除數P;
           3.得到的餘數R,這個R就是FCS(幀檢驗序列)。將這個FCS序列加到M上然後發出去。

       (3)接收端 

           1.在接收端把接收到的資料以幀為單位進行CRC校驗 ;

           2.把收到的每一個幀都除以同樣的除數P,然後檢查餘數R; 
           3.如果餘數R為0,如果在傳輸過程中沒有差錯;
           4.如果出現誤碼,那麼餘數R為零的概率是非常小的。

Ⅲ.總結

    假設M=101001,P=1101,n=3
    則(1)傳送端: 由M=(2^n*M)得M = 101001000
        

       再用M除以P 得到R= 001
       將餘數R加到M上,就得到了要傳送的幀: M=101001000+R=101001001

   (2)在接收端: 
       接收到的每一幀都要進行差錯檢驗,假設收到101001001,P=1101。 

        
   得餘數R=0,所以這個幀沒有出錯。