CRC循環冗餘校驗碼總結


一、CRC簡介

先在此說明下什麼是CRC:循環冗餘碼校驗 英文名稱爲Cyclical Redundancy Check,簡稱CRC,它是利用除法及餘數的原理來作錯誤偵測(Error Detecting)的。實際應用時,發送裝置計算出CRC值並隨數據一同發送給接收裝置,接收裝置對收到的數據重新計算CRC並與收到的CRC相比較,若兩個CRC值不同,則說明數據通訊出現錯誤
那麼其實CRC有比較多種,比如CRC16、CRC32 ,爲什麼叫16、32呢。在這裏並非與位有和關係。而是由所確定的多項式最高次冪確定的。如下所示。理論上講冪次越高校驗效果越好。
       CRC(12位) =X12+X11+X3+X2+X+1
  CRC(16位) = X16+X15+X2+1
  CRC(CCITT) = X16+X12 +X5+1
  CRC(32位) = X32+X26+X23+X16+X12+X11+X10+ X8+X7+X5+X4+X2+X+1
二、循環冗餘校驗碼(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)得到的餘數就是校驗碼。


原理思維導圖總結:



三、通信與網絡中常用的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碼的檢錯能力還是很強的。這裏,突發錯誤是指幾乎是連續發生的一串錯,突發長度就是指從出錯的第一位到出錯的最後一位的長度(但是,中間並不一定每一位都錯)。


【例1】某循環冗餘碼(CRC)的生成多項式 G(x)=x3+x2+1,用此生成多項式產生的冗餘位,加在信息位後形成 CRC 碼。若發送信息位 1111 和 1100 則它的 CRC 碼分別爲_A_和_B_。由於某種原因,使接收端收到了按某種規律可判斷爲出錯的 CRC 碼,例如碼字_C_、_D_、和_E_。(1998年試題11)
供選擇的答案:
        A:① lllll00 ② 1111101 ③ 1111110 ④ 1111111
        B:① 1100100 ② 1100101 ③ 1100110 ④ 1100111
        C~E:① 0000000 ② 0001100 ③ 0010111 ⑤ 1000110 ⑥ 1001111 ⑦ 1010001 ⑧ 1011000
解:
        A:G(x)=1101,C(x)=1111 C(x)*23÷G(x)=1111000÷1101=1011餘111
        得到的CRC碼爲1111111
        B:G(x)=1101,C(x)=1100 C(x)*23÷G(x)=1100000÷1101=1001餘101
        得到的CRC碼爲1100101
        C~E:
        分別用G(x)=1101對①~⑧ 作模2除: ① 0000000÷1101 餘000 ② 1111101÷1101 餘001
        ③ 0010111÷1101 餘000 ④ 0011010÷1101 餘000 ⑤ 1000110÷1101 餘000
        ⑥ 1001111÷1101 餘100 ⑦ 1010001÷1101 餘000 ⑧ 1011000÷1101 餘100
        所以_C_、_D_和_E_的答案是②、⑥、⑧


【例2】計算機中常用的一種檢錯碼是CRC,即 _A_ 碼。在進行編碼過程中要使用 _B_ 運算。假設使用的生成多項式是 G(X)=X4+X3+X+1, 原始報文爲11001010101,則編碼後的報文爲 _C_ 。CRC碼 _D_ 的說法是正確的。
在無線電通信中常採用它規定碼字長爲7位.並且其中總有且僅有3個“1”。這種碼的編碼效率爲_E_。
供選擇的答案:
        A:① 水平垂直奇偶校驗 ② 循環求和 ③ 循環冗餘 ④正比率
        B:① 模2除法 ②定點二進制除法 ③二-十進制除法 ④循環移位法
        C:① 1100101010111 ② 110010101010011 ③ 110010101011100 ④ 110010101010101
        D:① 可糾正一位差錯 ②可檢測所有偶數位錯
        ③ 可檢測所有小於校驗位長度的突發錯 ④可檢測所有小於、等於校驗位長度的突發錯
        E:① 3/7 ② 4/7 ③ log23/log27 ④ (log235)/7
解:從前面有關CRC的論述中可得出: A:③ 循環冗餘 B:① 模2除法
        C:G(x)=11011,C(x)=11001010101,C(x)*24÷G(x)=110010101010000÷11011 餘0011
        得到的CRC碼爲② 110010101010011
        D:從前面有關通信與網絡中常用的CRC的論述中可得出:④ 可檢測所有小於、等於校驗位長度的突發錯
        E:定比碼又叫定重碼,是奇偶校驗的推廣。在定比碼中,奇數或偶數的性質保持不變,然而附加一種限制,每個字中1的總數是固定的。隨用途之不同,定比碼要求的附加校驗位可能多於一個,但較之單一的奇偶校驗將增加更多的檢錯能力。
    所謂7中取3定比碼,就是整個碼字長度爲7位,其中1的位數固定爲3。所有128個7位代碼(0000000~1111111)中只有1的位數固定爲3的纔是其合法碼字。可以用求組合的公式求出其合法碼字數爲:C73=7!/(3!*(7-3)!)=7*6*5/(1*2*3)=35
        編碼效率=合法碼字所需位數/碼字總位數=(log235)/7
而對於CRC的實現有兩種方式,分別爲多項式和查表法。


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