资源描述:
《海明编码报告-.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、计算机网络课程设计课程设计题目:海明码设计学号:201320181519姓名:彭磊专业:电子商务班级:13218152015年06月17日8一.海明编码原理海明码是一种可以纠正一位差错发现两位差错的编码。它是利用在信息位为k位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。它必需满足以下关系式: 2r>=n+1 或 2r>=k+r+1 海明码的编码效率为: R=k/(k+r)式中k为信息位位数 r为增加冗余位位数2.海明码的生成与接收
2、a.每个校验位Ri被分配在海明码的第2的i次方的位置上;b.海明码的每一位(Hi)是由多个/1个校验值进行校验的,被校验码的位置码是所有校验这位的校验位位置码之和。二.海明编码方法1)海明码的生成(顺序生成法)。 例.已知:信息码为:"11001100" (k=8) 求:海明码码字。解:1)把冗余码p1、p2、p3、…,顺序插入信息码中,得海明码 码字:"p1p21p3100p411 0 0" 码位: 123456789101112 其中p1,p2,p3,p4分别插于2k位(k=0,1,2,3)。码位分别为1,2,4,8。 2)冗余码p1,
3、p2,p3,p4的矩阵变换:(相当于监督关系式)8 3)把线性码位的值的偶校验作为冗余码的值(设冗余码初值为0): P1=∑(0,1,1,0,1,0)=1 P2=∑(0,1,0,0,1,0)=0 P3=∑(0,1,0,0,0) =1 P4=∑(0,1,1,0,0) =0 4)海明码为:"101110001100"2)海明码的接收。 例.已知:接收的码字为:"100110001100"(k=8) 求:发送端的信息码。解:1)设错误累加器(err)初值=0 2)求出冗余码的偶校验和,并按码位累加到e
4、rr中: A=∑(1,0,1,0,1,0)=1 err=err+20=1 B=∑(0,0,0,0,1,0)=1 err=err+21=3 C=∑(1,1,0,0,0) =0 err=err+0=3 D=∑(0,1,1,0,0) =0 err=err+0=3 由err≠0可知接收码字有错, 3)码字的错误位置就是错误累加器(err)的值3。 4)纠错--对码字的第3位值取反得正确码字: "101110001100" 5)把位于2k位的冗余码删除得信息码:"11001100"三.程序8#
5、includevoidoutput(int*num);intInputCheck(int*Num);voidCodeSq(int*Num,int*Out);voidbianma(int*Num,intbNum[][15]);intcifang(inta,intb);voidyima(int*Num,intbNum[][15],int*Yout);voidjieshou(int*Num);voidmain(){intbNum[4][15]={{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1},{0,0,0,1,1,1,1,0,0,
6、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}};intInputNum[11];//输入11位数intOut[15];intYout[4];inti=0;printf("Pleaseinput11numbers(only0or1):");for(i=0;i<11;i++){scanf("%d",&InputNum[i]);}if(!InputCheck(InputNum))//判断是否输入正确{CodeSq(InputNum,Out);//把p1、
7、p2等位加入数据里printf("初始编码值:");output(Out);bianma(Out,bNum);//编码,把p1、p2等为解出来printf("海明编码值:");output(Out);//Out[10]=!Out[10];printf("译码输出值:");yima(Out,bNum,Yout);//解码输出,判断是否有错output(Out);printf("接收值:");//接收值jieshou(Out);}//output(InputNum);}voidoutput(int*num){8inti=0;for(i=0;i<=
8、14;i++){printf("%d",num[i]