CRC循環冗餘校驗碼

環冗餘校驗碼 

    在串行傳送(磁盤、通訊)中,廣泛採用循環冗餘校驗碼(CRC)。CRC也是給信息碼加上幾位校驗碼,以增加整個編碼系統的碼距和查錯糾錯能力。CRC的理論很複雜,一般書上只介紹已有生成多項式後計算校驗碼的方法。檢錯能力與生成多項式有關,只能根據書上的結論死記。 

    循環冗餘校驗碼(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)得到的餘數就是校驗碼。

    1、多項式與二進制數碼 
    多項式和二進制數有直接對應關係:x的最高冪次對應二進制數的最高位,以下各位對應多項式的各冪次,有此冪次項對應1,無此冪次項對應0。可以看出:x的最高冪次爲R,轉換成對應的二進制數有R+1位。 

    2、生成多項式 
    是接受方和發送方的一個約定,也就是一個二進制數,在整個傳輸過程中,這個數始終保持不變。在發送方,利用生成多項式對信息多項式做模2除生成校驗碼。在接受方利用生成多項式對收到的編碼多項式做模2除檢測和確定錯誤位置。 

    3、應滿足以下條件:

    a、生成多項式的最高位和最低位必須爲1。 
    b、當被傳送信息(CRC碼)任何一位發生錯誤時,被生成多項式做模2除後應該使餘數不爲0。 
    c、不同位發生錯誤時,應該使餘數不同。 
    d、對餘數繼續做模2除,應使餘數循環。 

    將這些要求反映爲數學關係是比較複雜的。但可以從有關資料查到常用的對應於不同碼制的生成多項式如圖9所示:

                                          

    4、模2除

    模2除做法與算術除法類似,但每一位除(減)的結果不影響其它位,即不向上一位借位。所以實際上就是異或。然後再移位移位做下一位的模2減。步驟如下: 
   a、用除數對被除數最高几位做模2減,沒有借位。 
   b、除數右移一位,若餘數最高位爲1,商爲1,並對餘數做模2減。若餘數最高位爲0,商爲0,除數繼續右移一位。
   c、一直做到餘數的位數小於除數時,該餘數就是最終餘數。 

    5、CRC的和糾錯 

    在接收端收到了CRC碼後用生成多項式爲G(x)去做模2除,若得到餘數爲0,則碼字無誤。若如果有一位出錯,則餘數不爲0,而且不同位出錯,其餘數也不同。可以證明,餘數與出錯位的對應關係只與碼制及生成多項式有關,而與待測碼字(信息位)無關。圖10給出了G(x)=1011,C(x)=1010的出錯模式,改變C(x)(碼字),只會改變表中碼字內容,不改變餘數與出錯位的對應關係。

                                                                          

  如果循環碼有一位出錯,用G(x)作模2除將得到一個不爲0的餘數。如果對餘數補0繼續除下去,我們將發現一個有趣的結果;各次餘數將按圖10順序循環。例如第一位出錯,餘數將爲001,補0後再除,第二次餘數爲010,以後依次爲100,0ll…,反覆循環,這就是“循環碼”名稱的由來。這是一個有價值的特點。如果我們在求出餘數不爲0後,一邊對餘數補0繼續做模2除,同時讓被檢測的校驗碼字循環左移。圖10說明,當出現餘數(101)時,出錯位也移到A7位置。可通過異或門將它糾正後在下一次移位時送回A1。這樣我們就不必像海明校驗那樣用譯碼電路對每一位提供糾正條件。當位數增多時,循環碼校驗能有效地降低硬件代價,這是它得以廣泛應用的主要原因。 通信與網絡中常用的CRC 。在數據通信與網絡中,通常k相當大,由一千甚至數千數據位構成一幀,而後採用CRC碼產生r位的校驗位。它只能檢測出錯誤,而不能糾正錯誤。一般取r=16,標準的16位生成多項式有CRC-16=x16+x15+x2+1 和 CRC-CCITT=x16+x15+x2+1。 

    一般情況下,r位生成多項式產生的CRC碼可檢測出所有的雙錯、奇數位錯和突發長度小於等於r的突發錯以及(1-2-(r-1))的突發長度爲r+1的突發錯和(1-2-r)的突發長度大於r+1的突發錯。例如,對上述r=16的情況,就能檢測出所有突發長度小於等於16的突發錯以及99.997%的突發長度爲17的突發錯和99.998%的突發長度大於17的突發錯。  所以CRC碼的檢錯能力還是很強的。這裏,突發錯誤是指幾乎是連續發生的一串錯,突發長度就是指從出錯的第一位到出錯的最後一位的長度(但是,中間並不一定每一位都錯)。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章