版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、實驗名稱:漢明碼十三、實驗環(huán)境軟件環(huán)境: Windows 2000, Microsoft Visual C+6.0硬件環(huán)境:P4,2.4GHz,256內(nèi)存,IBM-PC及兼容機十四、實驗?zāi)康牧私鉂h明碼的編碼原理,糾錯原理,譯碼原理;給定漢明碼的監(jiān)督矩陣,能夠?qū)懗錾删仃?,能夠通過監(jiān)督矩陣或生成矩陣進行編碼,能夠通過監(jiān)督矩陣進行校碼與譯碼,會計算漢明碼的錯誤概率以及導(dǎo)出增余漢明碼等相關(guān)知識。十五、實驗內(nèi)容在Microsoft Visual c+6.0軟件環(huán)境下,編寫一個程序,使之實現(xiàn)漢明碼以及增余漢明碼的編碼、檢碼、譯碼過程。1、通過對書本的學(xué)習(xí),以及對課堂知識的掌握,了解漢明碼的糾錯原理,編寫
2、出漢明 碼的糾錯程序。2、基于漢明碼的編寫,進一步完成對檢碼譯碼及增余漢明碼的實現(xiàn)。3、實驗驗證程序的合理性,結(jié)果的正確性,和結(jié)構(gòu)的完善性。十六、實驗過程與實驗結(jié)果源程序:#in clude#in cludevstri ngusing n amespace std;#define Pe 0.0001class HMCodi ngprivate:int n ,k,r;漢明碼參數(shù)int i,j;用于指示循環(huán)次數(shù)int *H,*X,*G ,*check_code;stri ng *H_Colu mn ,*H_Colu mn _Z,code_str;int code_ nu m,code_ num_z
3、;public:void In itializi ng(i nt,i nt);void Show_H(i nt,i nt);void Get_G();void Show_G(i nt,i nt);void HM_Efficiency_Analysing();/*對漢明碼進行編碼效率分析*/int Bin ary_Str_Check(stri ng);void En codi ng(); 漢明碼編碼void En codi ng_Z();增余漢明碼編碼void Decodi ng(); 漢明碼譯碼void Decodi ng_Z();增余漢明碼譯碼void Get_H_Colum n();獲取漢
4、明碼監(jiān)督矩陣的每一列void Get_H_Colu mn _Z();/獲取增余漢明碼監(jiān)督矩陣的每一列void Get_Judge_Result();/獲取漢明碼校碼結(jié)果void Get_Judge_Result_Z();/獲取增余漢明碼校碼結(jié)果void Check in g(); 漢明碼校碼void Checki ng_Z();增余漢明碼校碼 void GOTO_HMCdi ng_Z();;HMCodi ng hmcodi ng; 全局變量初 始 化 模 塊/* */void HMCod in g:I nitializ in g(i nt _n ,i nt _k) 一 一n=_n;k=_k;r
5、=_n-_k;cout請給定(n ,k)漢明碼的監(jiān)督矩陣Hvvrvvvv nvv:ve ndl;H=new int *葉 1;/初始化(n,k)漢明碼監(jiān)督矩陣for(i=0;i r+1;i+)Hi=new intn+1;for(i=0;ir;i+)for(j=0;j Hij;/初始化增余項for(j=0;j n+1;j+)Hrj=1;for(i=0;ir;i+)Hi n=0;/為X分配存儲單元X=new intn+1;for(j=0;j n+1;j+)Xj=0;Get_H_Colum n();獲取監(jiān)督矩陣的每一列Get_H_Colum n_Z();進一步獲取增余監(jiān)督矩陣的每一列獲取監(jiān)督矩陣的每
6、一列,用于漢明碼校碼void HMCodi ng:Get_H_Colum n() 一 一stri ng temp;H_Column=new stri ngn+1;for(i=0;i n ;i+)temp=;for(j=0;jr;j+)if(!Hji) temp+=0;elsetemp+=1;H_Colu mn i=temp; _H_Colu mnn =000;獲取增余監(jiān)督矩陣的每一列,用于增余漢明碼校碼void HMCodi ng:Get_H_Colum n_Z() H_Colu mn_Z=new stri ngn+2;for(i=0;i n+1;i+)H_Colum n_Zi=H_Colum
7、 n i+1; H_Colu mn _Z n+1=0000;void HMCodi ng:Show_H(i nt x,i nt y) _for(i=0;ix;i+)for(j=0;jvy;j+)coutHij;coute ndl;void HMCod in g:Get_G()G=new int *k;for(i=0;ik;i+)Gi=new intn;for(i=0;ik;i+)for(j=0;jk;j+)if(i=j)Gij=1; elseGij=0;for(i=0;ir;i+)for(j=0;jk;j+)Gji+k=Hij;void HMCodi ng:Show_G(i nt x,i nt
8、 y)Get_G();for(i=0;ix;i+)for(j=0;jy;j+) coutGijvv coute ndl;void HMCodi ng:HM_Efficie ncy_A nalysi ng()e ndl;碼的cout對(*, k)漢明碼的評價如下: cout( vvnvv , vvkvvE=k/ n*100%=vvk*1.0/n*100v%vve ndl;cout( n , vvkvv)P=n*(n-1)*Pe*Pe= n*( n-1)*Pe*Pee ndl;/*/二進制序列合理性檢測int HMCodi ng:Bi nary_Str_Check(stri ng temp) 一
9、一int flag=1;/先假設(shè)輸入的消息串不含除0、1外的字符for(int i=0;tempi!=0;i+)if(!(tempi=0|tempi=1) flag=0; break; retur n flag;漢明碼編碼void HMCodi ng:E ncodi ng()A: stri ng bin ary_str;int flag;int binary_num=0;coutvv請輸入待編碼的二進制序列:bin ary_str;flag=Bi nary_Str_Check(bi nary_str);while(bi nary_strbi nary_nu m!=0)bin ary_num+;
10、/*統(tǒng)計輸入的二進制序列所含碼元個數(shù)*/if(binary_num%k!=O&flag)/*序列所含碼元個數(shù)不是 k的整數(shù)倍,無法 全部編碼*/coutvv您輸入的二進制序列存在冗余,請重新輸入!n;goto A;if(bi nary_num%k!=O&!flag) _coutvv您輸入的二進制序列存在冗余且含除0、1外的字符,請重新輸入!n;goto A;if(bi nary_num%k=0&!flag) _coutvv您輸入的二進制序列含除0、1外的字符,請重新輸入!n; goto A;code_str=;for(i=O;ib inary_nu m;i=i+k)for(j=O;jk;j+)
11、/* 獲取 k 位信息元 */if(bi nary_stri+j=O)Xj=O;elseXj=1;int temp;stri ng partial_str=;for(i nt t=O;t n;t+)/*用k位信息元組成的向量與生成矩陣作矩陣乘法,得到對應(yīng)n元碼組*/temp=O;for(j=O;jk;j+)temp+=Xj*Gjt;if(temp%2=O)partial_str+=O;elsepartial_str+=1;code_str+=partial_str; 一 一coutvv進行(vv*v, vvkvv)漢明碼編碼后的二進制序列為:n vcode_strvve ndl;計算機科學(xué)與工
12、程系竺增余漢明碼編碼void HMCodi ng:E ncodi ng_Z() _ code_str=;A_Z:stri ng bi nary_str;int flag;int binary_num=O;coutvv請輸入待編碼的二進制序列:bin ary_str;flag=Bi nary_Str_Check(bi nary_str);while(bi nary_strbi nary_nu m!=0)bin ary_num+;/*統(tǒng)計輸入的二進制序列所含碼元個數(shù)*/if(binary_num%k!=0&flag)/*序列所含碼元個數(shù)不是 k的整數(shù)倍,無法全部編碼*/coutvv您輸入的二進制序
13、列存在冗余,請重新輸入!n;goto A_Z; _if(bi nary_num%k!=O&!flag) _coutvv您輸入的二進制序列存在冗余且含除0、1外的字符,請重新輸入!n;goto A_Z; _if(bi nary_num%k=0&!flag)coutvv您輸入的二進制序列含除0、1外的字符,請重新輸入!n; goto A_Z;for(i=0;ivb inary_nu m;i=i+k) _for(j=0;jvk;j+)/* 獲取 k 位信息元 */if(bi nary_stri+j=0)Xj=0;elseXj=1;int temp;stri ng partial_str=;for(i
14、 nt t=0;tv n;t+)/*用k位信息元組成的向量與生成矩陣作矩陣乘法,得到對應(yīng)n元碼組*/ temp=O; for(j=0;jk;j+) temp+=Xj*Gjt; if(temp%2=0) partial_str+=O; Xj+k=O; else partial_str+=1; Xj+k=1;/生成增余漢明碼最后一位/監(jiān)督規(guī)則:對原漢明碼所有 n個碼元取模2和int sum=0;for(j=0;j n ;j+)sum+=Xj;if(sum%2=0)partial_str+=0;elsepartial_str+=1;code_str+=partial_str; 一 一cout進行(n
15、+1,k)增余漢明碼編碼后的二進制序列為:n code_stre ndl;/* 校 */利用漢明碼校碼void HMCodi ng:Checki ng()B: stri ng bi nary_str;int flag;int binary_num=0;coutvv請輸入待譯的二進制序列:bin ary_str;flag=Bi nary_Str_Check(bi nary_str);while(bi nary_strbi nary_nu m!=0)bin ary_num+;/*統(tǒng)計輸入的二進制序列所含碼元個數(shù)*/if(binary_num%n!=0&flag)/*序列所含碼元個數(shù)不是 n的整數(shù)倍
16、,無法 全部譯碼*/coutvv您輸入的二進制序列存在冗余,請重新輸入!n;goto B;if(bi nary_num% n!=0&!flag) _coutvv您輸入的二進制序列存在冗余且含除0、1外的字符,請重新輸入!n;goto B;if(bi nary_num% n=0&!flag)coutvv您輸入的二進制序列含除0、1外的字符,請重新輸入!n; goto B;code_num=binary_num/n;/統(tǒng)計 n 元碼組的個數(shù)check_code=new in t*code_ nu m;for(i=0;icode_ nu m;i+)check_codei=new in t n;for
17、(i=0;icode_ nu m;i+)/*每次取n個碼元進行校正*/for(j=0;j n;j+)check_codeij=b in ary_stri* n+j-0; 一 一 Get_Judge_Result(); 一 一利用增余漢明碼校碼void HMCodi ng:Checki ng_Z() _B_Z:stri ng bin ary_str;int flag;int binary_num=0;coutvv請輸入待譯的二進制序列:bin ary_str;flag=Bi nary_Str_Check(bi nary_str);while(bi nary_strbi nary_nu m!=0)
18、bin ary_num+;/*統(tǒng)計輸入的二進制序列所含碼元個數(shù)*/if(binary_num%(n+1)!=0&flag)/*序列所含碼元個數(shù)不是n+1的整數(shù)倍, 無法全部譯碼*/ -coutvv您輸入的二進制序列存在冗余,請重新輸入!n;goto B_Z; _if(bi nary_num%( n+1)!=0&! flag) _coutvv您輸入的二進制序列存在冗余且含除0、1外的字符,請重新輸入!n;goto B_Z; _if(bi nary_num%( n+1)=0&! flag) _coutvv您輸入的二進制序列含除0、1外的字符,請重新輸入!n;goto B_Z; _code_num_
19、z=binary_num/(n+1);/統(tǒng)計 n+1 元碼組的個數(shù)check_code=new in t*code_ nu m_z;for(i=0;icode_ nu m_z;i+)check_codei=new intn+2;for(i=0;icode_ nu m_z;i+)/*每次取n+1個碼元進行校正*/for(j=0;j n+1;j+)check_codeij=bi nary_stri*( n+1)+j-0; 一 一Get_Judge_Result_Z(); 一一一獲取漢明碼校碼結(jié)果void HMCodi ng:Get_Judge_Result() 一 一int temp;int fl
20、ag;stri ng partial_str;coutvv (vv*v, vvkvv)漢明碼校碼結(jié)果如下:endl;coutvv碼組狀態(tài)校正后vve ndl;for(i nt t=0;tvcode_ nu m;t+) _flag=0;partial_str=;for(i=0;ivr;i+)temp=0;for(j=0;j vn ;j+)temp+=Hij*check_codetj;if(temp%2=0)partial_str+=0;elsepartial_str+=1;/對partial_str進行判斷 for(i=0;i n+1;i+)if(H_Colu mn i=partial_str)
21、 一 一 flag=1;break;if(flag&in)表示第i個碼元出錯,將其改正for(j=0;j n ;j+)coutcheck_codetj;cout第i+1位錯,可糾正;check_codeti=(check_codeti+1)%2;/1 變 0, 0 變 1 for(j=0;j n ;j+)coutcheck_codetj;if(flag&i=n) 表示全對for(j=0;j n ;j+) coutcheck_codetj;cout全對;for(j=0;j n ;j+)coutcheck_codetj; _coute ndl;獲取增余漢明碼校碼結(jié)果void HMCodi ng:G
22、et_Judge_Result_Z() 一一一int temp;int flag;stri ng partial_str;cout( n+1,k)增余漢明碼校碼結(jié)果如下(注:*表示 無法識別的碼元):endl;cout碼組狀態(tài)校正后e ndl;for(i nt t=0;tcode_ nu m_z;t+)flag=0;partial_str=;for(i=0;i r+1;i+)temp=O; for(j=0;jv n+1;j+)temp+=Hij*check_codetj;if(temp%2=0)partial_str+=O;elsepartial_str+=1; _/對partial_str進
23、行判斷for(i=0;i n+2;i+)if(H_Colu mn _Zi=partial_str) 一flag=1;break;if(flag&in+1)表示第i個碼元出錯,將其改正check_codet n+1=1; 表示正確接收 for(j=0;j n+1;j+)coutcheck_codetj;cout第i+1位錯,可糾正check_codeti=(check_codeti+1)%2;/1 變 0, 0 變 1 for(j=0;j n+1;j+)coutcheck_codetj; _if(flag&i=n+1)/ 表示全對check_codet n+1=1; 表示正確接收 for(j=0
24、;j n+1;j+)coutcheck_codetj;cout全對;for(j=0;j n+1;j+)coutcheck_codetj; _if(!flag)check_codet n+1=0;表示兩位出錯并無法糾正 for(j=0;j n+1;j+)coutcheck_codetj;coutvv某兩位出錯,無法糾正;for(j=0;j n+1;j+)coutvv*;/*表示無法正確識別的碼元coute ndl;/*/利用漢明碼譯碼void HMCodi ng:Decodi ng()cout ( n, k)漢明碼譯碼結(jié)果為:endl; for(i=0;icode_ nu m;i+) _for(
25、j=0;jk;j+)coutcheck_codeij; coute ndl;利用增余漢明碼譯碼void HMCodi ng:Decodi ng_Z() _表示無coutvv( n+1vv,vvkvv)增余漢明碼譯碼結(jié)果為(注:* 法識別的碼元):endl;for(i=0;icode_ nu m_z;i+) 一 一 if(check_codei n+1=1) _for(j=0;jk;j+) coutcheck_codeij;else for(j=0;jk;j+) cout*; coute ndl;/*/void HMCodi ng:GOTO_HMCd in g_Z()char choice仁;c
26、outn *歡迎進入(n+1,k)增余漢明碼編碼/校碼/譯碼系統(tǒng)*n;coutvv由漢明監(jiān)督矩陣導(dǎo)出的增余監(jiān)督矩陣Hv葉1vvvv n+1為:endl;hmcod in g.Show_H(r+1, n+1);Z: cout (vvn+1,k)增余漢明 碼編碼/校碼/譯碼系統(tǒng)vvvvvvvvvvvvvvvvvvvvn;coutvvvvE.增余漢明碼編碼vvD.增余漢明碼校碼/譯碼vvR.返回vvQ.退出 choice1;if(choice 仁=E|choice1=e)/進行編碼hmcod in g.E ncod in g_Z();goto 乙else if(choice 1=D|choice1=
27、d)hmcod in g.Check in g_Z();hmcod in g.Decodi ng_Z();goto 乙else if(choice1=R|choice1=r)return;else if(choice1=Q|choice 1=q)/退出exit(0);else/如果選了選項之外的就讓用戶重新選擇coutvv您沒有輸入正確的步驟,請重新輸入!e ndl;goto 乙coutvve ndl;void mai n()char choice=;用于記錄初始化情況int flag=0;int n ,k;coutvn09計科二班信息論第二實驗小組小組成員:學(xué)號一一姓名e ndl;coutv
28、20091883coutv20091888cout20091908cout20091909cout20091911潘柳燕e ndl;李文超e ndl;周發(fā)洪e ndl; 吳針朋endl;張丹(組長)n;cout請輸入漢明碼的信息元個數(shù)k=;cin k;while(choice!=Q&choice!=q) 當(dāng) choice 的值不為 q 且不為 Q 時循環(huán) C: cout (vvnv,vvkv)漢明 碼編碼/校碼/譯碼系統(tǒng)vvvvvvvvvvvvvvvvvvvvn;coutvvvvl.輸入建立vvE.漢明碼編碼vvD.漢明碼校碼/譯碼n;coutvvZ.進入相應(yīng)的增余漢明碼系統(tǒng) choice;i
29、f(choice=T|choice=i) 初始化if(!flag)初次執(zhí)行初始化操作flag=1;hmcodi ng.ln itializi ng(n, k);coutvv您輸入的監(jiān)督矩陣 Hn-kvvv*為:endl; hmcodi ng.Show_H( n-k, n);coutvv該監(jiān)督矩陣對應(yīng)的生成矩陣 Gvkvvvvn 為:vve ndl;hmcodi ng.Show_G(k, n);hmcodi ng.HM_Efficie ncy_An alysi ng(); 一 一else if(choice=E|choice=e)/進行編碼if(!flag)coutvv操作錯誤!請執(zhí)行輸入建立操作后再進行本操作!vve ndl;goto C;hmcodi ng.E ncod in g();else if(choice=D|choice=d)/校 碼、譯碼if(!flag)cou
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 名師個人年度工作計劃模板范文
- 體育部部長工作計劃
- 汽車銷售工作計劃書范文
- 九年級下學(xué)期數(shù)學(xué)教學(xué)計劃
- 初中生如何做好學(xué)習(xí)計劃
- 2025年度工作計劃書范本
- 《外圍設(shè)備》課件
- 淺談新時期計劃生育服務(wù)管理改革的思考
- 小班第一學(xué)期班級教學(xué)計劃
- 合規(guī)管理審計合同模板
- 五年級上冊數(shù)學(xué)試題試卷(8篇)
- 中國慢性腎臟病早期評價與管理指南課件
- 2024-2025學(xué)年四年級科學(xué)上冊第三單元《運動和力》測試卷(教科版)
- 安全漏洞挖掘技術(shù)
- 賽碼網(wǎng)行測題題庫2024
- 中國血液透析用血管通路專家共識(全文)
- 10S507 建筑小區(qū)埋地塑料給水管道施工
- DL∕T 5028.4-2015 電力工程制圖標(biāo)準 第4部分:土建部分
- 2024年北京電子科技職業(yè)學(xué)院高職單招筆試歷年職業(yè)技能測驗典型例題與考點解析含答案
- DL5000-火力發(fā)電廠設(shè)計技術(shù)規(guī)程
- 八年級趣味數(shù)學(xué)100題
評論
0/150
提交評論