您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > (13-9)CRC冗余校验码的编译码仿真实现
*******************实践教学*******************兰州理工大学计算机与通信学院2013年秋季学期计算机通信课程设计题目:(13,9)CRC冗余校验码的编译码仿真实现专业班级:通信工程(4)班姓名:张亚东学号:10250407指导教师:彭清斌成绩:1摘要通信的目的是要把信息及时可靠地传送给对方,因此要求一个通信系统传输消息必须可靠与快速,在数据通信系统中可靠与快速往往是一对矛盾。为了解决可靠性,通信系统都采用了差错控制。CRC(CyclicalRedundancyChecking)循环冗余校验码是一种重要的线性分组码,通过多项式除法检测错误,是在数据通信和数据检测中广泛应用的检错校验的循环码。本设计研究了纠错码及循环冗余校验码的原理,以及利用MATLAB对其进行了编程和编译仿真,实现了CRC循环冗余校验码的编码及校验,在接收端收到通过校验的码,从而确定传输过程是否出错,得到的结论和理论上是一致的。关键词:检错码;循环冗余校验码;matlab软件目录一、设计目的及任务··········································································11.1目的及意义·············································································11.2设计任务及要求······································································1二、设计原理介绍·············································································22.1差错控制技术介绍···································································22.2CRC校验码原理介绍·································································22.3生成CRC码的基本原理·····························································3三、详细设计···················································································43.1CRC算法描述··········································································43.2编码模块···············································································43.3译码模块···············································································43.4性能分析···············································································5四、系统流程···················································································6五、程序设计···················································································8设计总结·························································································10参考文献·························································································111一、设计目的及任务1.1目的及意义在实际的通信系统中,由于信道传输特性不理想以及加性噪声的影响,传输的信息中不可避免地会发生错误,影响通信系统的传输可靠性。随着数字通信技术的发展,各种业务对系统误码率的要求也逐渐提高,采用差错控制编码技术是提高数字通信可靠性的有效方法之一。差错控制编码就是在发送端的信息码元序列中,以某种确定的编码规则加入一些监督码元,使信息码元与监督码元之间具有某种相关性。接收端通过检验这种相关性是否存在来判断在传输过程中是否出现了误码。CRC冗余校验码是目前较为流行的差错控制编码技术之一1.2设计任务及要求利用MATLAB软件编程,实现如下的工作:1掌握差错控制编码的基本原理;2查找并分析选择一个CRC冗余校验码;3熟悉MATLAB软件开发工具;4根据选用的差错控制编码分别推导编码与译码过程;5用软件编程实现差错控制编码的编码与译码部分;6假定待传输的数字基带信号,仿真并给出差错控制编码的编码结果;7分别在无差错和部分差错的情况下仿真给出差错控制编码的译码结果。2二、设计原理介绍2.1差错控制技术介绍数据传输系统的基本任务是高效而无差错的传送数据。但在任何一个通信系统中,都难免会有各种各样的干扰,也就是不可避免的有一定噪音。信道噪声所造成的后果是使得信宿所差错可接到的数据和信源所发出的数据不一致,即造成传送差错,或简称差错。差错控制在数据通信过程中能发现或纠正差错,是把差错限制在尽可能小的允许范围内的技术和方法。为减少传输差错,一方面,可以采取有效的屏蔽措施,改善设备及其环境;另一方面,可以采取差错控制技术。常见的差错控制方法有“回声法”,”表决法”,ARQ,FEC,HEC等。差错控制编码可分为检错码和纠错码。检错码能自动发现差错的编码;纠错码不仅能发现差错而且能自动纠正差错的编码。为了能有效的检测出差错,常用的方法是:在所传输的信息中,按照一定规则,另外加入若干附加比特,这种技术成为冗余。在数据通信中,常用的冗余检验技术有:奇偶检验、方块检验、和循环冗余检验(CRC)。2.2CRC校验码原理介绍CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码共长n个bit,信息码长k个bit,就称为(n,k)码。CRC校验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(CRC码)r位,并附在信息后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去。在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。16位的CRC码产生的规则是先将要发送的二进制序列数左移16位(乘以216)后,再除以一个多项式,最后所得到的余数既是CRC码。求CRC码所采用模2加减运算法则,既是不带进位和借位的按位加减,这种加减运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普通代数式的乘除法运算是一样,符合同样的规律。接收方将接收到的二进制序列数(包括信息码和CRC码)除以多项式,如果余数为0,则说明传输中无错误发生,否则说明传输有误。32.3生成CRC码的基本原理任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。a)将x的最高幂次为R的生成多项式G(x)转换成对应的R+1位二进制数。b)将信息码左移R位,相当与对应的信息多项式C(x)*2Rc)用生成多项式(二进制数)对信息码做模2除,得到R位的余数。d)将余数拼到信息码左移后空出的位置,得到完整的CRC码。2.4循环冗余校验码(CRC)的特点1)可检测出所有奇数位错;2)可检测出所有双比特的错;3)可检测出所有小于、等于校验位长度的突发错4三、详细设计3.1CRC算法描述确定循环冗余检验码的关键在于二进制序列的出发计算上。其规则是:加法、减法运算都是进行异或运算,加法不进位,减法不借位。计算的方法如下:a)在数据的末尾加上n个0,n等于除数的位数减去1;b)采用二进制除法规则,计算加长的数据以预先设定的除数,得到的余数即为循环冗余检验码;c)将循环冗余检验码替换数据末尾的n个0,即得整个传输的数据。3.2编码模块本设计中CRC校验码的n=13,k=9,则K位要发送的信息位可对应于一个(k-1)次多项式K(X),r位冗余位则对应于一个(r-1)次多项式R(X),由r位冗余位组成的n=k+r位码字则对应于一个(n-1)次多项式T(X)=Xr*K(X)+R(X)。(1)移位将原信息码(kbit)左移r位(k+r=n)(2)相除运用一个生成多项式g(x)(也可看成二进制数)用模2除上面的式子,得到的余数就是校验码。非常简单,要说明的:模2除就是在除的过程中用模2加,模2加实际上就是我们熟悉的异或运算,就是加法不考虑进位,公式是:0+0=1+1=0,1+0=0+1=1即‘异’则真,‘非异’则假。由此得到定理:a+b+b=a也就是‘模2减’和‘模2加’直值表完全相同。有了加减法就可以用来定义模2除法,于是就可以用生成多项式g(x)生成CRC校验码3.3译码模块到达接收方的数据单元首先到达的是数据,然后是CRC校验码。接收方将整个数据串当作一个整体去除以用来产生循环冗余校验余数的同一个除数。如果数据串无差错地到达接收方,循环冗余校验器将产生余数0。因此数据单元将通过检验。如果在传输中数据单元被改变,除法将产生非零余数,因此数据单元将通不过检验。53.4性能分析循环冗余检验的性能良好,它可以检测出全部奇数个错误、全部的双字节错误以及全部的长度小于或等于生成多项式阶数的错误,而且它还能以很高的概率检测出长度大于生成多项式阶数的错误。6四、系统流程余数是否为零输出接收端的码结束输出erro=0开始初始化,随机产生信息码并输出添加冗余比特位循环计算长除是否除完合成编码序列输出用合成码长除生成多项式是否除完7k位r位(r=n-k)n位循环码信息位校验位(CRC校验)rbitr+1bit余数rbitCRC校验码数据00...0G(X)数据数据0接收,非0拒绝数据余数G(X)发送方接收方8五、程序设计%CRC编码主程序clear;clc;closeall;uncode_sequence=randint(1,9)sequence_length=length(uncode_sequence);%得到原始信号长度crc_ccitt=[10011];%常用的CRC生成多项式add_bit=zeros(1,4);%添加冗余比特位crc_coded_sequence=[uncode_sequencezeros(1,4)];%初始化输出检错码序列uncode_sequence=[uncode_sequenceadd_bit];remainder_bits=uncode_sequence;%初始化余数数组fork=1:sequence_length%开始循环计算长除得到最终余数add_zeros=zeros(1,sequence_length-k);%加入冗余位参与模2运算register_bits=[crc_ccittadd_zeros];%构造除数数组ifremainder_bits(1)==0%被除数第一位为0则将除数所有位置0register_bits=zeros(1,length(register_bits));endremainder_bits=bitxor(register_bits,remainder_bits);%将除数与被除数进
本文标题:(13-9)CRC冗余校验码的编译码仿真实现
链接地址:https://www.777doc.com/doc-5993926 .html