实验九基于crc编码的检错程序的实现

实验九基于crc编码的检错程序的实现

ID:12775553

大小:170.00 KB

页数:6页

时间:2018-07-19

实验九基于crc编码的检错程序的实现_第1页
实验九基于crc编码的检错程序的实现_第2页
实验九基于crc编码的检错程序的实现_第3页
实验九基于crc编码的检错程序的实现_第4页
实验九基于crc编码的检错程序的实现_第5页
资源描述:

《实验九基于crc编码的检错程序的实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、云南大学软件学院实验报告课程:计算机网络原理实验任课教师:刘春花,刘宇姓名:学号:专业:成绩:实验九、链路层实验——基于CRC编码的检错程序的实现实验报告一、实验目的1、通过实验,掌握CRC编码和解码的原理。2、掌握基于CRC编码的差错检测技术。二、实验指导现在计算机网络广泛采用的差错检测技术是基于CRC(cyclicredundancycheck)循环冗余检测编码,CRC也称为多项式编码(polynomialcode),CRC算法非常容易用硬件实现。CRC编码操作如下:对给定的数据D,发送者选择r个附加位,追加到D的末尾,形成d+r位的新位型,该位型正好能被G模2除尽。其中,G称为生成器。C

2、RC编码算法实现:1、选择生成多项式G,其最高次方为r,即r+1位的二进制位串2、计算D·2r,即在数据D后面补r个0,构成d+r位的位串3、按模2除法求(D·2r/G)的余数R,即:4、从D·2r中模2减去R,得到新的数据T,即加了CRC的帧三、实验要求1、设置一个d位的数据D,r+1位的多项式G,生成CRC码,并把此CRC码作为数据帧进行传送。2、编写两个子程序,分别实现CRC编码和CRC解码,在主函数中对子程序进行调用。解码子程序应能根据解码情况判断出接收到的数据帧是否出错,并给出提示。3、要求分别以正确和错误的数据来检验此检错程序。4、将编写程序的源代码加必要注释和程序运行结果一起填入

3、实验报告中。提示:1、编写程序时数据直接用二进制数,可能用到位操作符^(异或)和<<(左移)。2、在设置错误的编码时,错误位数最好不要超过r+1位。四、运行结果:正确的数据:错误的数据:经验证,结果正确。五、实验小结:通过本次要求实现CRC编码和解码程序的编写实验,加深了对CRC编码和解码的原理的了解,掌握了CRC编码的算法。另外在实验中还有一些细节的地方需要改进,实验代码虽然相对比较少,但在实验过程中,还是出现了一些问题,比如对C语言的某些语法知识点有些生疏。想要更好地学习各种算法知识,编程是最基础的,今后编程方面还需要加强。六、程序代码:#include#include<

4、stdlib.h>voidcrc(intA[],intG[],intx,intn)//编码程序{inti,j,k;printf("tt");for(k=0;k<=x-1;k++)printf("%d",A[k]);//输出补后的数for(i=0;i<=x-n+1;i++){if(A[i]==1)//当首位为时进行异或{for(j=0;j<=n-1;j++){if(A[i+j]==G[j])A[i+j]=0;//异或运算,相同为,不同为elseA[i+j]=1;}printf("tt");//输出每次异或后的结果for(k=0;k<=x-1;k++)printf("%d",A[k

5、]);//输出余数}}}voidcrl(intM[],intA[],intm,intn)//检验解码程序{intk=0,i;for(i=0;i<=m-1;i++){if(M[i]!=A[i]){printf("t第%d位出现错误",i+1);k++;}}if(k==0){printf("t数据完全正确");}}voidmain(){intm,n;intA[20],M[20],G[20],i,j;printf("t**************************************************************");printf("

6、t请输入生成器的长度m=");scanf("%d",&m);printf("t请输入原始数据的长度n=");scanf("%d",&n);printf("t请输入生成器=");for(i=0;i<=m-1;i++)scanf("%d",&M[i]);printf("t请输入原始数据=");for(j=0;j<=n-1;j++)scanf("%d",&G[j]);for(i=0;i<=m-1;i++)A[i]=M[i];for(i=m;i<=m+n-2;i++)A[i]=0;//对被除数进行补crc(A,G,m+n-1,n);//调用异或函数for(i=0

7、;i<=m-1;i++)A[i]=A[i]+M[i];printf("t结果为:");for(i=0;i<=m+n-2;i++)printf("%d",A[i]);inta;printf("t是否继续?1/2(1代表yes,2代表no):");printf("t********************************************************

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。