CRC循環冗余校驗碼


原文轉載自:https://blog.csdn.net/hm108106/article/details/73332465

1.CRC

CRC循環冗余校驗碼是數據通信中的一種查錯校驗碼。

循環冗余檢查對數據進行多項式計算,將計算結果附加在幀后面,接收數據的設備執行模2運算,保證數據傳輸的正確性和完整性。  

2.模2除法      

①不向上借位,只要除數和被除數的位數相同就可進行計算,不比較它們的大小;

②模2運算中用到了模2減法,與邏輯異或相似: 
1-1=0, 1-0=1, 0-1=1 , 0-0=0,

③例子: 
這里寫圖片描述

3.CRC校驗的步驟

(1)選擇一個生成多項式,作為對接收的幀進行除法運算時的除數,生成多項式可以寫為二進制形式;

  • 生成多項式的要求: 
    ①最高位和最低位必須為1; 
    ②當CRC碼的任何一位發生錯誤時,新幀除生成多項式后余數不為0; 
    ③不同位發生錯誤時,余數應該是不同的;

  • 生成多項式轉化為二進制形式: 
    如x5+x3+x2+1,寫為二進制:101101

(2)計算CRC校驗碼位數k=生成多項式位數-1,在要發送的數據幀后加k個0,除第一步用生成多項式轉化的二進制數(使用模2除法),得到的余數即為CRC校驗碼;

  • 模2除時,余數的位數必須只比除數少一位,不能省略0

(3)把得到的校驗碼CRC加到原數據幀后,構成一個新數據幀發送到接收端,接收端將新幀除以之前選擇的除數(模2除法),如果沒有余數,則表明該數據幀在傳輸過程中沒有出錯,否則出錯;

4.CRC校驗例子:

假設CRC生成多項式G(X)=X5+X4+X+1,要發送的二進制數據幀為100101110,求CRC校驗碼:

①把生成多項式轉換為二進制數:110011;

②由生成多項式的位數為6可知,CRC校驗碼的位數為5,所以在數據幀后加5個0,變為10010111000000,將這個數使用模2除法除以生成多項式110011,得到余數即CRC校驗碼11010; 
這里寫圖片描述 
③用得到的CRC校驗碼替換掉數據幀中的5個0,形成新的幀10010111011010,將這個新幀發送給接收端;

④接收端收到新幀后,用新幀除以上面的多項式110011(模2除法),如果余數為0,該數據幀在傳輸過程中沒有出錯,否則出錯;(經驗證余數為0)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM