crc校驗採用多項式編碼方法,如乙個8位二進位制數(b7b6b5b4b3b2b1b0)可以用7階二進位製碼多項式b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x1+b0x0表示。
例如11000001可表示為
1x7+1x6+0x5+0x4+0x3+0x2+0x1+0x0
一般說,n位二進位制數可用(n-1)階多項式表示。它把要傳送的資料位串看成是係數只能為「1」或「0」的多項式。乙個n位的資料塊可以看成是從xn-1到x0的n項多項式的係數序列,位於資料塊左邊的最高位是xn-1項的係數,次高位是xn-2項的係數,依此類推,位於資料塊右邊的最低位是x0項的係數,這個多項式的階數為n-1。
多項式乘除法運算過程與普通代數多項式的乘除法相同。多項式的加減法運算以2為模,加減時不進、錯位,如同邏輯異或運算。
採用crc校驗時,傳送方和接收方事先約定乙個生成多項式g(x),並且g(x)的最高項和最低項的係數必須為1。設m位資料塊的多項式為m(x),生成多項式g(x)的階數必需比m(x)的階數低。crc校驗碼的檢錯原理是:傳送方先為資料塊生成crc校驗碼,使這個crc校驗碼的多項式能被g(x)除盡,實際傳送此crc校驗碼;接收方用收到的crc校驗碼除以g(x),如果能除盡,表明傳輸正確,否則,表示有傳輸錯誤,請求重發。
生成資料塊的crc校驗碼的方法是:
(1) 設g(x)為r階,在資料塊末尾新增r個0,使資料塊為m+r位,則相應的多項式為xrm(x);
(2) 以2為模,用對應於g(x)的位串去除對應於xrm(x)的位串,求得餘數字串;
(3) 以2為模,從對應於xrm(x)的位串中減去餘數字串,結果就是為資料塊生成的帶足夠校驗資訊的crc校驗碼位串。
例如,設要傳送的資料為1101011011,g(x)=x4+x+1,則首先在傳送資料塊的末尾加4個0,得到11010110110000,然後用g(x)的位串10011去除,再用11010110110000減去餘數字串1110,得到的即為crc位串11010110111110,將對應多項式稱為t(x),顯然,t(x)能被g(x)除盡。這樣,一旦接收到的crc位串不能被同樣的g(x)的位串除盡,那麼一定有傳輸錯誤。
當使用crc校驗碼進行差錯控制時,除了為g(x)的整數倍的差錯多項式不能被檢測外,其它差錯均能被查出。crc校驗碼的差錯控制效果取決於g(x)的階數,階數越高,效果越好。目前,常用的有兩種生成多項式g(x)的方法,分別是:
crc-16 x16+x15+x2+1
ccitt x16+x12+x5+1
crc校驗碼實際上是一種線性碼,將任意crc校驗碼迴圈移位後仍然是乙個crc校驗碼。由於它有良好的結構,檢錯能力強,易於實現硬體編、解碼,因此在資料通訊系統中得到廣泛的應用。
迴圈冗餘校驗 CRC校驗
一 crc校驗概念 即迴圈冗餘校驗碼 cyclic redundancy check 是資料通訊領域中最常用的一種查錯校驗碼,迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。其特徵是資訊字段和...
迴圈冗餘校驗CRC
網上搜到的內容不全面,維基百科講的比較好,原理很清楚傳送門 其實對於程式設計師來講,不用太在意它的數學原理,另外生成碼的選擇不是隨意的,這可能影響到校驗的效能。注意其中的加法不進製,減法不借位,類似是異或邏輯。關於怎樣產生crc,有這樣乙個演算法 下面為crc的計算過程 1 設定crc暫存器,並給其...
CRC迴圈冗餘校驗
crc校驗原理 crc校驗原理看起來比較複雜,好難懂,因為大多數書上基本上是以二進位制的多項式形式來說明的。其實很簡單的問題,其根本思想就是先在要傳送的幀後面附加乙個數 這個就是用來校驗的校驗碼,但要注意,這裡的數也是二進位制序列的,下同 生成乙個新幀傳送給接收端。當然,這個附加的數不是隨意的,它要...