crc:(cyclic redundancy cheak)
【概念】:迴圈冗餘檢驗(crc)檢錯技術
【原理】:
傳送端:
m是乙個n位的二進位制資料,將m向左平移k位,得到乙個新的m。
用這個新的m除以乙個k+1位的多項式p(多項式最高次數為k+1),會得到乙個商q和k位的餘數r。(餘數字數不足k位的時候,前邊的零不能省略)。
所以可以得到如下的式子。
m=p*q+r;->(m-r)=p*q->在模二的運算下(m-r)=(m+r),所以可以將m=m+r傳送給接收端
接受端接收端此時可以根據如下的公式通過判斷接受到的m是否出現bit位的錯誤。
m%p=0(m=m+r)
通過數學理論,在理論上傳輸沒有發生錯誤的時候,m%p=(m+r)%p=(p*q)%p=0;
生成多項式:可以使用固定的幾個多項式。(標準給出的多項式)
【實現】:
1,傳送端將資料幀
m向左移位,空出
k個位置。即。
2,用(接收端和傳送端已知的多項式:k+1位生成多項式)去除
m,得到
k位餘數。
3,將(此時),並將m傳送給接收端。
4,接受端接收到
m之後,用
去除m,得到餘數r
結果判斷:
如果r是零,則表示傳輸過程中沒有發生
bit位的錯誤。
如果r不是零,則表示傳輸過程中出現了
bit位的傳輸錯誤。
[幀中某乙個
bit位出現了錯誤]。
【crc的檢錯能力】
舉個小例子說明為什麼可以檢查1~k位錯位。
例如:假設此時應該接收到的資料m為
1111
,此時的
p(x)
多項式為
1111
。在傳輸沒有錯誤的情況下,用m去模
p(x)
結果應該為0;
而此時接收到的資料為1110,用
1110
去模p(x)
結果為1
。則表示對應的接收到的資料的最低位出錯;如果接收的資料為
1010
,用1010
去模1111
,結果為
0101
,則表示資料最低位和次高位出錯。這個特性是由於模二下的除法運算決定的。【模二除法:對應位的異或運算】。
crc除了能檢查出離散的錯誤外,還能檢查出突發錯。突發錯是指在接收的二進位制位元流中突然出現連續的幾位或更多位數的錯誤。
crc具有以下檢錯能力:
1,能檢查出全部離散的
1位錯。
2,能檢查出全部離散的
2位錯。
3,能檢查出全部奇數字錯。
4,能夠檢查出全部長度小於或等於
k位的錯誤。
5,能以
的概率檢查出長度為
k+1的突發錯。
【例子】
選取p(x)為
,則p(x)對應的二進位制為
11001
。要傳輸的資料m為
110011
,計算crc
校驗的校驗碼。
校驗碼:
1,將m左移4
位,可以得到
m的值為
110010000。
2,用m
的值去除以
p(x)
所對應的二進位制可以得到餘數
r(校驗碼)為
1001。
帶有校驗碼的位元序列:
3,將m
的值與r
進行模二下的加法,得到結果為
110011001。
驗證:1,將接收到的
110011001
與p(x)
的二進位制
1101
進行模二下的除法運算,得到餘數r為
0。
迴圈冗餘校驗 CRC校驗
一 crc校驗概念 即迴圈冗餘校驗碼 cyclic redundancy check 是資料通訊領域中最常用的一種查錯校驗碼,迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。其特徵是資訊字段和...
迴圈冗餘校驗CRC
網上搜到的內容不全面,維基百科講的比較好,原理很清楚傳送門 其實對於程式設計師來講,不用太在意它的數學原理,另外生成碼的選擇不是隨意的,這可能影響到校驗的效能。注意其中的加法不進製,減法不借位,類似是異或邏輯。關於怎樣產生crc,有這樣乙個演算法 下面為crc的計算過程 1 設定crc暫存器,並給其...
CRC迴圈冗餘校驗
crc校驗原理 crc校驗原理看起來比較複雜,好難懂,因為大多數書上基本上是以二進位制的多項式形式來說明的。其實很簡單的問題,其根本思想就是先在要傳送的幀後面附加乙個數 這個就是用來校驗的校驗碼,但要注意,這裡的數也是二進位制序列的,下同 生成乙個新幀傳送給接收端。當然,這個附加的數不是隨意的,它要...