汉明码卷积码实验-

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第1页共21页天津理工大学实验报告学院(系)名称:计算机与通信工程学院姓名马生琴学号20135680专业信息与计算科学班级2013级1班实验项目抗干扰信道编码、译码课程名称信息论基础课程代码0665066实验时间2015年12月14日3、4节实验地点7号楼219批改意见成绩教师签字:实验目的:1、使用编程软件进汉明码码编译器的代码编写、运行、仿真等操作。2、使用编程软件进行卷积码编译器的代码编写、运行、仿真等操作。3、熟练掌握相关软件、语句。4、理解汉明码编译及卷积码编解码器的原理、知识汉明码实验原理:在随机信道中,错码的出现是随机的,且错码之间是统计独立的。例如,由高斯白噪声引起的错码就具有这种性质。因此,当信道中加性干扰主要是这种噪声时,就称这种信道为随机信道。由于信息码元序列是一种随机序列,接收端是无法预知的,也无法识别其中有无错码。为了解决这个问题,可以由发送端的信道编码器在信息码元序列中增加一些监督码元。这些监督码元和信息码元之间有一定的关系,使接收端可以利用这种关系由信道译码器来发现或纠正可能存在的错码。在信息码元序列中加入监督码元就称为差错控制编码,有时也称为纠错编码。不同的编码方法有不同的检错或纠错能力。有的编码就只能检错不能纠错。汉明码是一种能够纠正一位错码且编码效率较高的线性分组码。汉明码是一种多重(复式)奇偶检错系统。它将信息用逻辑形式编码,以便能够检错和纠错。用在汉明码中的全部传输码字是由原来的信息和附加的奇偶监督位组成的。每一个这种奇偶位被编在传输码字的特定比特位置上。推导并使用长度为m位的码字的汉明码,所需步骤如下:1、确定最小的监督位数k,将它们记成D1、D2、…、Dk,每个监督位符合不同的奇偶测试规定。2、原有信息和k个监督位一起编成长为m+k位的新码字。选择k监督位(0或1)以满足必要的奇偶条件。3、对所接收的信息作所需的k个奇偶检查。4、如果所有的奇偶检查结果均为正确的,则认为信息无错误。如果发现有一个或多个错了,则错误的位由这些检查的结果来唯一地确定。卷积码实验原理:卷积码将k个信息比特编成n个比特,但k和n通常很小,特别适合以串行形式进行传输,时延小。与分组码不同,卷积码编码后的n个码元不仅与当前段的k个信息有关,还与前面的N-1段信息有关,编码过程中互相关联的码元个数为nN。卷积码的纠错性能随N的增加而增大,而差错率随N的增加而指数下降。汉明码程序编写:#includeiostream第2页共21页#includestringusingnamespacestd;#definePe0.0001classHMCoding{private:intn,k,r;//汉明码参数inti,j;//用于指示循环次数int**H,*X,**G,**check_code;string*H_Column,*H_Column_Z,code_str;intcode_num,code_num_z;public:voidInitializing(int,int);voidShow_H(int,int);voidGet_G();voidShow_G(int,int);voidHM_Efficiency_Analysing();/*对汉明码进行编码效率分析*/intBinary_Str_Check(string);voidEncoding();//汉明码编码voidEncoding_Z();//增余汉明码编码voidDecoding();//汉明码译码voidDecoding_Z();//增余汉明码译码voidGet_H_Column();//获取汉明码监督矩阵的每一列voidGet_H_Column_Z();//获取增余汉明码监督矩阵的每一列voidGet_Judge_Result();//获取汉明码校码结果voidGet_Judge_Result_Z();//获取增余汉明码校码结果voidChecking();//汉明码校码voidChecking_Z();//增余汉明码校码voidGOTO_HMCding_Z();};HMCodinghmcoding;//全局变量voidHMCoding::Initializing(int_n,int_k){n=_n;k=_k;r=_n-_k;cout\t\t\t请给定(n,k)汉明码的监督矩阵H[r][n]:endl;H=newint*[r+1];for(i=0;ir+1;i++)H[i]=newint[n+1];for(i=0;ir;i++)for(j=0;jn;j++)cinH[i][j];//初始化增余项for(j=0;jn+1;j++)H[r][j]=1;for(i=0;ir;i++)H[i][n]=0;//为X分配存储单元X=newint[n+1];for(j=0;jn+1;j++)X[j]=0;Get_H_Column();//获取监督矩阵的每一列Get_H_Column_Z();//进一步获取增余监督矩阵的每一列}voidHMCoding::Get_H_Column()第3页共21页{stringtemp;H_Column=newstring[n+1];for(i=0;in;i++){temp=;for(j=0;jr;j++){if(!H[j][i])temp+='0';elsetemp+='1';}H_Column[i]=temp;}H_Column[n]=000;}//获取增余监督矩阵的每一列,用于增余汉明码校码voidHMCoding::Get_H_Column_Z(){H_Column_Z=newstring[n+2];for(i=0;in+1;i++)H_Column_Z[i]=H_Column[i]+'1';H_Column_Z[n+1]=0000;}voidHMCoding::Show_H(intx,inty){for(i=0;ix;i++){for(j=0;jy;j++)coutH[i][j];coutendl;}}voidHMCoding::Get_G(){G=newint*[k];for(i=0;ik;i++)G[i]=newint[n];for(i=0;ik;i++)for(j=0;jk;j++){if(i==j)G[i][j]=1;elseG[i][j]=0;}for(i=0;ir;i++)for(j=0;jk;j++)G[j][i+k]=H[i][j];}voidHMCoding::Show_G(intx,inty){Get_G();for(i=0;ix;i++){for(j=0;jy;j++)coutG[i][j];coutendl;}}voidHMCoding::HM_Efficiency_Analysing(){cout\t\t\t对(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;}/*********************************编码模块*********************************///二进制序第4页共21页列合理性检测intHMCoding::Binary_Str_Check(stringtemp){intflag=1;//先假设输入的消息串不含除0、1外的字符for(inti=0;temp[i]!='\0';i++){if(!(temp[i]=='0'||temp[i]=='1')){flag=0;break;}}returnflag;}//汉明码编码voidHMCoding::Encoding(){A:stringbinary_str;intflag;intbinary_num=0;cout请输入待编码的二进制序列:endl;cinbinary_str;flag=Binary_Str_Check(binary_str);while(binary_str[binary_num]!='\0')binary_num++;/*统计输入的二进制序列所含码元个数*/if(binary_num%k!=0&&flag)/*序列所含码元个数不是k的整数倍,无法全部编码*/{cout您输入的二进制序列存在冗余,请重新输入!\n;gotoA;}if(binary_num%k!=0&&!flag){cout您输入的二进制序列存在冗余且含除0、1外的字符,请重新输入!\n;gotoA;}if(binary_num%k==0&&!flag){cout您输入的二进制序列含除0、1外的字符,请重新输入!\n;gotoA;}code_str=;for(i=0;ibinary_num;i=i+k){for(j=0;jk;j++)/*获取k位信息元*/{if(binary_str[i+j]=='0')X[j]=0;elseX[j]=1;}inttemp;stringpartial_str=;for(intt=0;tn;t++){/*用k位信息元组成的向量与生成矩阵作矩阵乘法,得到对应n元码组*/temp=0;for(j=0;jk;j++)temp+=X[j]*G[j][t];if(temp%2==0)partial_str+='0';elsepartial_str+='1';}code_str+=partial_str;}cout\t\t\t进行(n,k)汉明码编码后的二进制序列为:\ncode_strendl;}//增余汉明码编码voidHMCoding::Encoding_Z(){code_str=;A_Z:stringbinary_str;第5页共21页intflag;intbinary_num=0;cout请输入待编码的二进制序列:endl;cinbinary_str;flag=Binary_Str_Check(binary_str);while(binary_str[binary_num]!='\0')binary_num++;/*统计输入的二进制序列所含码元个数*/if(binary_num%k!=0&&flag)/*序列所含码元个数不是k的整数倍,无法全部编码*/{cout输入的二进制序列存在冗余,请重新输入!\n;gotoA_Z;}if(binary_num%k!=0&&!flag){cout输入的二进制序列存在冗余且含除0、1外的字符,请重新输入!\n;gotoA_Z;}if(binary_num%k==0&&!flag){cout输入的二进制序列含除0、1外的字符,请重新输入!\n;gotoA_Z;}for(i=0;ibinary_num;i=i+k){for(j=0;jk;j++)/*获取k位信息元*/{if(binary_str[i+j]=='0')X[j]=0;elseX[j]=1;}inttemp;stringpartial_str=;for(intt=0;tn;t++){/*用k位信息元组成的向量与生成矩阵作矩阵乘法,得到对应n元码组*/temp=0;for(j=0;jk;j++)temp+=X[j]*G[j][t];if(temp%2==0){partial_str+='0';X[j+k]=0;}else{partial_str+='1';X[j+k]=1;}}//生成增余汉明码最后一位//监督规则:对原汉明码所有n个码元取模2和intsum=0;for(j=0;jn;j++)sum+=X[j];if(sum%2==0)partial_str+='0';elsepartial_str+='1';code_str+=pa

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功