實例解析CRC(循環冗餘檢驗碼)

循環冗餘校驗碼(CRC),是一種能力相當強的具有檢錯、糾錯能力的校驗碼,常用於串行傳送的輔助存儲器與主機的數據通信和計算機網絡中

 

爲什麼要使用CRC?

(在計算機網絡中的應用)

數據在傳輸過程中,可能會產生比特差錯:1可能變爲0, 0可能變爲1,因此爲了保證數據傳輸的可靠性,必須採用各種差錯檢測措施

目前在數據鏈路層中廣泛採用的就是循環冗餘檢驗CRC的檢錯技術

(CRC技術也很容易實現)

 

CRC碼

CRC碼又稱多項式碼,任何一個二進制數都可以和一個對應的多項式建立一一對應的關係

舉例

1011011對應的多項式爲x^{6} + x^{4} + x^{3} + x + 1

解析:對應位上爲1,則加上對應位的x多少次方

比如,以上,第六位爲1(二進制數最右面是第0位),則加上 x^{6} ;第五位爲0,則不加;第四位爲1,則加上x^{4},以此類推

思考

x^{5} + x^{4} + x^{2} + 1 對應的代碼是多少?

答案:110101

 

模2運算

對應位進行異或操作:相同爲0,不同爲1

CRC原理

CRC運算就是在發送的數據後面加上 r 位冗餘位,構成一個由 k 位信息位,加上 r 位冗餘位組成的 n = k + r 位碼字發出去

也許直接看概念或者原理,可能會不容易理解,所以這裏直接給出例題進行講解

例題:

當我們要發送一幀數據時,要發送的數據爲101110。採用CRC 生成多項式是P(x) = x^{3} + 1。試求應添加在數據後面的餘數

  • 每組比特數 k = 6(因爲數據101110有6位)
  • 除數 = 1001,n = 3(因爲根據x^{3} + 1得出對應二進制爲1001,最高次冪爲3,所以n = 3)
  • 先進行移位,得被除數 = 101110000(就是將要發送的數據後面補 n 個0)
  • 求餘:進行模二除法,得餘數 = 011(求餘過程如下)

圖中可以看到,最後的餘數爲 011

所以當我們發送數據的時候,就可以將此餘數添加到要發送的數據後面,也就是 101110011,這就是編碼後的CRC碼,我們將其發送即可

當碼字到達接收端時

  • 若CRC碼在接收端能被除數 1001 整除,則說明接收正確
  • 若CRC碼不能被除數整除,則檢測到出錯

 

循環冗餘校驗碼的檢錯能力:

  1. 可檢測出所有奇數位錯
  2. 可檢測出所有雙比特的錯
  3. 可檢測出所有小於、等於校驗位長度的突發錯

 

總結

採用CRC時,需要約定一個生成多項式(除數)

發送方:信息位 + 冗餘位 = 發送碼字 (冗餘位就是上面例題中求的餘數)

接收方:用收到的CRC碼字除以生成多項式(除數),判斷餘數是否爲0

  • 爲0:接收正確,接收數據幀
  • 不爲0:接收有錯,丟棄數據幀
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章