資源描述:
《CRC校驗(yàn)碼編碼實(shí)驗(yàn).doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、試驗(yàn)四CRC校驗(yàn)碼編碼實(shí)驗(yàn)試驗(yàn)報(bào)告實(shí)驗(yàn)四CRC校驗(yàn)碼編碼實(shí)驗(yàn)班級(jí):電子C073姓名:趙宣學(xué)號(hào):075584一、實(shí)驗(yàn)?zāi)康?、復(fù)習(xí)C++語(yǔ)言基本編寫(xiě)方法,熟悉面向?qū)ο缶幊谭椒ā?、學(xué)習(xí)CRC編碼基本流程,學(xué)會(huì)調(diào)試循環(huán)冗余校驗(yàn)碼編碼程序。3、根據(jù)給出資料,掌握CRC校驗(yàn)碼的編碼原理,重點(diǎn)掌握按字節(jié)(Byte)編碼方法二、實(shí)驗(yàn)內(nèi)容與原理(一)實(shí)驗(yàn)原理:1.CRC校驗(yàn)碼介紹CRC校驗(yàn)的基本思想是利用線性編碼理論,在發(fā)送端根據(jù)要傳送的k位二進(jìn)制碼序列,以一定的規(guī)則產(chǎn)生一個(gè)校驗(yàn)用的監(jiān)督碼(CRC碼)r位,并附在信息后邊,構(gòu)成一個(gè)新的二進(jìn)制碼序列數(shù)共(k+r)位,最后發(fā)送出去。在接收端,則根據(jù)
2、信息碼和CRC碼之間所遵循的規(guī)則進(jìn)行檢驗(yàn),以確定傳送中是否出錯(cuò)。16位的CRC碼產(chǎn)生的規(guī)則是先將要發(fā)送的二進(jìn)制序列數(shù)左移16位(乘以216)后,再除以一個(gè)多項(xiàng)式,最后所得到的余數(shù)既是CRC碼。求CRC碼所采用模2加減運(yùn)算法則,既是不帶進(jìn)位和借位的按位加減,這種加減運(yùn)算實(shí)際上就是邏輯上的異或運(yùn)算,加法和減法等價(jià),乘法和除法運(yùn)算與普通代數(shù)式的乘除法運(yùn)算是一樣,符合同樣的規(guī)律。接收方將接收到的二進(jìn)制序列數(shù)(包括信息碼和CRC碼)除以多項(xiàng)式,如果余數(shù)為0,則說(shuō)明傳輸中無(wú)錯(cuò)誤發(fā)生,否則說(shuō)明傳輸有誤。2.按位計(jì)算CRC一個(gè)二進(jìn)制序列數(shù)可以表示為求此二進(jìn)制序列數(shù)的CRC碼時(shí),先乘以216后(
3、左移16位),再除以多項(xiàng)式G(X),所得的余數(shù)就是所要求的CRC碼??梢栽O(shè):其中Qn(X)為整數(shù),Rn(X)為16位二進(jìn)制余數(shù),將上式代入前式得:再設(shè):其中Qn-1(X)為整數(shù),Rn-1(X)為16位二進(jìn)制余數(shù),繼續(xù)代入前式,多次迭代得到:根據(jù)CRC的定義,很顯然,十六位二進(jìn)制數(shù)R0(X)即是要求的CRC碼。3.按字節(jié)計(jì)算CRC對(duì)于一個(gè)二進(jìn)制序列數(shù)可以按字節(jié)表示為下式,其中Bn(X)為一個(gè)字節(jié)(共8位):第6頁(yè)共6頁(yè)試驗(yàn)四CRC校驗(yàn)碼編碼實(shí)驗(yàn)試驗(yàn)報(bào)告求此二進(jìn)制序列數(shù)的CRC碼時(shí),先乘以216后(左移16位),再除以多項(xiàng)式G(X),所得的余數(shù)即是所要求的CRC碼??梢栽O(shè):其中Qn
4、(X)為整數(shù),Rn(X)為16位二進(jìn)制余數(shù),將上式代入前式得:由于:其中RnH8(X)是Rn(X)的高八位,RnL8(X)是Rn(X)的低八位,代入前式得到:再設(shè):其中Qn-1(X)為整數(shù),Rn-1(X)為16位二進(jìn)制余數(shù),繼續(xù)代入前式,多次迭代得到:顯然,十六位二進(jìn)制數(shù)R0(X)即是要求的CRC碼。(二)實(shí)驗(yàn)內(nèi)容:1.根據(jù)實(shí)驗(yàn)原理掌握CRC校驗(yàn)碼編碼/解碼基本流程。2.在C++編譯器下能夠調(diào)試編碼算法每一個(gè)步驟,重點(diǎn)掌握按字節(jié)編碼的過(guò)程。三、實(shí)驗(yàn)儀器、設(shè)備1.計(jì)算機(jī)-系統(tǒng)最低配置256M內(nèi)存、P4CPU。2.C++編程軟件-VisualC++7.0(MicrosoftVisu
5、alStudio2003)VisualC++8.0(MicrosoftVisualStudio2005)四、實(shí)驗(yàn)步驟項(xiàng)目文件建立步驟同實(shí)驗(yàn)二,下面列出對(duì)給定字符串CRC校驗(yàn)主要步驟:步驟1:從主函數(shù)入口輸入一個(gè)字符串,并且確定按字節(jié)32位CRC校驗(yàn)編碼,編碼多項(xiàng)式采用CCITT標(biāo)準(zhǔn)形式多項(xiàng)式。步驟2:調(diào)用編碼函數(shù),依次讀入字符串每個(gè)自己,進(jìn)行模2除法運(yùn)算。步驟3:將原來(lái)字符串左移32位,將除法最后的余式追加到字符串的后32位中去,得到該字符串CRC校驗(yàn)編碼結(jié)果。步驟4:如果要解碼,首先確認(rèn)編碼多項(xiàng)式,然后將接收字符串除以編碼多項(xiàng)式。如果能夠整除,說(shuō)明字符串在傳輸或存儲(chǔ)中沒(méi)有發(fā)生
6、錯(cuò)誤;否則,表明字符串在傳輸或存儲(chǔ)中產(chǎn)生錯(cuò)誤,導(dǎo)致CRC校驗(yàn)失敗。五、實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析:第6頁(yè)共6頁(yè)試驗(yàn)四CRC校驗(yàn)碼編碼實(shí)驗(yàn)試驗(yàn)報(bào)告#include"stdafx.h"#include"CRC32.h"voidSlowCrc::PutByte(unsignedcharbyte){unsignedcharmask=0x80;//leftmostbitfor(intj=0;j<8;++j){PutBit((byte&mask)!=0);mask>>=1;}}voidSlowCrc::PutBit(boolbit){std::cout<7、t=(_register&0x80000000)!=0;//shiftbitintoregisterfromtheright_register<<=1;_register^=(bit?0x1:0x0);//ORorXOR,sameresultif(topBit){//XORthe32-bitsofthekey.//Theimplicithighbitofthe33-bitkeyconceptually//clearsthetopBitshiftedoutofthe第6頁(yè)共6頁(yè)試驗(yàn)四CRC校驗(yàn)