CRC校驗的理解和計算過程

CRC校驗

即循環冗餘校驗
循環冗餘校驗碼(cyclie redundancy check)簡稱CRC(循環碼),是一種能力相當強的檢錯、糾錯碼,並且實現編碼和檢碼的電路比較簡單,常用於串行傳送(二進制位串沿一條信號線逐位傳送)的輔助存儲器與主機的數據通信和計算機網絡中。
循環碼是指通過某種數學運算實現有效信息與校驗位之間的循環校驗(而海明碼是一種多重校驗)。 [3]
這種編碼基本思想是將要傳送的信息M(X)表示爲一個多項式L,用L除以一個預先確定的多項式G(X),得到的餘式就是所需的循環冗餘校驗碼。 這種校驗又稱多項式校驗。
理論上可以證明循環冗餘校驗碼的檢錯能力有以下特點:①可檢測出所有奇數位錯;②可檢測出所有雙比特的錯;③可檢測出所有小於、等於校驗位長度的突發錯。

參考百度百科的解釋,推薦去看一看:
百度百科-循環冗餘校驗碼

更爲精煉的解釋是:
CRC即循環冗餘校驗碼(Cyclic Redundancy Check):是數據通信領域中最常用的一種查錯校驗碼,其特徵是信息字段和校驗字段的長度可以任意選定。循環冗餘檢查(CRC)是一種數據傳輸檢錯功能,對數據進行多項式計算,並將得到的結果附在幀的後面,接收設備也執行類似的算法,以保證數據傳輸的正確性和完整性。

再介紹下模2運算
模2加法與模2減法相同,類似於邏輯的異或運算。
模2加法:1+1=0,1+0=1,0+1=1,0+0=1;
模2減法:1-1=0,1-0=1,0-1=1,0+0=0;

Input1 Input2 Output
A B C
1 1 0
1 0 1
0 1 1
0 0 0

CRC校驗碼計算過程:
①選定的除數二進制位數設爲K位
②要發送的原始數據幀二進制位數設爲M位,在原始數據幀後面加上(K-1)位"0"
③加了(K-1)位"0"的新數據幀(此時共M+K-1位)以模2除法的方式除以之前定的除數(①中有K位的除數)
④模2除法之後得到的餘數就是該原始數據幀的CRC校驗碼,也叫做FCS(幀校驗序列)
⑤再把得到的CRC校驗碼附加在原始數據幀後面(即替換掉③中新數據幀後面的(K-1)位"0"),此時再將新構建的數據幀發送到接收端。
若接收端把新數據幀同樣以模2除法的方式除以相同的除數(①中有K位的除數)後沒有餘數,則該原始數據幀在傳輸過程中沒有出錯,否則出錯。

例:假設CRC生成多項式爲G(X) = X5 + X4 +X+1,要發送的二進制序列爲100101110,求CRC校驗碼是多少。
分析:
①由G(X) = X5 + X4 +X+1知除數位數是K=5+1=6位(總位數是最高位的冪次加1),除數是110011(第5、第4、第1和第0位均爲1)。
②要發送的原始數據幀是9位的100101110,則在原始數據幀後面加上(6-1)位"0",即新的數據幀爲M+K-1=14位的100101110 00000。
③模2除法運算:10010111000000除以110011。
在這裏插入圖片描述

④得餘數爲5位的CRC校驗碼:11010(餘數的位數一定要是比除數位數只能少一位,哪怕前面位是0,甚至是全爲0(附帶好整除時)也都不能省略。
⑤要發送的新數據幀爲:10010111011010

接收端接收到 10010111011010 後也執行模2除法除以除數 110011 ,計算得到的結果沒有餘數,即傳輸的數據 100101110 在傳輸過程中並沒有出錯。

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