海明编码报告

上传人:ali****an 文档编号:117421611 上传时间:2019-12-05 格式:DOC 页数:9 大小:264.50KB
返回 下载 相关 举报
海明编码报告_第1页
第1页 / 共9页
海明编码报告_第2页
第2页 / 共9页
海明编码报告_第3页
第3页 / 共9页
海明编码报告_第4页
第4页 / 共9页
海明编码报告_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《海明编码报告》由会员分享,可在线阅读,更多相关《海明编码报告(9页珍藏版)》请在金锄头文库上搜索。

1、计算机网络课程设计课程设计题目:海明码设计学 号:201320181519姓 名:彭磊专 业:电子商务班 级:1321815 2015年06月17日一海明编码原理海明码是一种可以纠正一位差错发现两位差错的编码。它是利用在信息位为k位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。它必需满足以下关系式:r=n+1 或 2r=k+r+1海明码的编码效率为:R=k/(k+r)式中 k为信息位位数 r为增加冗余位位数2.海明码的生成与接收a.每个校验位Ri被分配在海明码的第2的i次方的位置上; b.海明码的每一位(Hi)是

2、由多个/1个校验值进行校验的,被校验码的 位置码是所有校验这位的校验位位置码之和。 二海明编码方法1)海明码的生成(顺序生成法)。例.已知:信息码为: 1 1 0 0 1 1 0 0 (k=8) 求:海明码码字。解:1)把冗余码p1、p2、p3、,顺序插入信息码中,得海明码码字: p1 p2 1 p3 1 0 0 p4 1 1 0 0 码位:1 2 3 4 5 6 7 8 9 10 11 12其中p1,p2,p3,p4分别插于2k位(k=0,1,2,3)。码位分别为1,2,4,8。2)冗余码p1,p2,p3,p4的矩阵变换:(相当于监督关系式)3)把线性码位的值的偶校验作为冗余码的值(设冗余码

3、初值为0):P1=(0,1,1,0,1,0)=1P2=(0,1,0,0,1,0)=0P3=(0,1,0,0,0)=1P4=(0,1,1,0,0)=04)海明码为:1 0 1 1 1 0 0 0 1 1 0 02)海明码的接收。例.已知:接收的码字为:1 0 0 1 1 0 0 0 1 1 0 0(k=8)求:发送端的信息码。解: 1)设错误累加器(err)初值=02)求出冗余码的偶校验和,并按码位累加到err中:A=(1,0,1,0,1,0)=1err=err+20=1B=(0,0,0,0,1,0)=1err=err+21=3C=(1,1,0,0,0)=0err=err+0 =3D=(0,1,

4、1,0,0)=0err=err+0 =3由err0可知接收码字有错,3)码字的错误位置就是错误累加器(err)的值3。4)纠错-对码字的第3位值取反得正确码字:1 0 1 1 1 0 0 0 1 1 0 05)把位于2k位的冗余码删除得信息码:1 1 0 0 1 1 0 0 三程序#includevoid output(int *num);int InputCheck(int *Num);void CodeSq(int *Num,int *Out);void bianma(int *Num,int bNum15);int cifang(int a,int b);void yima(int *N

5、um,int bNum15,int *Yout);void jieshou(int *Num);void main()int bNum415=0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1;int InputNum11;/输入11位数int Out15;int Yout4;int i=0;printf(Please input 11 numbers(only 0 or 1):n);for(i=0;i11;

6、i+) scanf(%d,&InputNumi);if(!InputCheck(InputNum)/判断是否输入正确 CodeSq(InputNum,Out);/把p1、p2等位加入数据里printf(初始编码值:n);output(Out);bianma(Out,bNum);/编码,把p1、p2等为解出来 printf(海明编码值:n); output(Out);/Out10=!Out10; printf(译码输出值:n);yima(Out,bNum,Yout);/解码输出,判断是否有错output(Out); printf(接收值:n);/接收值jieshou(Out);/output(I

7、nputNum);void output(int *num)int i=0;for(i=0;i=14;i+)printf(%d ,numi);printf(n);int InputCheck(int *Num)int i=0;int flag=0;for(i=0;i1|Numi=0;i-) Outi=0; j-; if(i=7|i=3|i=1|i=0) j=j+1; continue; Outi=Numj; void bianma(int *Num,int bNum15) int i=0,j=0,k=0; int temp15; for(i=0;i4;i+) k=0; for(j=0;j15;

8、j+) tempj=Numj*bNumij; for(j=0;j15;j+) if(tempj=1)k+; if(k%2)=0) Numcifang(2,3-i)-1=1; int cifang(int a,int b)int temp=1;while(b)temp=temp*a; b-;return temp;void yima(int *Num,int bNum15,int *Yout) int i,j,k; int temp15; int sum=0; for(i=0;i4;i+) Youti=0; k=0; for(j=0;j15;j+) tempj=Numj*bNumij; for(

9、j=0;j15;j+) if(tempj=1)k+; if(k%2) Youti=1; for(i=0;i4;i+) printf(%d,Youti); printf(n); for(i=0;i4;i+) sum=sum+Youti*cifang(2,3-i); if(sum!=15) printf(错误位:%dn,(15-sum); printf(错误传输值:n); output(Num); printf(纠错值:n); Num15-sum-1=!Num15-sum-1; void jieshou(int *Num)int a15=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;

10、 int i,j=0; for(i=0;i15;i+) j+; if(i=0|i=1|i=3|i=7) j=j-1; else aj=Numi; for(i=1;i=11;i+) printf(%d ,ai); 四程序执行结果输入错误时:由上结果知道如果发送数据有错误,则可以提示发送正确数据。传输无错误:输入合法且传输无错误时,直接输出,不用改错。传输有一个错误时:输入无错误,传输有错误时,先纠错在输出,解码值与传输值一致。五实验小结 这次实验使我掌握了海明编码解码的相关技术,基本完成了任务。我的编程和调试能力得到了进一步的提高,我也对编程有了更浓厚的兴趣。我的意志品质同样得到了锻炼。 这次实验也有不足之处,就是不能随意输入一个比特流,随之生成一个运算矩阵。使程序的实用性显得不足,而只能说明原理。由于时间限制没有考虑这种更复杂的算法,希望以后能够改进8

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号