迴圈冗餘校驗碼

2021-06-28 11:12:52 字數 2118 閱讀 2805

本文先講述crc校驗原理等資訊,最後闡述crc 「直接計算法」和高效查表法。

一、基本原理

crc檢驗原理實際上就是在乙個p位二進位制資料序列之後附加乙個r位二進位制檢驗碼(序列),從而構成乙個總長為n=p+r位的二進位制序列;附加在資料序列之後的這個檢驗碼與資料序列的內容之間存在著某種特定的關係。如果因干擾等原因使資料序列中的某一位或某些位發生錯誤,這種特定關係就會被破壞。因此,通過檢查這一關係,就可以實現對資料正確性的檢驗。

二、幾個基本概念

1、幀檢驗序列fcs(frame check sequence):為了進行差錯檢驗而新增的冗餘碼。

2、多項式模2執行:實際上是按位異或(exclusive or)運算,即相同為0,相異為1,也就是不考慮進製、借位的二進位制加減運算。如:10011011 + 11001010 = 01010001。(自己測試了多次,模2運算能正確得到餘數,不能正確得到商)

3、生成多項式(generator polynomial):當進行crc檢驗時,傳送方與接收方需要事先約定乙個除數,即生成多項式,一般記作g(x)。生成多項式的最高位與最低位必須是1,不能隨意選擇。常用的crc碼的生成多項式有:

crc8=x8+x5+x4+1

crc-ccitt=x16+x12+x5+1

crc16=x16+x15+x5+1

crc12=x12+x11+x3+x2+1

crc32=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x1+1

每乙個生成多項式都可以與乙個**相對應,如crc8對應**:100110001。

三、crc檢驗碼的計算

設資訊欄位為k位,校驗欄位為r位,則碼字長度為n(n=k+r)。設雙方事先約定了乙個r次多項式g(x),則crc碼:

v(x)=a(x)g(x)=xrm(x)+r(x)

其中:   m(x)為k次資訊多項式, r(x)為r-1次校驗多項式。

這裡r(x)對應的**即為冗餘碼,加在原資訊欄位後即形成crc碼。

r(x)的計算方法為:在k位資訊欄位的後面新增r個0,再除以g(x)對應的**序列,得到的餘數即為r(x)對應的**(應為r-1位;若不足,而在高位補0)。

計算示例

設需要傳送的資訊為m = 1010001101,產生多項式對應的**為p = 110101,r=5。在m後加5個0,然後對p做模2除法運算,得餘數r(x)對應的**:01110。故實際需要傳送的資料是101000110101110。

四、錯誤檢測

當接收方收到資料後,用收到的資料對p(事先約定的)進行模2除法,若餘數為0,則認為資料傳輸無差錯;若餘數不為0,則認為資料傳輸出現了錯誤,由於不知道錯誤發生在什麼地方,因而不能進行自動糾正,一般的做法是丟棄接收的資料。

五、幾點說明:

1、crc是一種常用的檢錯碼,並不能用於自動糾錯。

2、只要經過嚴格的挑選,並使用位數足夠多的除數 p,那麼出現檢測不到的差錯的概率就很小很小。

3、僅用迴圈冗餘檢驗 crc 差錯檢測技術只能做到無差錯接受(只是非常近似的認為是無差錯的),並不能保證可靠傳輸。

六、直接計算法:

把register中的值置0.      

把原始的資料後新增w個0.      

while (還有剩餘沒有處理的資料)        

begin        

把register中的值左移一位,讀入乙個新的資料並置於register最低位的位置。        

if (如果上一步的左移操作中的移出的一位是1)          

register = register xor poly.        

end七、高效查表法

詳細推導見:

(基礎篇)

(最終篇) (存在乙個逆運算,包括多項式)

public static uint32 getcrc32code(string strsource)

byte data = encoding.unicode.getbytes(strsource);

for(int i = 0; i < data.length; i++)

}return crc;

}

校驗碼 迴圈冗餘校驗碼

迴圈冗餘校驗碼,又稱crc碼。它利用生成多項式來為k個資料位產生r個校驗位來進行編碼。其編碼長度為k r。迴圈冗餘校驗碼由兩部分組成,左邊為資訊碼 資料 右邊為校驗碼,如下圖 若資訊碼佔k位,則校驗碼就佔n k位,其中,n為crc碼的字長,所以又稱為 n,k 碼。校驗碼位數越多,校驗能力越強。crc...

迴圈冗餘校驗碼

crc cyclic redundancy check 迴圈冗餘校驗碼 是常用的校驗碼,在早期的通訊中運用廣泛,因為早期的通訊技術不夠可靠 不可靠性的 是通訊技術決定的,比如電磁波通訊時受雷電等因素的影響 不可靠的通訊就會帶來 確認資訊 的困惑,書上提到紅軍和藍軍通訊聯合進攻山下的敵軍的例子,第一天...

迴圈冗餘校驗碼

crc碼是由兩部分組成,前部分是資訊碼,就是需要校驗的資訊,後部分是校驗碼,如果crc碼共長n個bit,資訊碼長k個bit,就稱為 n,k 碼。它的編碼規則是 將原資訊碼 kbit 左移r位 k r n 運用乙個生成多項式g x 也可看成二進位制數 用模2除上面的式子,得到的餘數就是校驗碼。非常簡單...