細說迴圈冗餘校驗碼

2021-08-03 18:25:57 字數 2395 閱讀 3525

初識迴圈冗餘校驗碼:

為了保證資料傳輸的可靠性,在計算機網路傳輸資料時,必須採用各種差錯檢驗措施,目前廣泛使用的是迴圈冗餘(crc)檢驗的檢錯技術。

crc檢驗原理:

在傳送端,先把資料劃分為組,假定每個組k個位元。現假定待傳送的資料m=101001(k=6)。crc運算就是在資料m後面新增供差錯檢驗用的n位冗餘碼,然後構成乙個幀傳送出去,一共傳送(k+n)位。在要傳送的資料後面加n位的冗餘碼,雖然增加了資料傳送的開銷,但卻可以進行差錯檢測。當傳輸可能出現差錯時,付出這種代價是很值得的。

這n位冗餘碼可以通過下面的方法得出。用二進位制的模2運算進行2^n乘m的運算,這相當於在m後面新增n個0。得到k+n位的數除以收發雙方事先商定的長度為(n+1)位的除數p(實際上是除數和被除數做異或運算),得出商是q餘數是r(n位,比p少一位)。

在上圖所示例子中,m=101001(k=6),假定除數p=1101(n=3,n比除數p少一位,即n為3位).經模2除法運算後的結果是:商q=110101(這個商並沒有什麼用),而餘數r=001,這個餘數r就作為冗餘碼拼接在m之後傳送出去,這種為了進行檢錯而新增的冗餘碼常稱為幀檢驗序列fcs,因此加上fcs後傳送的幀是101001001(一共k+n位)。

在接收端把接收到的資料以幀為單位進行crc檢驗:把收到的每一幀都除以同樣的除數p(模2運算),然後檢查得到的餘數r。

如果在傳輸過程中無差錯,那麼經過crc檢驗後得出的餘數r肯定是0。

但如果出現誤碼,那麼餘數r仍等於0的概率是非常小的。

總結:

(1)若得出的餘數r=0,則判定這個幀沒錯,就接受。

(2)若餘數r!=0;則判定這個幀有差錯(但無法確定是哪一位或者或者哪幾位出現了差錯),就丟棄。

注意:

還有一種較方便的方法是用多項式g(x)來表示迴圈冗餘檢驗過程。具體演算法下面例題詳細介紹。但在實際應用中,g(x)的取值是有限制的,它受限於以下國際標準:

crc-ccitt=x^16+x^12+x^5+1

crc-16=x^16+x^15+x^2+1

crc-12=x^12+x^11+x^3+x^2+x+1

關於g(x)的國際標準還有一些,這裡不一一介紹。

例題1:

採用crc進行差錯檢驗,生成多項式為g(x)=x4+x+1,資訊碼字為10110,則計算出的crc校驗碼是:

a. 0000 b. 0100 c. 0010 d.1111

【分析】

符號表示假定:多項式和多項式的係數排列均用相同的符號表示,如

g(x)= x4+x+1

g(x)=10011

(1)已知條件如下:

原碼字記做m(x),即:m(x) = 10110

生成多項式記做g(x),即:g(x) = 10011

g(x)的最高端數記做r,此處r = 4

(2)計算步驟

a、計算xrm(x)

也就是把m(x)的尾部新增r個0

xrm(x) = 10110 0000

b、計算xrm(x)長除g(x),餘數記做y(x)

這裡的「長除」計算方法如下:

xrm(x) 10110 0000

– g(x) 10011 (注意位對應方式,對應位進行異或運算即可)

00101 0000

– g(x) 100 11 (計算方法同上)

001 1100

– g(x) 100 11

01111 (此數已經小於g(x),計算到此為止,即y(x))

注意y(x)的位數為r(此處為4),所以y(x) = 1111

y(x)即是crc校驗碼。

c、計算傳輸碼字t(x) = xrm(x)-y(x)

計算方法:在m(x)末尾連線上y(x)即可

即:t(x) = 10110 1111

【答案】

此題只要計算出校驗碼y(x)即可。正確答案為:d

例題2:

對於生成多項式g(x)=x^4+x^3+x^2+1,報文110產生的crc的過程如下:

(1)對於g(x)=x^4+x^3+x^2+1的解釋:(都是從右往左數)x4就是第五位是1,因為沒有x1所以第2位就是0。

將生成多項式g(x)=x^4+x^3+x^2+1轉換成對應的二進位制除數11101。

(2)此生成多項式有5位(r+1)(注意:5位的生成多項式計算所得的校驗碼為4位,r為校驗碼位數),要把原始報文左移 4(r)位變成110 0000

(3)用110 0000與11101進行模2除,相當於按位異或:

11101 | 110,0000

得到餘數:1001

所以crc碼是1001,傳輸碼為:110,1001

校驗碼 迴圈冗餘校驗碼

迴圈冗餘校驗碼,又稱crc碼。它利用生成多項式來為k個資料位產生r個校驗位來進行編碼。其編碼長度為k r。迴圈冗餘校驗碼由兩部分組成,左邊為資訊碼 資料 右邊為校驗碼,如下圖 若資訊碼佔k位,則校驗碼就佔n k位,其中,n為crc碼的字長,所以又稱為 n,k 碼。校驗碼位數越多,校驗能力越強。crc...

迴圈冗餘校驗碼

crc cyclic redundancy check 迴圈冗餘校驗碼 是常用的校驗碼,在早期的通訊中運用廣泛,因為早期的通訊技術不夠可靠 不可靠性的 是通訊技術決定的,比如電磁波通訊時受雷電等因素的影響 不可靠的通訊就會帶來 確認資訊 的困惑,書上提到紅軍和藍軍通訊聯合進攻山下的敵軍的例子,第一天...

迴圈冗餘校驗碼

crc碼是由兩部分組成,前部分是資訊碼,就是需要校驗的資訊,後部分是校驗碼,如果crc碼共長n個bit,資訊碼長k個bit,就稱為 n,k 碼。它的編碼規則是 將原資訊碼 kbit 左移r位 k r n 運用乙個生成多項式g x 也可看成二進位制數 用模2除上面的式子,得到的餘數就是校驗碼。非常簡單...