线性分组码实验设计报告.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
线性分组码实验设计报告

循环冗余校验(CRC)实验设计报告 一、实验目的 掌握CRC的基本原理,学会灵活运用理论知识,寻找灵活多变的实现方法,深刻体会从理论到实践的过渡过程,并熟悉对MFC的使用。 二、实验原理 (1)编码 CRC编码与系统循环编码算法方法基本一致。在发送端根据要传送的k为二进制码序列,以求余的规则产生一个校验用的r个监督位(俗称CRC 位),并附在信息后边,构成新的二进制码序列数共位。 输入k位信息组成信息组,由于CRC码,为的最高幂次,所以先将信息组左移位,于是就可以得到编码前的信息码元,而,故可由生成多项式得到,最后将两者相加就可以得到CRC码。 (2)校验 校验算法有三种,分别为除法校验、求生产多项式的根、校验校验位。本次实验采用除法校验,即。所以CRC码是生成多项式的倍式,为了检验接收的是否出错,可以将查看是否能整除,如果能整除则说明接收码字无误,若不能整除则说明接收码字中有误码。 三、实验内容 1.对输入信息进行编码 (1)构建生成多项式 由题意得,给定CRC生成多项式,将生成多项式每一项系数视作一个BYTE类型即unsigned char类型字,则可定义数组: BYTE g[17]={1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1}; 则生成多项式就以数组的形式存放。 (2)得到信息序列: 同生成多项式一样,首先也要把输入对话框的信息序列以数组的形式存放,此处用数组v[256]={0}储存。 从键盘往对话框中输入信息码,因为接收到的信息系列是字符型,数值是ASCII码值,所以要转换成二进制码字,每一位信息码用一个BYTE类型字进行存储。 a=m_info.GetLength(); for(int i=0;ia;i++) {v[i]=m_info.GetAt(i); w[i]=v[i]-0x30; //为了后面带入除法运算中 } (3)计算加入CRC校验位后的码字: 根据CRC编码原理得到CRC码多项式: 根据上式的表达式可以知道先将信息组左移16位,再加上左移后模上的余式r,最后就可以得到编码后的码多项式。但在数组v[]中低位表示信息组的高位,故可以不用将数组v[]中的信息组左移16位,直接在信息组后加16个0即可。但是在对话框中输出显示的是ASCII码,所以要将v中的a+16个元素都加上0x30H再赋值到m_v中输出显示。具体的代码如下: /*=====GF(2)上多项式除法=========== C=A/B A=长度为m B长度为n 结果:A存放余式,C存放商 ==================================*/ void div2 (BYTE *A,int m,BYTE *B,int n,BYTE *C) { int i=0,j=0; for(i=0;i=m-n;i++) { if(A[i]==1) { for(j=0;jn;j++) A[i+j]^=B[j]; if(C!=NULL) C[i]=1; } else if(C!=NULL) C[i]=0; } } div2(w,a+16,g,17,q);; //调用除法函数,并将余式存在w中 for(i=a;ia+16;i++) { w[i]+=0x30; //由于余式存在w中的后16位 v[i]=w[i]; } //输出CRC校验位 for(i=0;i16;i++) w[i]=w[a+i]; for(i=16;ia+16;i++) w[i]=0; //为了只输出前16位 m_crc=w; UpdateData(FALSE); //计算加入CRC后的码字 m_v=v; UpdateData(FALSE); 2.指定错误个数和位置,并对码字加错 指定固定错误的位置,然后根据错误的位置输出对应接收到的信息,也就得到了接收到的码元。 算法原理: 通过m_p输入所有错误的位置,通过m_num输入错误个数,而m_num只须定义成int类型就行。为易于区分,错误位之间用空格隔开,通过读取m_v的数据并转化为十进制数,然后设定一个错误图样,并把转化后十进制数当做错误图样的位置,并且将其赋值为”1”。最后将错误图样与正确信息进行模二加便可以得到接收到的信息,也可根据判断直接赋值。 b=m_p.GetLength(); num=m_num; for(i=0;ib;i++) p[i]=m_p.GetAt(i); //根据num和p求e int j=0,k; //记录位

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档