您好,欢迎访问三七文档
信息论与纠错编码实验报告实验二一、实验目的理解信道编码的原理,理解汉明码的基本原理与编码过程,利用程序实现汉明码编码,理解信道编码对可靠性的追求。二、实验内容1950年,汉明描述了构造最小距离为3的编码的一般方法,现在称为汉明码。对于任意i值,其方法能产生(2i-1)位的编码,其中包含i个校验位和2i-1-i个信息位。程序源码:#includeiostream#includectime#includecstdlibusingnamespacestd;#defineN4intmain(){intaa[10000];inti;intb[4][7]={{1,0,0,0,1,0,1},{0,1,0,0,1,1,1},{0,0,1,0,1,1,0},{0,0,0,1,0,1,1}};//定义生成矩阵inty=0,s=0;intj,k,m;inta[4],q[7],rr[10000/4*7];intp,D=0;intcc[2500],dd[2500];inte[8][7]={{1,0,0,0,0,0,0},{0,1,0,0,0,0,0},{0,0,1,0,0,0,0},{0,0,0,1,0,0,0},{0,0,0,0,1,0,0},{0,0,0,0,0,1,0},{0,0,0,0,0,0,1},{1,1,0,0,0,0,0}};//定义错误图样intw[10000/4*7];intH[7][3]={{1,0,1},{1,1,1},{1,1,0},{0,1,1},{1,0,0},{0,1,0},{0,0,1}};intA=0,M=0,L=8;intf[3];intww[10000/4*7];cout汉明码的编码与译码:endl;cout随机产生的二进制序列为:endl;srand((unsigned)time(NULL));//产生一个随机序列,并把它放入a[]中for(i=0;iN;i++){aa[i]=rand()%2;coutaa[i];}coutendlendl;;cout编码后为:\n;for(m=0;mN/4;m++){for(i=y;i(y+4);i++){a[i-y]=aa[i];}////取出4位出来for(j=0;j7;j++){q[j]=0;for(k=0;k4;k++)q[j]+=a[k]*b[k][j];/////与生成矩阵相乘}for(i=s;i(s+7);i++){rr[i]=0;rr[i]=q[i-s]%2;coutrr[i];////将生成的放入rr[]中}y=y+4;////向后移动4位s=s+7;////向后移动7位coutendlendl;}cout经过信道后变为:endl;srand((unsigned)time(NULL));for(j=0;jN/4;j++){cc[j]=rand()%100;////产生一个0~99的随机数if(cc[j]9)////当随机数小于9时,一个码字产生2个错误{for(i=D;i(D+7);i++){w[i]=0;w[i]=(rr[i]+e[7][i-D])%2;coutw[i];}}elseif((cc[j]=9)&&(cc[j]=30))///当随机数在9~30时,一个码字产生一个错误{dd[j]=rand()%7;p=dd[j];///随机产生一个0~6的数,以确定是码字一个错误的位置for(i=D;i(D+7);i++){w[i]=0;w[i]=(rr[i]+e[p][i-D])%2;coutw[i];}}else//////当随机数在30~99时,不发生错误{for(i=D;i(D+7);i++){w[i]=0;w[i]=rr[i];coutw[i];}}D=D+7;////向后移动7位coutcc[j]endl;/////进行跟踪,以确定码字错几位}coutendl译码后变为:endl;for(i=0;iN/4;i++){for(j=0;j3;j++){f[j]=0;for(k=A;kA+7;k++)f[j]+=w[k]*H[k-A][j];/////计算伴随式}for(m=0;m7;m++){for(j=0;j3;j++)if((f[j]%2)==H[m][j])M=M+1;if(M==3)L=m;M=0;//清零}////根据伴随式找到出错的位置for(m=0;m7;m++){if(m==L){ww[A+m]=(w[A+m]+1)%2;//将出错的地方更正coutww[A+m];}else{ww[A+m]=w[A+m];coutww[A+m];//没有出错的地方}}A=A+7;//向后移动7位L=8;//复位M=0;///清零,复位coutendl;}return0;}源码分析:其携带信息的位数由#defineN4定义为4位,当然你也可以进行修改。其基本算法是通过矩阵运算完成的。一个汉明码的系统码形式的矩阵和校验矩阵分别为1101000011010011100101010001G100101101011100010111H等价的编码方程为:Ci=mi,i=0,1,2,3C4=m0+m1+m2C5=m1+m2+m3C6=m0+m1+m3其首先确定最小的监督位数k,将它们记成D1、D2、…、Dk,每个监督位符合不同的奇偶测试规定。将原有信息和k个监督位一起编成长为m+k位的新码字。选择k监督位(0或1)以满足必要的奇偶条件。编码后的码字经过信道后会输出一个随机数范围为0~99。如果随机数小于9,表示有两个码字错误,随机数为9~30,表示一个码字产生错误,随机数为30~99时,表示不产生错误。接收方对所接收的信息作所需的k个奇偶检查。如果所有的奇偶检查结果均为正确的,则认为信息无错误。如果发现有一个或多个错了,则错误的位由这些检查的结果来唯一地确定。运行结果:其随机产生的4位信息位为0000,依据汉明码规则,其分组图如下所示:根据分组计算出校验位的值分别为1位:0,2位:0,4位为0。程序编码后的结果与人工得出的编码值一致。经过信道后,信号码字有两位出错,经过译码后为0011101,译码结果与原码字不一致,因为汉明码只能纠一位错,检两位错,程序运行结果与理论一致。4567231
本文标题:信息论与编码实验二
链接地址:https://www.777doc.com/doc-2693078 .html