工作原理:
crc即迴圈冗餘校驗碼(cyclic redundancy check):是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。
迴圈冗餘檢查(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)*2^r),這樣c(x)的右邊就會空出r位,這就是校驗碼的位置。
用 c(x)*2^r 除以生成多項式g(x)得到的餘數就是校驗碼。
任意乙個由二進位制位串組成的**都可以和乙個係數僅為『0』和『1』取值的多項式一一對應。例如:**1010111對應的多項式為x6+x4+x2+x+1,而多項式為x5+x3+x2+x+1對應的**101111。
基本概念:
對應關係:
多項式和二進位制數有直接對應關係:x的最高冪次對應二進位制數的最高位,以下各位對應多項式的各冪次,有此冪次項對應1,無此冪次項對應0。
可以看出:x的最高冪次為r,轉換成對應的二進位制數有r+1位。
多項式包括生成多項式g(x)和資訊多項式c(x)。
如生成多項式為g(x)=x4+x3+x+1, 可轉換為二進位制數碼11011
而傳送資訊位 101111,可轉換為資料多項式為c(x)=x5+x3+x2+x+1。
生成多項式:
是接受方和傳送方的乙個約定,也就是乙個二進位制數,在整個傳輸過程中,這個數始終保持不變。
在傳送方,利用生成多項式對資訊多項式做模2除生成校驗碼。在接收方利用生成多項式對收到的編碼多項式做模2除檢測和確定錯誤位置。
應滿足以下條件:
a、生成多項式的最高位和最低位必須為1。
b、當被傳送資訊(crc碼)任何一位發生錯誤時,被生成多項式做除後應該使餘數不為0。
c、不同位發生錯誤時,應該使餘數不同。
d、對餘數繼續做除,應使餘數迴圈。
校驗碼位數:
crc校驗碼位數 = 生成多項式位數 - 1。注意有些生成多項式的簡記式中將生成多項式的最高位1省略了。
生成步驟:
1、將x的最高次冪為r的生成多項式g(x)轉換成對應的r+1位二進位制數。
2、將資訊碼左移r位,相當於對應的資訊多項式c(x)*2^r。
3、用生成多項式(二進位制數)對資訊碼做除,得到r位的餘數(注意:這裡的二進位製做除法得到的餘數其實是模2除法得到的餘數,並不等於其對應十進位制數做除法得到的餘數。)。
4、將餘數拼到資訊碼左移後空出的位置,得到完整的crc碼。
例:假設使用的生成多項式是g(x)=x3+x+1。4位的原始報文為1010,求編碼後的報文。
1、將生成多項式g(x)=x3+x+1轉換成對應的二進位制除數1011。
2、此題生成多項式有4位(r+1)(注意:4位的生成多項式計算所得的校驗碼為3位,r為校驗碼位數),要把原始報文c(x)左移3(r)位變成1010 000
3、用生成多項式對應的二進位制數對左移3位後的原始報文進行模2除(高位對齊),相當於按位異或:
1010000
1011
————————————
0001000
1000
1011
————————————
0011
得到的餘位011,所以最終編碼為:1010 011
生成方法:
借助於模2除法則,其餘數為校驗字段。
例如:資訊字段**為: 1011001;對應m(x)=x6+x4+x3+1
假設生成多項式為:g(x)=x4+x3+1;則對應g(x)的**為: 11001
x^4*m(x)=x10+x8+x7+x4 對應的**記為:10110010000(相當於1011001<<4);
採用模2除法則: 得餘數為: 1010(即校驗欄位為:1010)
傳送方:發出的傳輸欄位為: 10110011010 資訊欄位+校驗字段
接收方:使用相同的生成碼進行校驗:接收到的字段/生成碼(二進位制除法)如果能夠除盡,則正確,
給出餘數(1010)的計算步驟:
除法沒有數學上的含義,而是採用計算機的模二除法,即除數和被除數做異或運算。進行異或運算時除數和被除數最高位對齊,按位異或。
10110010000
11001
————————————
01111010000
1111010000
11001
————————————
0011110000
11110000
11001
————————————
00111000
111000
11001
————————————
001010
1010
則四位crc校驗碼就為:1010。
利用crc進行檢錯的過程可簡單描述為:在傳送端根據要傳送的k位二進位製碼序列,以一定的規則產生乙個校驗用的r位監督碼(crc碼),附在原始資訊後邊,構成乙個新的二進位製碼序列數共k+r位,
後傳送出去。在接收端,根據資訊碼和crc碼之間所遵循的規則進行檢驗,以確定傳送中是否出錯。這個規則,在差錯控制理論中稱為「生成多項式」。
位寬:有一點要特別注意:生成多項式經常會說到多項式的位寬(width,簡記為w),這個位寬不是多項式對應的二進位制數的位數,而是二進位制位數減1。比如crc8中用到的位寬為8的生成多項式,
其實對應得二進位制數有九位:100110001。另外一點,多項式表示和二進位制表示都很繁瑣,交流起來不方便,因此,多用16進製制簡寫法來表示,因為生成多項式的最高位肯定為1,
最高位的位置由位寬可知,故在簡記式中,將最高的1統一去掉了,如crc32的生成多項式簡記為04c11db7實際上表示的是104c11db7。
軟體程式設計(crc32):
#define poly 0xedb88320
int crc32(char *addr, int num, int crc)
/* loop for 8 bits */
} /* loop until num=0 */
return(crc); /* return updated crc */
}
迴圈冗餘校驗 CRC校驗
一 crc校驗概念 即迴圈冗餘校驗碼 cyclic redundancy check 是資料通訊領域中最常用的一種查錯校驗碼,迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。其特徵是資訊字段和...
CRC校驗原理
crc校驗原理 1 迴圈校驗碼 crc碼 是資料通訊領域中最常用的一種差錯校驗碼,其特 徵是資訊字段和校驗欄位的長度可以任意選定。2 生成crc碼的基本原理 任意乙個由二進位制位串組成的 都可以和乙個系 數僅為 0 和 1 取值的多項式一一對應。例如 1010111對應的多項 式為x6 x4 x2 ...
CRC校驗程式設計
程式的宗旨 通過編寫crc的校驗程式,加深對crc原理的理解,同時學會將書本上的原理運用於實際,動手實踐才能學得更快。注 本文關於crc原理那部分內容,來自網路蒐集。1.需求分析 編寫乙個crc校驗的模擬程式,該程式實現的功能如下 輸入 一串二進位制位元串 輸出 crc校驗碼 2.crc校驗原理分析...