迴圈冗餘校驗編碼(CRC校驗)

2021-09-05 12:45:35 字數 1669 閱讀 8607

計算機資料通訊中,由於干擾等各種內外因素,資料出現差錯不可避免,在資料通訊中需要對資料進行差錯檢測。實現差錯檢測的基本原理是:傳送方在傳送資料的基礎上生產某些編碼,然後將校驗編碼附加在資料後面一起傳送,接收方在收到資料和校驗碼之後,用校驗碼對資料進行校驗,確認傳輸的資料是否正確。差錯檢測技術的核心是校驗編碼,常用的校驗有奇偶校驗,恆比較校驗和迴圈冗餘校驗編碼三種。在此我們主要介紹迴圈冗餘校驗編碼。

1.奇偶校驗:對要傳送的格式報文中的數字「1」碼元個數統計,採用奇偶校驗的時候,通過新增乙個碼元使的報文中的「1」為奇數(奇校驗)或者偶數(偶校驗),如果在接收的時候發現報文中的「1」碼元數不符合奇偶校驗的規定,就判定資料出錯。奇偶校驗存在一定的缺陷:當出錯碼元個數為奇數的時候才有效,如果為偶數的話,奇偶校驗就不能檢測出來。iso規定,在同步傳輸系統中,採用奇校驗,在非同步傳輸系統中,採用偶校驗。

2.恆比碼:在通訊時不是原碼傳送,而是對待傳送的資料編碼,使之編碼之後的每乙個位元組中,「1」與「0」的個數之比保持恆定,稱之為恆比碼,該編碼用於國內電報通訊。恆比碼糾錯能力稍強於奇偶校驗,當碼組中出現奇數個數的差錯時,破壞了「0」與「1」的恆比關係,能夠被檢測出來,當出現偶數個數的差錯時,只要不是非置換型的兩個碼元錯誤,即兩數個「0」全錯成「1」,或者相反,都可以檢測出來,但是出現置換型的錯誤,即某個位置的「1」出錯為「0」,而另外乙個位置的「0」出錯為「1」,恆比碼則不能檢測出來。

3.迴圈冗餘校驗碼:簡稱crc碼,crc校驗碼是一種高效能的檢錯碼,具有檢錯能力強,實現簡單容易,良好的代數結構等特點,比如奇偶校驗和恆比碼不能檢測出來的置換型錯誤,crc校驗能夠很好的檢測出來。

線性碼和迴圈碼:有k個資訊碼元與r個校驗碼元構成的線性碼組,其中每乙個校驗碼元是該碼組中某些資訊碼元的模2除運算(每個資料位,與除數做邏輯異或運算),具有該結構格式的碼組為線性碼。對於線性碼如其具有如下性質:任一碼組的每一次迴圈右移或者左移,所得到的新碼組仍然是該碼中的一碼組,我們將具有這種迴圈移位不變性的線性碼稱之為迴圈碼。

為便於用代數研究迴圈碼,將碼組中的各個碼元當做乙個多項式的係數,即碼組c=(cn-1,cn-2,cn-3....c1,c0,)所對應的多項式表達為c(x)=c(x)=cn-1+cn-2+...+c1+c0

crc-16  g(x)=+++1

crc-citt g(x)=+++1

上面三個多項式已經成為國際標準,其中,crc-12用於6位字元同步系統,能檢測出長度在12為以內的突發差錯,crc-16和crc-citt用於8位字元同步系統,能夠檢測出全部的1位,2位和奇數字的差錯,所有長度不大於16位的突發錯,以及99.997%的位突發錯和99.998%的18位或更多位的突發錯。

crc迴圈碼程式設計:(查表法,c#語言**,crc-16迴圈碼,其中crc_len=0)

c#語言**:

public static byte crc16(byte data)///crc16校驗碼生成,傳入位元組陣列,返回位元組陣列

;byte auchcrclow = ;

#endregion

byte crchi = 0xff;

byte crclow = 0xff;

for (int i = 0; i < data.length - crc_len; i++)

outdata[0] = crchi;

outdata[1] = crclow;

return (outdata);

}

迴圈冗餘校驗 CRC校驗

一 crc校驗概念 即迴圈冗餘校驗碼 cyclic redundancy check 是資料通訊領域中最常用的一種查錯校驗碼,迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。其特徵是資訊字段和...

迴圈冗餘校驗CRC

網上搜到的內容不全面,維基百科講的比較好,原理很清楚傳送門 其實對於程式設計師來講,不用太在意它的數學原理,另外生成碼的選擇不是隨意的,這可能影響到校驗的效能。注意其中的加法不進製,減法不借位,類似是異或邏輯。關於怎樣產生crc,有這樣乙個演算法 下面為crc的計算過程 1 設定crc暫存器,並給其...

CRC迴圈冗餘校驗

crc校驗原理 crc校驗原理看起來比較複雜,好難懂,因為大多數書上基本上是以二進位制的多項式形式來說明的。其實很簡單的問題,其根本思想就是先在要傳送的幀後面附加乙個數 這個就是用來校驗的校驗碼,但要注意,這裡的數也是二進位制序列的,下同 生成乙個新幀傳送給接收端。當然,這個附加的數不是隨意的,它要...