《2023年汉明码编码译码实验报告信息论与编码及源程序.docx》由会员分享,可在线阅读,更多相关《2023年汉明码编码译码实验报告信息论与编码及源程序.docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1、原理与环节在随机信道中,错码的出现是随机的,且错码之间是记录独立的。例如,由高斯白噪声引起的错码 就具有这种性质。因此,当信道中加性干扰重要是这种噪声时,就称这种信道为随机信道。由于信息码 元序列是一种随机序列,接受端是无法预知的,也无法辨认其中有无错码。为了解决这个问题,可以由发 送端的信道编码器在信息码元序列中增长一些监督码元。这些监督码元和信息码元之间有一定的关系, 使接受端可以运用这种关系由信道译码器来发现或纠正也许存在的错码。在信息码元序列中加入监督 码元就称为差错控制编码,有时也称为纠错编码。不同的编码方法有不同的检错或纠错能力。有的编码 就只能检错不能纠错。汉明码是一种可以纠
2、正一位错码且编码效率较高的线性分组码。汉明码是一种多重(复式)奇偶检错系统。它将信息用逻辑形式编码,以便可以检错和纠错。用在 汉明码中的所有传输码字是由本来的信息和附加的奇偶监督位组成的。每一个这种奇偶位被编在传输 码字的特定比特位置上。推导并使用长度为m位的码字的汉明码,所需环节如下:1、拟定最小的监督位数k,将它们记成DI、D2、Dk,每个监督位符合不同的奇偶测试规定。2、原有信息和k个监督位一起编成长为m + k位的新码字。选择k监督位(0或1)以满足必要的 奇偶条件。3、对所接受的信息作所需的k个奇偶检查。4、假如所有的奇偶检查结果均为对的的,则认为信息无错误。假如发现有一个或多个错了
3、,则错误的位由这些检查的结果来唯一地拟定。2、算法描述一个二元(7, 4)汉明码的系统码形式的矩阵和校验矩阵分别为1000 10111 1 010 0G= 0 1 00 1 11H= 0 11 1 01 0001 0110001 01101 1 0 10 0100 01 011等价的编码方程为G = m . i=0, 1 ,2,3C4=m0+mi+m2Cs=mi+m2+mC6=m0+mi+m33、源程序及注释vo i d main() in t aa 1 00 0 0;inti;o i n t N;int b 7 = 1,0, 0,0,1,0,1, 1。0,0,1,0, 1,1,0, 0, 0
4、,0,1,0 ,1, 1 ;定义生成矩阵int y =0,s=0;int j , k , m;int a 4, q 7, rr100 0 0/4* 7 ;int p ,D = 0;。i nt cc 2 500,dd 2 500;inte8 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,00 0); 定义错误图样int w10 0 0 0/4* 7 ;in t H7 3 = 1,0 ,
5、 1 , 1 , 1 ,1, 1 ,1, 0 ,。1, 1, 1 ,0,0,0, 1,0 , 0,0,1);int A=0,M=0,L=8;,int f 3;int ww100 0 0/4*7;printf(汉明(7,4)码的编码与译码程序:n”);pri n tf (请输入你想产生的二进制个数:);s c a nf ( %d,&N);输入想产生的信源的个数while(N4)(P rint f (输入无效,请重新输入);print f (请输入你想产生的二进制个数:*,);scanf ( ” %d”,&N);)pri ntf(随机产生的二进制序列为:n“);s rand ( (unsigned
6、) t i m e ( N U L L );产生一个随机序列,并把它放入a 口中efo r (i= 0 ;iN; i+ + )a a i = r a n d ()% 2 ;prin t f(%dza a i);oprintf (n );o printf (编码后变为:n”);编码生成码字for(m=0; mN/4: m+)。 for(i= y ; i (y+4) ;i+)66a i -y = aai;/取出4位出来for (j=0; j 7; j +)。q 口= 0;。 for (k=0; k4;k+)。q j+=ak*b k Jj;/ / 与生成矩阵相乘0 0 0f or (i=s; i (
7、s+7) ;i+)。 r r i =0;。r ri= q i -s %2;-p rintf (%d , r ri);将生成的放入 rr中0 0 )y=y+4;向后移动4位s =s+ 7; /向后移动7位p rin t f (n);)p r intf(通过信道后变为:n );s r a n d( (un s igned)time ( N ULL);f o r(j=O: jN / 4;j+)ccj = rand()%100;/ /产生一个 09 9 的随机数i f( c cj9) / / / /当随机数小于9时,一个码字产生2个错误f o r( i =D;i= 9)& (ccj=3 0 )/当随机
8、数在930时,一个码字产生一个错误。dd j = r and()%7;P = dd j:/随机产生一个06的数,以拟定是码字一个错误的位置for(i= D;i(D+7); i +)o。wi=0;。 w i = ( r r i +e p i-D) %2;o p rintf (”%d”,wi); )else/ / 当随机数在3099时,不发生错误af o r (i=D;i(D+ 7 ) ;i+)。 w i =0;wi=rri;P r i ntf(%d, wi ); 。D=D+ 7 ;/ /向后移动7位print f(%6d,cc j );/进行跟踪,以拟定码字错几位pr i ntf( n);)P
9、r intf(通过译码后变为: n );for(i= 0 ; i N/4; i +) f or(j = 0;j3;j+)。f j =0;。 f o r( k =A;k A+7水+)-f j+=wk*Hk-A皿/计算随着式for (m=0;m7;m+)for (j=0;j3;j+)。if (f j%2)=Hmj )M=M+1;if(M=3) L=m ;。M=0;清零/根据随着式找到犯错的位置for(m=0; m7;m + + )。 if (m= = L)。wwA + m=(wA +m +1) %2;将犯错的地方更正p r i ntf(”%d”,wwA+m):8 )else。wwA+m= w A+
10、 m;P rintf( %d, ww(A+m);没有犯错的地方)A=A+7;向后移动7位L=8; 复位M=0;/清零,复位pri n t f ( n );)4、运营输出结果实例SB D:C语习Debugcppl.exe汉明7, 4码的编码与译码程序: 请输入你想产生的二进制个数:4 随机产生的二进制序列为:1010解码后变为:010110匿过信道后变为:01011110度过译码后变为:010110ress any key to continueress any key to continue5、实验总结这次的实验是实现汉明码的编码与译码,达成纠错功能。通过信息论的课程,我基本了解了汉明码 编译
11、的原理和方法,但在编程的过程中碰到了不小的困难。一方面还是理解汉明码概念的问题,由于还 存在纠错的功能,所以汉明码的编码方式和以前学的哈夫曼编码或Fano编码比起来要复杂不少,开始的 时候理解起来有些困难。但是通过仔细看PPT,不久就弄懂了汉明码的原理。但是最开始编出来的程 序运营的结果总是不对的,和书上的码字不同样,后来发现是在校验矩阵上出了问题,自己对矩阵方面的 知识一直把握得不是很好。通过调试,程序不久就可以对的运营了。到现在为止,我已经学了 C语言程序设计、数据结构等课程,这次的信息论与编码实验让我感觉到 以前学习的东西有了用武之地,把知识和理论付诸实践才干有所提高。在编程的过程中,我发现自己的 编程能力还非常有待提高,以前C语言课程里的很多知识掌握还不牢,时常需要翻书查阅。对信息论与 编码这门课的学习还要加深,只有深刻理解了要做的事情,才干把事情做好。以后我要更加努力,逐 步解决这些问题。