通俗易懂的CRC循環校驗

CRC循環校驗

CRC編碼,也稱爲多項式編碼。它是在數據通信中常用的一種差錯校驗碼。由信息字段和校驗字段組成。其中信息字段和校驗字段長度可以任意選定。

先來看看CRC校驗的原理:


在發送方要將d比特的數據D發送給接收方,所以

1、先提前制定一個協議,就是雙方先協商一個r+1比特模式,叫做生成多項式,用G來表示,要求G的最高比特爲必須爲1。

 
2、在發送端先給數據位(例如D:110101)後面補上(G-1)個0,得到一個幀,這裏的G就是提前協商好的(例如x^4+x^3+1,轉換爲2進制就是11001,然後將4個0加在D的後面,幀就變爲了1101010000),然後進行讓新的數據位對生成多項式進行“模二除”運算,最後的到的餘數就是CRC校驗碼(注意這裏的到的CRC校驗碼必須是G-1位,如果的到的高位是0也要寫上),然後將得到的CRC校驗碼替換剛剛添加的G-1個0。這樣就得到了一個新的幀。 


3、然後將新幀和生成多項式進行封裝傳給接收端。接收端在收到包後將新幀和生成多項式拿出來。然後執行和發送端一樣的運算,對生成多項式對應的二進制進行模二除,如果最後得到的餘數爲0,則說明在傳輸過程中沒有出錯。否則就是出錯。而且具體還能檢查到哪一位出錯了。

我們現在現將上面舉的例子來解析一下 
首先,數據位爲110101,生成多項式爲x^4+x^3+1,則轉換的的二進制就是11001,那麼生成的幀就是1101010000(爲什麼是這樣上面有說道),然後先進行模二除,得到餘數就是CRC校驗碼 
先來看看什麼是模二除運算 
模二除簡單來說就是二進制比特位按位異或,都知道除法在除的時候不夠除時要像高位借位,而模二除只是當前比特位的異或,不涉及到借位。 
只要二進制比特位相同就商1,不夠就商0。 
現在就將上面的式子進行模二除


以前的通信基礎理論老師曾經說過:“CRC校驗是我們通信人的驕傲”。那麼爲什麼CRC校驗碼這麼好呢?就是因爲他能夠在接收端檢測出在傳輸過程中出現錯誤了,並且能夠夠檢測出來,所以說他很強大,那麼現在就來解析一下爲什麼能夠具體檢測到某一位錯誤(實際上一次可以檢測出多位出錯) 
剛剛上面的那個模二除就是在發送端做的事,最後得到一個幀1101011101,然後傳給接收端,如果要是在傳輸過程中沒有出錯,那麼用1101011101模二除11001,得到的餘數肯定是0,要是其中某一位出錯了,那麼肯定實在傳輸的時候出現了錯誤,導致異常。CRC校驗到底是如何檢測出錯位的位呢?現在假設接收端收到的幀爲1101111101,也就是從左到右第五位的0變爲了1,現在再用模二除來計算一下。


所以在接收方根據得到的餘數反推回去就得到了錯誤的比特位在哪。

總結一下:CRC校驗碼就是利用發送方和接收方提前協商好一個生成多項式,然後通過得到的數據幀模二除這個生成多項式對應的二進制序列,在接收方如果得到的餘數爲0,則說明傳輸中沒有出現錯誤,否則就會出現錯誤。

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