與海明校驗(yàn)碼類似渺氧,CRC碼也是數(shù)據(jù)通訊中常用的校驗(yàn)方式愈捅。
CRC 算法的基本思想是將傳輸?shù)臄?shù)據(jù)當(dāng)做一個(gè)位數(shù)很長(zhǎng)的數(shù)。將這個(gè)數(shù)除以另一個(gè)數(shù)。得到的余數(shù)作為校驗(yàn)數(shù)據(jù)附加到原數(shù)據(jù)后面禾锤。
結(jié)構(gòu)
與海明校驗(yàn)碼數(shù)據(jù)位和校驗(yàn)位穿插不同,CRC碼中摹察,校驗(yàn)位(R位)在信息位(K位)后面
計(jì)算校驗(yàn)位
以一個(gè)題目為例:設(shè)待校驗(yàn)的數(shù)據(jù)為恩掷。D8~D1 = 10101011,若采用CRC供嚎,且生成多項(xiàng)式為 10011黄娘,則其 CRC 碼為:
這里首先要注意題目中的一個(gè)表述——“多項(xiàng)式”,該題目中寫作“10011”克滴,在有的題目中往往寫作“x^4+x+1”
首先逼争,在數(shù)據(jù)位后加多項(xiàng)式最高冪次個(gè)0,比如這里的多項(xiàng)式最高次項(xiàng)為x^4劝赔,那就在數(shù)據(jù)位后加四個(gè)0誓焦,變成:101010110000,作為被除數(shù)
然后着帽,將多項(xiàng)式 10011 作為除數(shù)進(jìn)行斷除杂伟。需要注意的是,圖中所框的部分仍翰,對(duì)應(yīng)位只做xor運(yùn)算赫粥,也就是做減法但不影響其他位
最后得到的余數(shù):1010,即是校驗(yàn)位予借。那么整個(gè)CRC碼為:10101011 1010
接收端校驗(yàn)
以上一節(jié)例題為例越平,假設(shè)收到的CRC碼變成了10001011 1010频蛔,第10位(右邊為低位)發(fā)生了錯(cuò)誤。
現(xiàn)在嘗試用CRC碼與多項(xiàng)式 10011 進(jìn)行短除:
得到余數(shù)為 1010(2) = 18+12 = 10(10) 喧笔,即第10位發(fā)生錯(cuò)誤帽驯,只需要反轉(zhuǎn)第10位的值,便可獲得正確的值