03.06 循環冗餘校驗(CRC)原理

原理簡介

CRC通過增加若干冗餘位數據來於核實數據傳輸或者數據存儲的正確性和完整性。

假如要傳輸的有效數據D有k位,冗餘數據F共n-k位,那麼整個傳輸幀T:

循環冗餘校驗(CRC)原理

圖 1校驗碼格式

數據發送方和接受方要實現預定一個(n-k+1)位的整數P,並且約定T和F滿足:

TmodP==0……(1)

其中mod是求餘運算,加上圖1顯示的關係有:

T=(2n−k)*D+F……(2)

基於上述要求,實際應用時,發送方和接收方按以下方式通信:

1. 發送方和接收方在通信前,約定好預設整數P。

2. 發送方在發送前通過(1)和(2)式確定並填充F,然後發送。

3. 接收方收到數據,進行 result = T mod P 運算,當且僅當result = 0時接收方認為沒有差錯。

發送方在發送數據前需要確定填充的(n-k)位F值。

我們知道採用無進位的二進制加法,等價於將被加數和加數進行異或(XOR)操作。

由於我們最終的目的是(1)式,根據(2)式,我們有

(2n-kD+F)/P=2n-kD/P+F/P……(3)
現在,我們令

2n-kD/P=Q+R/P……(4)
於是,我們有

(2n-kD+F)/P=Q+R/P+F/P……(5)
由於採用無進位的二進制加法(等價於XOR操作),因此當我們令 F=R時,即

T=2n-kD+R,有 (2n-kD+F)/P=Q+R/P+F/P=Q……(6)

此時便有(1)式成立。因此利用模二加法我們知,我們需要添加的幀檢驗序列F為:

F=2n-kDmodP……(7)

舉個例子

發送方要傳輸的數據D是10110100共8位,發送方和接收方約定P為101,共三位,冗餘位n-k共2位 那麼F=2n-kDmodP=(22*10110100)mod(101) =(1011010000)mod(101)=00 那麼傳輸幀T就是1011010000


分享到:


相關文章: