crc即迴圈冗餘校驗碼(cyclic redundancy check[1] ):是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。迴圈冗餘檢查(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)得到的餘數就是校驗碼。
任意乙個由二進位制位串組成的**都可以和乙個係數僅為『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)*2r。
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
------------------
1000
1011
------------------
011
得到的餘位011,所以最終編碼為:1010 011
【說明】「模2除法」與「算術除法」類似,但它既不向上位借位,也不比較除數和被除數的相同位數值的大小,只要以相同位數進行相除即可。模2加法運算為:1+1=0,0+1=1,0+0=0,無進製,也無借位;模2減法運算為:1-1=0,0-1=1,1-0=1,0-0=0,也無進製,無借位。相當於二進位制中的邏輯異或運算。也就是比較後,兩者對應位相同則結果為「0」,不同則結果為「1」。如100101除以1110,結果得到商為11,餘數為1,如圖5-9左圖所示。如11×11=101,如圖5-9右圖所示。
奇偶校驗(parity check)是一種校驗**傳輸正確性的方法。根據被傳輸的一組二進位制**的數字中「1」的個數是奇數或偶數來進行校驗。採用奇數的稱為奇校驗,反之,稱為偶校驗。採用何種校驗是事先規定好的。通常專門設定乙個奇偶校驗位,用它使這組**中「1」的個數為奇數或偶數。若用奇校驗,則當接收端收到這組**時,校驗「1」的個數是否為奇數,從而確定傳輸**的正確性。
為了能檢測和糾正記憶體軟錯誤,首先出現的是記憶體「奇偶校驗」。記憶體中最小的單位是位元,也稱為「位」,位只有兩種狀態分別以1和0來標示,每8個連續的位元叫做乙個位元組(byte)。不帶奇偶校驗的記憶體每個位元組只有8位,如果其某一位儲存了錯誤的值,就會導致其儲存的相應資料發生變化,進而導致應用程式發生錯誤。而奇偶校驗就是在每一位元組(8位)之外又增加了一位作為錯誤檢測位。在某位元組中儲存資料之後,在其8個位上儲存的資料是固定的,因為位只能有兩種狀態1或0,假設儲存的資料用位標示為1、1、1、0、0、1、0、1,那麼把每個位相加(1+1+1+0+0+1+0+1=5),結果是奇數。對於偶校驗,校驗位就定義為1,反之則為0;對於奇校驗,則相反。當cpu讀取儲存的資料時,它會再次把前8位中儲存的資料相加,計算結果是否與校驗位相一致。從而一定程度上能檢測出記憶體錯誤,奇偶校驗只能檢測出錯誤而無法對其進行修正,同時雖然雙位同時發生錯誤的概率相當低,但奇偶校驗卻無法檢測出雙位錯誤。
奇偶校驗有兩種型別:奇校驗和偶校驗。奇偶校驗位是乙個表示給定位數的二進位制數中1的個數是奇數或者偶數的二進位制數,奇偶校驗位是最簡單的錯誤檢測碼。如果傳輸過程中包括校驗位在內的奇數個資料位發生改變,那麼奇偶校驗位將出錯表示傳輸過程有錯誤發生。因此,奇偶校驗位是一種錯誤檢測碼,但是由於沒有辦法確定哪一位出錯,所以它不能進行錯誤校正。發生錯誤時必須扔掉全部的資料,然後從頭開始傳輸資料。在雜訊很多的媒介上成功傳輸資料可能要花費很長的時間,甚至根本無法實現。但是奇偶校驗位也有它的優點,它是使用一位資料能夠達到的最好的校驗碼,並且它僅僅需要一些異或門就能夠生成。奇偶校驗被廣泛應用。
Linux 詳解CRC校驗
1.crc校驗概念 crc即迴圈冗餘校驗碼 是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。2.crc校驗...
CRC冗餘校驗原理詳解
在進行crc原理解析之前,我們需要先了解什麼是模二除法,因為在crc校驗中使用的是模二除法,而非算術除法。以120 9為例,比較一下兩種除法的區別 120的二進位制 0b01111000 9的二進位制 1001 算術除法 120 9 13餘3 1101 除數 1001 1111000 0011 餘數...
資料校驗 CRC校驗
工作原理 crc即迴圈冗餘校驗碼 cyclic redundancy check 是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資...