版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
循環(huán)冗余校驗碼的原理及應(yīng)用11crc簡介2crc原理3crc的實現(xiàn)4實現(xiàn)框圖
Content2循環(huán)冗余校驗碼crc冗余校驗碼是常用的校驗碼,在早期的通信中運用廣泛,因為早期的通信技術(shù)不夠可靠(不可靠性的來源是通信技術(shù)決定的,比如電磁波通信時受雷電等因素的影響),不可靠的通信就會帶來‘確認(rèn)信息’的困惑,書上提到紅軍和藍(lán)軍通信聯(lián)合進(jìn)攻山下的敵軍的例子,第一天紅軍發(fā)了條信息要藍(lán)軍第二天一起進(jìn)攻,藍(lán)軍收到之后,發(fā)一條確認(rèn)信息,但是藍(lán)軍擔(dān)心的是‘確認(rèn)信息’如果也不可靠而沒有成功到達(dá)紅軍那里,那自己不是很危險?于是紅軍再發(fā)一條‘對確認(rèn)的確認(rèn)信息’,但同樣的問題還是不能解決,紅軍仍然不敢貿(mào)然行動。對通信的可靠性檢查就需要‘校驗’,校驗是從數(shù)據(jù)本身進(jìn)行檢查,它依靠某種數(shù)學(xué)上約定的形式進(jìn)行檢查,校驗的結(jié)果是可靠或不可靠,如果可靠就對數(shù)據(jù)進(jìn)行處理,如果不可靠,就丟棄重發(fā)或者進(jìn)行修復(fù)。3明日正午進(jìn)攻,如何?同意收到“同意”收到:收到“同意”………………這樣的協(xié)議無法實現(xiàn)!4課件制作人:謝希仁tcrc的特點檢錯能力極強開銷很小易于實現(xiàn)應(yīng)用范圍廣zip,arj等壓縮軟件采用的是crc-32GIF,TIFF等圖像存儲格式所有鏈路層或網(wǎng)絡(luò)接口層協(xié)議中crc的特點5差錯檢測
crc校驗碼的應(yīng)用情況
在傳輸過程中可能會產(chǎn)生比特差錯:1可能會變成0而0也可能變成1。在一段時間內(nèi),傳輸錯誤的比特占所傳輸比特總數(shù)的比率稱為誤碼率
BER(BitErrorRate)。誤碼率與信噪比有很大的關(guān)系。為了保證數(shù)據(jù)傳輸?shù)目煽啃裕谟嬎銠C網(wǎng)絡(luò)傳輸數(shù)據(jù)時,必須采用各種差錯檢測措施。6crc產(chǎn)生背景傳播快速性傳播可靠性消息在傳播過程中,我們往往希望它傳播的迅速,又希望它的可靠性強,可是魚和熊掌不能兼得,這兩個條件要同時實現(xiàn)又有點困難,怎么解決呢?于是........pk采用差錯控制crc產(chǎn)生啦!crc產(chǎn)生啦!7編碼規(guī)則相除運用一個生成多項式g(x)(也可看成二進(jìn)制數(shù))用模2除上面的式子,得到的余數(shù)就是校驗碼.有了加減法就可以用來定義模2除法,于是就可以用生成多項式g(x)生成CRC校驗碼。移位將原信息碼(kbit)左移r位(k+r=n)生成多項式應(yīng)滿足以下原則a、生成多項式的最高位和最低位必須為1。b、當(dāng)被傳送信息(CRC碼)任何一位發(fā)生錯誤時,被生成多項式做模2除后應(yīng)該使余數(shù)不為0。c、不同位發(fā)生錯誤時,應(yīng)該使余數(shù)不同。d、對余數(shù)繼續(xù)做模2除,應(yīng)使余數(shù)循環(huán)。8循環(huán)冗余檢驗的原理在發(fā)送端,先把數(shù)據(jù)劃分為組。假定每組k個比特。在數(shù)據(jù)鏈路層傳送的信息中,廣泛使用了循環(huán)冗余檢驗CRC的檢錯技術(shù)。假設(shè)待傳送的一組數(shù)據(jù)M=101001(現(xiàn)在k=6)。我們在M的后面再添加供差錯檢測用的n
位冗余碼一起發(fā)送。9
多項式除法循環(huán)冗余檢驗的原理說明舉例11010110110000被除數(shù)10011
110000101010011100111001110110100111010010011
1110余數(shù)商數(shù)除數(shù)模2加=模2減模2乘模2除=乘的可逆運算10接收端對收到的每條信息進(jìn)行CRC檢驗(1)若得出的余數(shù)R=0,則判定這個信息沒有差錯,就接受(accept)。(2)若余數(shù)R
0,則判定這個信息有差錯,就丟棄。但這種檢測方法并不能確定究竟是哪一個或哪幾個比特出現(xiàn)了差錯。只要經(jīng)過嚴(yán)格的挑選,并使用位數(shù)足夠多的除數(shù)P,那么出現(xiàn)檢測不到的差錯的概率就很小很小。11冗余碼的計算舉例現(xiàn)在
k=6,M=101001。設(shè)
n=3,除數(shù)
P=1101,被除數(shù)是2nM=101001000。模2運算的結(jié)果是:商
Q=110101,
余數(shù)
R=001。把余數(shù)R作為冗余碼添加在數(shù)據(jù)M的后面發(fā)送出去。發(fā)送的數(shù)據(jù)是:2nM+R
即:101001001,共(k+n)位。122.“無差錯接受”是指:“凡是接受的信息(即不包括丟棄的信息),我們都能以非常接近于1的概率認(rèn)為這些信息在傳輸過程中沒有產(chǎn)生差錯3.也就是說:“凡是接收端接受的信息都沒有傳輸差錯”(有差錯的信息就丟棄而不接受)。4.要做到“可靠傳輸”(即發(fā)送什么就收到什么)就必須再加上確認(rèn)和重傳機制。1.僅用循環(huán)冗余檢驗CRC差錯檢測技術(shù)只能做到無差錯接受(accept)。attention
13#include<stdio.h>#include<string.h>#include<stdlib.h>#include<iostream>usingnamespacestd;#definen150#definem2*n-1#defineMAX_SIZE1000000intss[1000];typedefstruct{ charch; intweight; intlchild,rchild,parent;}HuffmanTree;typedefHuffmanTreeHTree[m];typedefstruct{ charch; intstart; charbits[n+1];}HuffmanCode;typedefHuffmanCodeHCode[n];intFileRead(intcount[],chars[],charfilename[]){inti=0,N=0,k=0,temp[n];charc;FILE*rf;rf=fopen(filename,"r");if(rf==NULL){printf("cannotopenfile\n");
exit(0);}for(i=0;i<n;i++)
s[N]=i;count[N]=temp[i];N++;}}returnN;}voidCreateHuffmanTree(HTreeT,intN,intcount[],chars[]){inti,j,p1=0,p2=0,l1,l2; for(i=0;i<N;i++) { T[i].ch=s[i]; }for(i=0;i<2*N-1;i++){T[i].lchild=0;T[i].rchild=0;T[i].parent=0;}for(i=0;i<N;i++)T[i].weight=count[i];for(i=N;i<2*N-1;i++){l1=l2=1000000;for(j=0;j<i;j++){if(T[j].parent==0){if(T[j].weight<l1){l1=T[j].weight;p1=j;}
實現(xiàn)代碼14
}}for(j=0;j<i;j++){if(T[j].parent==0){if((T[j].weight<l2)&&(j!=p1)){l2=T[j].weight;p2=j;}}}T[p1].parent=i;T[p2].parent=i;T[i].lchild=p1;T[i].rchild=p2;T[i].weight=T[p1].weight+T[p2].weight;}T[2*N-2].parent=0;}voidHuffmanCoding(HTreeT,HCodeH,intN,chars[]){ intc,p,i,start; char*cd=newchar[N+1];//cd[n+1]; cd[N]='\0'; inttemp=0; for(i=0;i<N;i++) {H[i].ch=s[i]; start=N; c=i;p=T[c].parent;while(p){
temp++;if(T[p].lchild==c)cd[--start]='0';elsecd[--start]='1';c=p;p=T[p].parent;H[i].start=start; //cout<<"cd---"<<cd[start]<<endl;} for(intj=0;j<temp;j++) { H[i].bits[j]=cd[start++]; } temp=0;
//cout<<H[i].bits<<"++++++"<<endl;//strcpy(H[i].bits,&cd[start]);} deletecd;}voidFilePrint(HTreeT,HCodeH,intN){ inti,j=0; FILE*fp,*rp,*rf; rf=fopen("HuffmanCode.txt","w"); fp=fopen("Char.txt","w"); rp=fopen("Weight.txt","w"); while(j<N) {//for(i=H[j].start;i<N;i++) //{ fprintf(rf,"%s",H[j].bits); //}fprintf(rf,"\n");j++;}15for(i=0;i<N;i++)fputc(H[i].ch,fp); for(i=0;i<N;i++)fprintf(rp,"%d\n",T[i].weight); fclose(rf); fclose(fp); fclose(rp);}intcrc(intt)//生成系統(tǒng)冗余校驗碼{ intk; intg=0x13;//這里生成多項式使是4次10011 //cin>>t;//輸入的信息碼是6位,如果要更長,修改下l字g=g<<5;for(;i<6;)if(t<0x200)t=t>>6; t=t<<4; k=t; g=g<<3; inti=0; for(;i<4;) { if(t<0x80)//表示首位為0,所要繼續(xù)移動
{ t=t<<1; i++; } else t=t^g;//做模二運算
} t=t>>4; k=k^t; returnk;}inttest(intk,intg)//測試部分判斷生成碼是否正確{ intresult=0; g=g<<3;
intj=5; while(j) { if(k>0x80) { k=k^g; } k=k<<1; if(!k) { break; } j--; }if(j!=0) { //cout<<"sucess"<<"余數(shù)\t"<<k<<endl; } else { //cout<<"fail"<<endl; result=1; } returnresult;}voidfile(intss[],intxx){ FILE*rf; intx; intg=0x13; x=xx; rf=fopen("crc.txt","wb");
16for(inti=0;i<xx;i++) { fputc(ss[i],rf); } fclose(rf); }intFileWrite(HCodeH,intN,charfilename[]){ inti,k,p=0; intt=0;//存放數(shù)值
//intm=0; charc; intcc=0; intsign=0; FILE*rf,*fp; rf=fopen(filename,"r"); fp=fopen("File.txt","w"); if(rf==NULL) {printf("cannotopenfile\n\n");exit(0);
} intxx=0; while(!feof(rf)) {c=fgetc(rf); intxxx;for(i=0;i<N;i++) { xxx=0;if(H[i].ch==c) {for(k=H[i].start;k<N;k++)
{ //fputc(H[i].bits[k],fp); fprintf(fp,"%c",H[i].bits[xxx]); sign=1;p++; if(H[i].bits[xxx]=='1') t=2*t+1; else t=2*t;if(p==4) {fprintf(fp,"");p=0; //cout<<"t="<<t<<"\t"<<endl; ss[cc++]=crc(t); //cout<<"ss==\t"<<crc(t)<<endl; t=0; xx++; sign=0; }xxx++; } }}} if(sign==1) { ss[cc++]=crc(t); xx++; } file(ss,xx); returnxx; fclose(rf); fclose(fp);17}intFileRead(HTreeT,HCodeH){inti=0,j=0,N=0;charc,*p;charstr[MAX_SIZE];FILE*rf,*fp,*rp;rf=fopen("Char.txt","r"); fp=fopen("HuffmanCode.txt","r");rp=fopen("Weight.txt","r");if(rf==NULL){printf("cannotopenfile\n");exit(0);}if(fp==NULL){printf("cannotopenfile\n");exit(0);}if(rp==NULL){printf("cannotopenfile\n");exit(0);}while(!feof(rf)){H[N].ch=fgetc(rf);T[N].ch=H[N].ch;N++;}while(!feof(fp)){c=fgetc(fp);switch(c)
{case'\n':i++;j=0;break;default:H[i].bits[j]=c;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小班面粉生成課程設(shè)計
- 智慧交通大數(shù)據(jù)課程設(shè)計
- 粘土創(chuàng)意課程設(shè)計
- 投資估算的課程設(shè)計
- 紅外計數(shù)器課程設(shè)計
- 瓶裝水生產(chǎn)線自動化改造與升級考核試卷
- 畜牧業(yè)廢棄物資源化利用與農(nóng)村能源建設(shè)考核試卷
- 理財大師的智慧金融知識科普與投資策略考核試卷
- 固體廢物處理與環(huán)境保護法規(guī)考核試卷
- 2024年度廣西壯族自治區(qū)國家保安員資格考試題庫附答案(基礎(chǔ)題)
- 特種設(shè)備使用管理新版規(guī)則
- 中國礦業(yè)權(quán)評估準(zhǔn)則(2011年)
- 人教部編本八年級語文上冊第六單元復(fù)習(xí)課件共26張
- 事業(yè)單位年度考核方案
- 2024年土地管理法
- 醫(yī)學(xué)統(tǒng)計學(xué):醫(yī)學(xué)統(tǒng)計學(xué)課后習(xí)題答案
- 框架玻璃幕墻施工工藝
- 2024年福建省投資開發(fā)集團有限責(zé)任公司招聘筆試參考題庫含答案解析
- 《水產(chǎn)種質(zhì)資源保護區(qū)生態(tài)功能評估方法》
- 韻達(dá)云倉方案
- 23秋國家開放大學(xué)《法律職業(yè)倫理》形考任務(wù)1-3參考答案
評論
0/150
提交評論