CRC校驗原理

轉載地址:http://blog.sina.com.cn/s/blog_5d2412000100cp3y.html

1、循環校驗碼(CRC碼):是數據通信領域中最常用的一種差錯校驗碼,其特徵是信息字段和校驗字段的長度可以任意選定。

2、生成CRC碼的基本原理:任意一個由二進制位串組成的代碼都可以和一個係數僅爲‘0’和‘1’取值的多項式一一對應。例如:代碼1010111對應的多項式爲x6+x4+x2+x+1,而多項式爲x5+x3+x2+x+1對應的代碼101111。

3、CRC碼集選擇的原則若設碼字長度爲N,信息字段爲K位,校驗字段爲R位(N=K+R),則對於CRC碼集中的任一碼字,存在且僅存在一個R次多項式g(x),使得

V(x)=A(x)g(x)=xRm(x)+r(x);

其中:    m(x)爲K次信息多項式, r(x)爲R-1次校驗多項式,

         g(x)稱爲生成多項式:

g(x)=g0+g1x+ g2x2+...+g(R-1)x(R-1)+gRxR

發送方通過指定的g(x)產生CRC碼字,接收方則通過該g(x)來驗證收到的CRC碼字。

4、CRC校驗碼軟件生成方法:

    藉助於多項式除法,其餘數爲校驗字段。

例如:信息字段代碼爲: 1011001;對應m(x)=x6+x4+x3+1 

      假設生成多項式爲:g(x)=x4+x3+1;則對應g(x)的代碼爲: 11001

      x4m(x)=x10+x8+x7+x4 對應的代碼記爲:10110010000

採用多項式除法:  得餘數爲: 1010     (即校驗字段爲:1010)

發送方:發出的傳輸字段爲:  1 0 1 1 0 0 1 1 0 10

                          信息字段       校驗字段

接收方:使用相同的生成碼進行校驗:接收到的字段/生成碼(二進制除法)如果能夠除盡,則正確,

 

CRC(Cyclic Redundancy Check)循環冗餘校驗碼

  是常用的校驗碼,在早期的通信中運用廣泛,因爲早期的通信技術不夠可靠(不可靠性的來源是通信技術決定的,比如電磁波通信時受雷電等因素的影響),不可靠的通信就會帶來‘確認信息’的困惑,書上提到紅軍和藍軍通信聯合進攻山下的敵軍的例子,第一天紅軍發了條信息要藍軍第二天一起進攻,藍軍收到之後,發一條確認信息,但是藍軍擔心的是‘確認信息’如果也不可靠而沒有成功到達紅軍那裏,那自己不是很危險?於是紅軍再發一條‘對確認的確認信息’,但同樣的問題還是不能解決,紅軍仍然不敢貿然行動。
  對通信的可靠性檢查就需要‘校驗’,校驗是從數據本身進行檢查,它依靠某種數學上約定的形式進行檢查,校驗的結果是可靠或不可靠,如果可靠就對數據進行處理,如果不可靠,就丟棄重發或者進行修復。
  CRC碼是由兩部分組成,前部分是信息碼,就是需要校驗的信息,後部分是校驗碼,如果CRC碼共長n個bit,信息碼長k個bit,就稱爲(n,k)碼。它的編碼規則是:
  1、首先將原信息碼(kbit)左移r位(k+r=n)
  2、運用一個生成多項式g(x)(也可看成二進制數)用模2除上面的式子,得到的餘數就是校驗碼。
  非常簡單,要說明的:模2除就是在除的過程中用模2加,模2加實際上就是我們熟悉的異或運算,就是加法不考慮進位,公式是:
  0+0=1+1=0,1+0=0+1=1
  即‘異’則真,‘非異’則假。
  由此得到定理:a+b+b=a 也就是‘模2減’和‘模2加’真值表完全相同。
  有了加減法就可以用來定義模2除法,於是就可以用生成多項式g(x)生成CRC校驗碼。
  例如: g(x)=x4+x3+x2+1,(7,3)碼,信息碼110產生的CRC碼就是:
  對於g(x)=x4+x3+x2+1的解釋:(都是從右往左數)x4就是第五位是1,因爲沒有x1所以第2位就是0。
  11101 | 110,0000(設a=11101 ,b=1100000)
  取b的前5位11000跟a異或得到101
  101加上b沒有取到的00得到10100
  然後跟a異或得到01001
  也就是餘數1001

                  101
     11101 | 110,0000
             111 01
               1 0100
               1 1101
                 1001

  餘數是1001,所以CRC碼是110,1001


  標準的CRC碼是,CRC-CCITT和CRC-16,它們的生成多項式是:
  CRC-CCITT=x^16+x^12+x^5+1
  CRC-16=x^16+x^15+x^2+1

 

 

先舉個例子:

 

已知信息位爲1100,生成多項式G(x) = x3+x+1,求CRC碼。
M(x) = 1100 M(x)*x3 = 1100000

G(x) = 1011
M(x)*x3 / G(x) = 1110 + 010 /1011

R(x) = 010
CRC碼爲: M(x)*x 3+R(x)=1100000+010 =1100010


其原理是:CRC碼一般在k位信息位之後拼接r位校驗位生成。編碼步驟如下:
(1)將待編碼的k位信息表示成多項式 M(x)。
(2)將 M(x)左移 r 位,得到 M(x)*xr 。
(3)用r+1位的生成多項式G(x)去除M(x)*xr 得到餘數R(x)。
(4)將M(x)*xr 與R(x)作模2加,得到CRC碼。

 

 

“模2除”的演示圖片:

CRC校驗原理

“模2除”中間過程的減法爲“模2減”,即異或運算。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章