




免费预览已结束,剩余13页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机科学与工程系1、 实验名称:汉明码2、 实验环境软件环境:Windows 2000,Microsoft Visual C+6.0硬件环境:P4,2.4GHz,256内存,IBM-PC及兼容机3、 实验目的 了解汉明码的编码原理,纠错原理,译码原理;给定汉明码的监督矩阵,能够写出生成矩阵,能够通过监督矩阵或生成矩阵进行编码,能够通过监督矩阵进行校码与译码,会计算汉明码的错误概率以及导出增余汉明码等相关知识。4、 实验内容在Microsoft Visual c+ 6.0软件环境下,编写一个程序,使之实现汉明码以及增余汉明码的编码、检码、译码过程。1、通过对书本的学习,以及对课堂知识的掌握,了解汉明码的纠错原理,编写出汉明码的纠错程序。2、基于汉明码的编写,进一步完成对检码译码及增余汉明码的实现。3、实验验证程序的合理性,结果的正确性,和结构的完善性。5、 实验过程与实验结果源程序:#include#includeusing namespace std;#define Pe 0.0001class HMCodingprivate:int n,k,r;/汉明码参数int i,j;/用于指示循环次数int *H,*X,*G,*check_code;string *H_Column,*H_Column_Z,code_str;int code_num,code_num_z;public:void Initializing(int,int);void Show_H(int,int);void Get_G();void Show_G(int,int);void HM_Efficiency_Analysing();/*对汉明码进行编码效率分析*/int Binary_Str_Check(string);void Encoding();/汉明码编码void Encoding_Z();/增余汉明码编码void Decoding();/汉明码译码void Decoding_Z();/增余汉明码译码void Get_H_Column();/获取汉明码监督矩阵的每一列void Get_H_Column_Z();/获取增余汉明码监督矩阵的每一列void Get_Judge_Result();/获取汉明码校码结果void Get_Judge_Result_Z();/获取增余汉明码校码结果void Checking();/汉明码校码void Checking_Z();/增余汉明码校码void GOTO_HMCding_Z();HMCoding hmcoding;/全局变量/*初始化模块*/void HMCoding:Initializing(int _n,int _k)n=_n;k=_k;r=_n-_k;cout请给定(n,k)汉明码的监督矩阵Hrn:endl;H=new int *r+1;/初始化(n,k)汉明码监督矩阵for(i=0;ir+1;i+)Hi=new intn+1;for(i=0;ir;i+)for(j=0;jHij;/初始化增余项for(j=0;jn+1;j+)Hrj=1;for(i=0;ir;i+)Hin=0;/为X分配存储单元X=new intn+1;for(j=0;jn+1;j+)Xj=0;Get_H_Column();/获取监督矩阵的每一列Get_H_Column_Z();/进一步获取增余监督矩阵的每一列/获取监督矩阵的每一列,用于汉明码校码void HMCoding:Get_H_Column()string temp;H_Column=new stringn+1;for(i=0;in;i+)temp=;for(j=0;jr;j+)if(!Hji)temp+=0;elsetemp+=1;H_Columni=temp;H_Columnn=000;/获取增余监督矩阵的每一列,用于增余汉明码校码void HMCoding:Get_H_Column_Z()H_Column_Z=new stringn+2;for(i=0;in+1;i+)H_Column_Zi=H_Columni+1;H_Column_Zn+1=0000;void HMCoding:Show_H(int x,int y)for(i=0;ix;i+)for(j=0;jy;j+)coutHij ;coutendl;void HMCoding: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 HMCoding:Show_G(int x,int y)Get_G();for(i=0;ix;i+)for(j=0;jy;j+)coutGij ;coutendl;void HMCoding:HM_Efficiency_Analysing()cout对(n,k)汉明码的评价如下:endl;cout(n,k)汉明码的效率E=k/n*100%=k*1.0/n*100%endl;cout(n,k)汉明码的错误概率P=n*(n-1)*Pe*Pe=n*(n-1)*Pe*Peendl;/*编码模块*/二进制序列合理性检测int HMCoding:Binary_Str_Check(string temp)int flag=1;/先假设输入的消息串不含除0、1外的字符for(int i=0;tempi!=0;i+)if(!(tempi=0|tempi=1)flag=0;break;return flag;/汉明码编码void HMCoding:Encoding()A:string binary_str;int flag;int binary_num=0;cout请输入待编码的二进制序列:binary_str;flag=Binary_Str_Check(binary_str);while(binary_strbinary_num!=0)binary_num+;/*统计输入的二进制序列所含码元个数*/if(binary_num%k!=0&flag)/*序列所含码元个数不是k的整数倍,无法全部编码*/cout您输入的二进制序列存在冗余,请重新输入!n;goto A;if(binary_num%k!=0&!flag)cout您输入的二进制序列存在冗余且含除0、1外的字符,请重新输入!n;goto A;if(binary_num%k=0&!flag)cout您输入的二进制序列含除0、1外的字符,请重新输入!n;goto A;code_str=;for(i=0;ibinary_num;i=i+k)for(j=0;jk;j+)/*获取k位信息元*/if(binary_stri+j=0)Xj=0;elseXj=1;int temp;string partial_str=;for(int t=0;tn;t+)/*用k位信息元组成的向量与生成矩阵作矩阵乘法,得到对应n元码组*/temp=0;for(j=0;jk;j+)temp+=Xj*Gjt;if(temp%2=0)partial_str+=0;elsepartial_str+=1;code_str+=partial_str;cout进行(n,k)汉明码编码后的二进制序列为:ncode_strendl;/增余汉明码编码void HMCoding:Encoding_Z()code_str=;A_Z:string binary_str;int flag;int binary_num=0;cout请输入待编码的二进制序列:binary_str;flag=Binary_Str_Check(binary_str);while(binary_strbinary_num!=0)binary_num+;/*统计输入的二进制序列所含码元个数*/if(binary_num%k!=0&flag)/*序列所含码元个数不是k的整数倍,无法全部编码*/cout您输入的二进制序列存在冗余,请重新输入!n;goto A_Z;if(binary_num%k!=0&!flag)cout您输入的二进制序列存在冗余且含除0、1外的字符,请重新输入!n;goto A_Z;if(binary_num%k=0&!flag)cout您输入的二进制序列含除0、1外的字符,请重新输入!n;goto A_Z;for(i=0;ibinary_num;i=i+k)for(j=0;jk;j+)/*获取k位信息元*/if(binary_stri+j=0)Xj=0;elseXj=1;int temp;string partial_str=;for(int t=0;tn;t+)/*用k位信息元组成的向量与生成矩阵作矩阵乘法,得到对应n元码组*/temp=0;for(j=0;jk;j+)temp+=Xj*Gjt;if(temp%2=0)partial_str+=0;Xj+k=0;elsepartial_str+=1;Xj+k=1;/生成增余汉明码最后一位/监督规则:对原汉明码所有n个码元取模2和int sum=0;for(j=0;jn;j+)sum+=Xj;if(sum%2=0)partial_str+=0;elsepartial_str+=1;code_str+=partial_str;cout进行(n+1,k)增余汉明码编码后的二进制序列为:ncode_strendl;/*校码模块*/利用汉明码校码void HMCoding:Checking()B:string binary_str;int flag;int binary_num=0;cout请输入待译的二进制序列:binary_str;flag=Binary_Str_Check(binary_str);while(binary_strbinary_num!=0)binary_num+;/*统计输入的二进制序列所含码元个数*/if(binary_num%n!=0&flag)/*序列所含码元个数不是n的整数倍,无法全部译码*/cout您输入的二进制序列存在冗余,请重新输入!n;goto B;if(binary_num%n!=0&!flag)cout您输入的二进制序列存在冗余且含除0、1外的字符,请重新输入!n;goto B;if(binary_num%n=0&!flag)cout您输入的二进制序列含除0、1外的字符,请重新输入!n;goto B;code_num=binary_num/n;/统计n元码组的个数check_code=new int*code_num;for(i=0;icode_num;i+)check_codei=new intn;for(i=0;icode_num;i+)/*每次取n个码元进行校正*/for(j=0;jn;j+)check_codeij=binary_stri*n+j-0;Get_Judge_Result();/利用增余汉明码校码void HMCoding:Checking_Z()B_Z:string binary_str;int flag;int binary_num=0;cout请输入待译的二进制序列:binary_str;flag=Binary_Str_Check(binary_str);while(binary_strbinary_num!=0)binary_num+;/*统计输入的二进制序列所含码元个数*/if(binary_num%(n+1)!=0&flag)/*序列所含码元个数不是n+1的整数倍,无法全部译码*/cout您输入的二进制序列存在冗余,请重新输入!n;goto B_Z;if(binary_num%(n+1)!=0&!flag)cout您输入的二进制序列存在冗余且含除0、1外的字符,请重新输入!n;goto B_Z;if(binary_num%(n+1)=0&!flag)cout您输入的二进制序列含除0、1外的字符,请重新输入!n;goto B_Z;code_num_z=binary_num/(n+1);/统计n+1元码组的个数check_code=new int*code_num_z;for(i=0;icode_num_z;i+)check_codei=new intn+2;for(i=0;icode_num_z;i+)/*每次取n+1个码元进行校正*/for(j=0;jn+1;j+)check_codeij=binary_stri*(n+1)+j-0;Get_Judge_Result_Z();/获取汉明码校码结果void HMCoding:Get_Judge_Result()int temp;int flag;string partial_str;cout(n,k)汉明码校码结果如下:endl;cout码组 状态 校正后endl;for(int t=0;tcode_num;t+)flag=0;partial_str=;for(i=0;ir;i+)temp=0;for(j=0;jn;j+)temp+=Hij*check_codetj;if(temp%2=0)partial_str+=0;elsepartial_str+=1;/对partial_str进行判断for(i=0;in+1;i+)if(H_Columni=partial_str)flag=1;break;if(flag&in)/表示第i个码元出错,将其改正for(j=0;jn;j+)coutcheck_codetj;cout 第i+1位错,可纠正 ;check_codeti=(check_codeti+1)%2;/1变0,0变1for(j=0;jn;j+)coutcheck_codetj;if(flag&i=n)/表示全对for(j=0;jn;j+)coutcheck_codetj;cout 全对 ;for(j=0;jn;j+)coutcheck_codetj;coutendl;/获取增余汉明码校码结果void HMCoding:Get_Judge_Result_Z()int temp;int flag;string partial_str;cout(n+1,k)增余汉明码校码结果如下(注:* 表示无法识别的码元):endl;cout码组 状态 校正后endl;for(int t=0;tcode_num_z;t+)flag=0;partial_str=;for(i=0;ir+1;i+)temp=0;for(j=0;jn+1;j+)temp+=Hij*check_codetj;if(temp%2=0)partial_str+=0;elsepartial_str+=1;/对partial_str进行判断for(i=0;in+2;i+)if(H_Column_Zi=partial_str)flag=1;break;if(flag&in+1)/表示第i个码元出错,将其改正check_codetn+1=1;/表示正确接收for(j=0;jn+1;j+)coutcheck_codetj;cout 第i+1位错,可纠正 ;check_codeti=(check_codeti+1)%2;/1变0,0变1for(j=0;jn+1;j+)coutcheck_codetj;if(flag&i=n+1)/表示全对check_codetn+1=1;/表示正确接收for(j=0;jn+1;j+)coutcheck_codetj;cout 全对 ;for(j=0;jn+1;j+)coutcheck_codetj;if(!flag)check_codetn+1=0;/表示两位出错并无法纠正for(j=0;jn+1;j+)coutcheck_codetj;cout 某两位出错,无法纠正 ;for(j=0;jn+1;j+)cout*;/* 表示无法正确识别的码元coutendl;/*译码模块*/利用汉明码译码void HMCoding:Decoding()cout(n,k)汉明码译码结果为:endl;for(i=0;icode_num;i+)for(j=0;jk;j+)coutcheck_codeij;coutendl;/利用增余汉明码译码void HMCoding:Decoding_Z()cout(n+1,k)增余汉明码译码结果为(注:* 表示无法识别的码元):endl;for(i=0;icode_num_z;i+)if(check_codein+1=1)for(j=0;jk;j+)coutcheck_codeij;elsefor(j=0;jk;j+)cout*;coutendl;/*主函数*/void HMCoding:GOTO_HMCding_Z()char choice1= ;coutn *欢迎进入(n+1,k)增余汉明码编码/校码/译码系统*n;cout由汉明监督矩阵导出的增余监督矩阵Hr+1n+1为:endl;hmcoding.Show_H(r+1,n+1);Z:cout(n+1,k)增余汉明码编码/校码/译码系统n;cout E.增余汉明码编码 D.增余汉明码校码/译码 R.返回 Q.退出endl;coutchoice1;if(choice1=E|choice1=e)/进行编码hmcoding.Encoding_Z();goto Z;else if(choice1=D|choice1=d)hmcoding.Checking_Z();hmcoding.Decoding_Z();goto Z;else if(choice1=R|choice1=r)return;else if(choice1=Q|choice1=q)/退出 exit(0);else/如果选了选项之外的就让用户重新选择cout您没有输入正确的步骤,请重新输入!endl;goto Z;coutendl;void main()char choice= ;/用于记录初始化情况int flag=0;int n,k;coutn09计科二班信息论第二实验小组小组成员:学号姓名endl;cout20091883 潘柳燕endl;cout20091888 李文超endl;cout20091908 周发洪endl;cout20091909 吴针朋endl;cout20091911 张 丹(组长)endl;coutn *汉明码编码/校码/译码系统*n;coutn;coutk;while(choice!=Q&choice!=q)/当choice的值不为q且不为Q时循环C:cout(n,k)汉明码编码/校码/译码系统n; cout I.输入建立 E.汉明码编码 D.汉明码校码/译码n;cout Z.进入相应的增余汉明码系统 Q.退出n;coutchoice; if(choice=I|choice=i)/初始
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业互联网平台入侵检测系统智能化检测与响应优化
- 2025年文化娱乐产业消费者行为分析:市场细分与竞争策略001
- 2026届内蒙古喀喇沁旗锦山蒙古族中学化学高二上期中学业水平测试模拟试题含解析
- 现代诗歌批评性鉴赏课件
- 2025年高中地理教师资格证考试教育评价方法押题真题试卷
- 2026届河北省唐山市重点初中高二化学第一学期期末质量跟踪监视模拟试题含答案
- 2026届四川省广安遂宁资阳等六市化学高二上期末教学质量检测试题含答案
- 2026届陕西省延安市吴起县高级中学化学高三上期末综合测试试题含解析
- 眼睛科普问答题目及答案
- 2026届嘉峪关市重点中学化学高一第一学期期中学业水平测试模拟试题含解析
- 妇产科护理 课件06章-正常产褥期母婴的护理
- 2025年三类人员安全员C证继续教育题库带参考答案
- 蝴蝶的色彩课件
- 2022年江苏泰州泰兴市济川街道招聘劳动保障协理员6人笔试备考试题及答案解析
- 2025年《药品管理法》试题(附答案)
- 基孔肯雅热防控指南专题课件
- 2025年党建知识应知应会测试题库(附答案)
- 2025至2030中国人造土壤市场经营形势与未来发展方向研究报告
- 特种设备突发事件应急处置技术指南 第5部分:起重机械-地方标准
- 友邦资讯面试题目及答案
- 2025年社区工作者考试真题库及答案
评论
0/150
提交评论