ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:157.45KB ,
资源ID:30431605      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30431605.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(CRC校验码系统设计.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

CRC校验码系统设计.docx

1、CRC校验码系统设计 南华大学电气工程学院 通信原理课程设计设计题目: CRC校验码系统设计 专 业: 通信工程 学生姓名: 学 号 起迄日期: 2015年4月30日2015年5月15日指导教师: 系主任: 摘要 CRC(Cyclical Redundancy Checking)循环冗余校验码是一种重要的线性分组码,通过量项式除法检测错误,是在数据通信和数据检测中普遍应用的检错校验的循环码。 本设计研究了CRC循环冗余校验码的原理,和利用C语言对其进行了编程和编译仿真,实现了CRC循环冗余校验码的编码及校验,在接收端收到通过校验的码,从而肯定传输进程是不是犯错,取得的结论和理论上是一致的。在本

2、次计中,利用的系统开发平台为MATLAB。设计方案中,实现了编码,纠错,译码。从循环的原理动身,讨论循环码编译码系统的特点。以一个(15,11)循环码的编译码的设计与仿真为例 ,利用C语言对该系统进行了设计 。 关键词: MATLAB;C语言 ;CRC循环冗余校验码 1.概要循环码的介绍 随着运算机通信的日趋进展 ,传输数据的场合愈来愈多。串行数据的过失查验是保证数据传输正确的必要手腕 ,而循环码是过失码中最常常利用的一种编码。 循环冗余校验码(CRC)的大体原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。对于一个给定的(N,K)码,能够证明存在一

3、个最高次幂为N-K=R的多项式G(x)。按照G(x)能够生成K位信息的校验码,而G(x)叫做那个CRC码的生成多项式。 校验码的具体生成进程为:假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成C(x)*2的R次方,如此C(x)的右边就会空出R位,这就是校验码的位置。通过C(x)*2的R次方除以生成多项式G(x)取得的余数就是校验码。 循环码是线性分组码中最重要的一种子类 ,它除具有分组码的线性外 ,还具有循环性 ,其码字结构一般用符号( n , k)表示 ,其中 , n 是该码组中的码元数 , k 是信息码元位数 , r = n - k 是监督码元位数1 。循环码具有许多特

4、殊的代数性质 ,这些性质有助于依照要求的纠错能力系统地构造这种码 ,能简化译码算法 ,而且目前发觉的大部份线性码与循环码有紧密关系。 已有循环码编译码系统大多以标准逻辑器件(如中小规模 TTL 系列、 CMOS系列)按传统数字系统设计方式设计而成 ,其主要缺点是逻辑规模小、功耗大、 靠得住性低。随着大规模、 超大规模集成电路的进展 ,和电子设计自化水平的提高 ,这种制约正在被逐渐消除。 一、循环校验码(CRC码):是数据通信领域中最常常利用的一种过失校验码,其特征是信息字段和校验字段的长度能够任意选定。 二、生成CRC码的大体原理:任意一个由二进制位串组成的代码都能够和一个系数仅为0和1取值的

5、多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。 3、CRC码集选择的原则:若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得V(x)=A(x)g(x)=xRm(x)+r(x);其中: m(x)为K次信息多项式, r(x)为R-1次校验多项式, g(x)称为生成多项式:g(x)=g0+g1x+ g2x2+.+g(R-1)x(R-1)+gRxR发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码

6、字。 4、CRC校验码软件生成方式: 借助于多项式除法,其余数为校验字段。例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1 假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001 x4m(x)=x10+x8+x7+x4 对应的代码记为:;采用多项式除法: 得余数为: 1010 (即校验字段为:1010)发送方:发出的传输字段为: 1 0 1 1 0 0 1 1 0 10 信息字段 校验字段接收方:利用相同的生成码进行校验:接收到的字段/生成码(二进制除法)若是能够除尽,则正确。 2 MATLAB大体介绍 MATLAB的介绍MATLAB 是美国

7、MathWorks公司出品的商业数学软件,主要包括MATLAB和Simulink两大部份。MATLAB是矩阵实验室(Matrix Laboratory)的简称。MATLAB能够进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处置与通信、图像处置、信号检测、金融建模设计与分析等领域。MATLAB的大体数据单位是矩阵,它的指令表达式与数学、工程中常常利用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的情形简捷得多,而且mathwork也吸收了像Maple等软件的长处,使MATLAB成为一个壮大的数学软

8、件。在新的版本中也加入了对C,FORTRAN,C+ ,JAVA的支持。能够直接挪用,用户也能够将自己编写的实用程序导入到MATLAB函数库中方便自己以后挪用,另外许多的MATLAB爱好者都编写了一些经典的程序,用户能够直接进行下载就可以够用。 MATLAB的组成部份(1)开发环境(development Environment):一组图形化用户接口工具和组件的集成:MATLAB桌面、命令窗口、命令历史窗口、编辑调试窗口及帮忙信息、工作空间、文件和搜索路径等阅读器;(2)MATLAB数学函数库:(Math Function Library)大体函数:求和、正弦、余弦和复数运算等;特殊函数:矩阵求

9、逆、矩阵特征值、贝塞尔函数和快速付里叶变换等;(3)MATLAB 语言:(MATLAB Language)一种高级编程语言,包括控制流的描述、函数、数据结构、输入输出及面对对象编程;(4)句柄图形:(Handle Graphics) 能够对各类图形对象进行更为细腻的修饰和控制,成立完整的图形界面的应用程序;(5)应用程序接口:(Applied Function Interface) MATLAB的应用程序接口允许用户利用C或FORTRAN语言编写程序与MATLAB连接。 MATLAB的特点 (1)此高级语言可用于技术计算;(2)此开发环境可对代码、文件和数据进行管理;(3)交互式工具能够按迭代

10、的方式探查、设计及求解问题;(4)数学函数可用于线性代数、统计、傅立叶分析、挑选、优化和数值积分等;(5)二维和三维图形函数可用于可视化数据;(6)各类工具可用于构建自概念的图形用户界面;(7)各类函数可将基于MATLAB的算法与外部应用程序和语言(如 C、C+、Fortran、Java、COM 和 Microsoft Excel)集成。 MATLAB的优势(1)友好的工作平台和编程环境(2)简单易用的程序语言(3)壮大的科学运算机数据处置能力(4)超卓的图形处置功能(5)应用普遍的模块集合工具箱(6)实用的程序接口和发布平台(7)应用软件开发(包括用户界面) 3 设计原理编码器模块按照给定的

11、 (n,k) 值选定生成多项式 g (x),即从 xn+1 的因子当选一个 (n-k) 次多项式作为,假设给定信息码组为 m (x)= (mk-1,mk-2.m0),第二数小于 k,则xn-km (x) 的次数一定小于n。用 g (x) 除xn-km (x),取得余式 r (x),r (x) 的次数一定小于 g (x) 的次数,即小于 (n-k)。将此余式 r (x) 加于信息位以后作为监督位,即 r (x) 和xn-km (x) 相加,取得多项式一定是一个码组多项式。因为它一定能被 g (x) 整除,且商的次数不大于 (k-1)。按照以上原理,循环码的编码步骤能够归纳如下:(1) 用xn-k

12、 乘信息码 m (x),这一运算实际上是在信息码后附加上 (n-k)个“0”。(2) 用 g (x) 除xn-km (x),取得商 Q (X),(3) 编出的码组 T (x) =xn-km (x) +r (x)。由此可见,编码的核心是如何肯定余式 r (x),找到 r (x)后,可直接将其所代表的编码位附加到信息位以后,完成编码。编码电路可采用 (n-k) 级反馈移位寄放器和异或门 (模2 加) 组成的除法电路实现。以生成矩阵 g (x) =x3+x+1 生成 (7,4) 循环码的编码器为例,其除法电路如图3. 1 所示。图 除法电路图此移位寄放器的个数与 g (x) 的次数相等,而且 g (

13、x) 的系数 1 表示有反馈,0 表示无反馈。每一个寄放器的初始值均为0,将码组 m3m2m1m0 依次串行送入电路的最高端,相当于对其后面补三个零,除法电路通过四次移位后,寄放器 D1D2D3里的数即为余式 r (x) 。因此,编出码组 T (x) = (m3m2m1m0D1D2D3)。实际设计中,要有一个信号 K 来控制码组的输入与输出,在 K 的控制下,输入的信息码元,一方面串行输入信道,另一方面进入除法电路进行计算。当输入最末一名信息码元结束时,K 信号也为零,在时钟脉冲作用下,移位寄放器将计算结果送往信道,即在最末一名信息码元后附加监督码。译码器模块接收端译码的要求有两个:检错和纠错

14、。(1) 检错若接收码组 R (x) 与发送码组相同,即 R (x) =T (x),则R (x) 一定能被 g (x) 整除;若在传输中发生错误,即 R (x)T (x),则 R (x) 被 g (x) 除时可能除不尽而有余项,从而发生错误。因此,能够以余项是不是为零来判断接收码组中有无错误。可是,有错码的接收码组也有可能被 g (x) 整除,这时的错码就不能检出。这种错误称为不可检错误,其误码一定超过了此编码的检错能力。(2) 纠错为了能够纠错,要求每一个可纠正的错误图样必需与一个特定余式有一一对应关系。只有存在上述一一对应的关系时,才可能从上述余式唯一地决定错误图样,从而纠正错码。以下是为

15、纠错而设计的。由于 (7,4) 循环码的最小码距为 d0=3,由 d02t+1 得,此循环码只能纠正一个错码。当通过信道传输后发生错误时,接收码组多项式 R (x) 再也不是的倍式。其中 S (x) 是 R (x) 除以 g (x) 后的余式,是不大于 r-1次的码组多项式,称为伴随多项式或校正子多项式。时接收码组多项式 可表示为发送码组多项式 T (x) 与过失多项式 E (x) 之和,即:R (x) =T (x) +E (x)综合以上式子,咱们由 就可进一步肯定 E (x):S (x) =remT (x) +E (x) =rem E (x) g (x) g (x)对于一个 S (x),E

16、(x) 可能有多种形式。由 S (x) 肯定 E(x) 时一样利用最大似然比准则。对最小码重的过失多项式 E(x),由上式求出对应的伴随多项式 S (x),将 E (x) 与 S (x) 的对应关系列成译码表。当收到任一码组 R (x) 后,利用 S (x)=rem R (x) /g (x) 求出 S (x),对照译码表找到 E (x),再用R (x) =T (x) +E (x) 求 T (x),即 T (x) =R (x) -E (x) 为已经纠错的原发送码组。纠错完毕以后,只需要取纠错后的前四位,即为所译码元。而在实际电路设计进程中,由于二进制只有 0 与 1 两种状态,明白错误位置后,能

17、够直接对该位置的码元取反即可。综上所述,纠错的步骤如下:(1)把 接 收 码 组 R ( x) 送 入 除 法 电 路 , 得 到 余 数D1D2D3 即为伴随矩阵 S (x)。(2)由典型生成矩阵 G 和典型监督矩阵 HT 之间的关系可进一步求得,再由 S= 可得错误图样 E(x),如此就可以够肯定错码的位置。(3)按照错误的码位,对该码位的码元取反输出即可取得原发送码组 T (x)。其中,T (x) 的前四位即为译出码元 m(x)。图 译码器示用意 4 设计思想程序流程图 图1 CRC编码程序流程图 5 CRC编解码系统的设计及实现取n =15,r =9,k =6,生成多项式G(X)=X9

18、+X6+X5+X4+X+1 ,设计了CRC编译码系统,其框图如图1 所示。 该系统包括发端电路和收端电路两部份。发端有信码发生器模块、编码器模块,收端有模拟错码发生器模块、错码位置计算模块、纠错单元模块。其中错码位置计算单元和纠错单元合在一路组成译码器。 程序设计MATLAB程序编写% CRC 编码主程序clear;clc;close all;uncode_sequence=randint(1,11)sequence_length = length(uncode_sequence); % 取得原始信号长度crc_ccitt = 1 1 0 0 1 ; % 常常利用的CRC生成多项式add_bi

19、t = zeros(1,4); % 添加冗余比特位crc_coded_sequence = uncode_sequence zeros(1,4); % 初始化输出检错码序列uncode_sequence = uncode_sequence add_bit;remainder_bits = uncode_sequence; % 初始化余数数组for k = 1:sequence_length % 开始循环计算长除取得最终余数 add_zeros = zeros(1,sequence_length-k); % 加入冗余位参与模2运算 register_bits = crc_ccitt add_ze

20、ros; % 构造除数数组 if remainder_bits(1) = 0 % 被除数第一名为0则将除数所有位置0 register_bits = zeros(1,length(register_bits); endremainder_bits = bitxor(register_bits,remainder_bits); % 将除数与被除数进行异或操作register_bits = crc_ccitt; % 将寄放器恢复为除数数组remainder_bits(1) = ; % 去除模2后取得的被除数的第1位endadd_len = length(crc_coded_sequence) -

21、length(remainder_bits); % 生成余数序列的冗余位以叠加到编码序列remainder_bits = zeros(1,add_len),remainder_bits; % 余数序列添加冗余crc_coded_sequence = crc_coded_sequence + remainder_bits % 合成编码序列sequence_length = length(crc_coded_sequence); % 取得冗余编码的长度original_sequence = crc_coded_sequence; % 初始化输出序列 crc_ccitt = 1 1 0 0 1; %

22、常常利用的CRC生成多项式 remainder_bits = crc_coded_sequence; % 初始化余数数组 cycle_length = sequence_length-length(crc_ccitt)+1; % 计算长除法的循环周期 for k = 1:cycle_length % 开始循环计算长除取得最终余数 add_zeros = zeros(1,cycle_length-k); % 加入冗余位参与模2运算 register_bits = crc_ccitt add_zeros; % 构造除数数组 if remainder_bits(1) = 0 % 被除数第一名为0则将

23、除数所有位置0 register_bits = zeros(1,length(register_bits); end remainder_bits = bitxor(register_bits,remainder_bits); % 将除数与被除数进行异或操作 register_bits = crc_ccitt; % 将寄放器恢复为除数数组 remainder_bits(1) = ; % 去除模2后取得的被除数的第1位 end if sum(remainder_bits) = 0 % 传输码元中没有发生奇数个错误 original_sequence = crc_coded_sequence(1:

24、cycle_length) else err = 1 % 码元传输发生错误系统仿真运行结果及其分析运行结果MATLAB的运行结果如下: 图2 程序仿真图 结果分析CRC校验的大体思想是利用线性编码理论,在发送端按照要传送一个n比特的帧或报文,发送器生成一个r比特的序列,称为帧查验序列(FCS)。如此形成的帧将由(n+r)比特组成。那个帧恰好能被某个预先规定的数整除。接收器用相同的数去除外来的帧,结果无余数,则以为无过失。循环冗余校验与奇偶校验不同,或是一个字符校验一次,而前者是一个数据块校验一次。在同步通信中,几乎都利用这种校验方式。二进制多项式的加减运算为模2加减运算,即两个码多项式相加时,

25、对应系数进行模2加减。所谓模2加减就是列位做不带进位、借位的按位加减。这种加减运算实际上是逻辑上的异或运算,即加法和减法等价。信息多项式和余数多项式能够归并成一个新的多项式(称为循环码的码多项式),则该多项式是生成多项式的整数倍,即能被宣称多项式整除。按照这一原理,在发送端用信息码多项式除以生成多项式所得的余数多项式就是所要加的监督位。将循环码的码多项式除以生成多项式,若能除尽,说明传输正确,不然说明犯错。CRC校验的关键是如何求出余数,此余数即为校验码(CRC校验码)。以前用数字电路来实现,而此刻能够用运算机来完成。为了传输的正确性,在接收端要有一个CRC查验器。它的功能和发生器一样,当收到

26、CRC冗余校验码后,做一样的模2除法(注意,这里采用的生成多项式必然要与发送端相同)。若是余数是0,则说明传输正确;不然,传输错误,应重传。本次课设通过对(15,11)循环码的编译码的设计与仿真得出仿真进程取得的结论与理论是一致的。 6 总结 本设计研究了循环冗余校验码的原理,和利用MATLAB对其进行了编程和仿真,取得的结论和理论上大体是一致的。通过这次课程设计使我知道了理论与实际相结合的必要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立试探的能力。在本次课程设计中,我碰到了很多问题,刚开始我并非是用的MATLAB来做的

27、,而是QuartusII,可是由于在程序运行进程中,对VHDL语言程序的了解不够,以至于我的一些错误不会更正,而且对软件的运用也差,以至于到网上来找视频教程来熟悉那个软件,可是发觉我的大脑和王宝强的差不多,看了那么多的教程仍是不会,通过一个礼拜的试探仍是选择了MATLAB,经果不断地调试程序,发觉错误并加以更正,最后得出了仿真结果。主要参考文献:1樊昌信.通信原理(第6版)M.北京:电子工业出版社,2012,12.2樊昌信,曹丽娜 .通信原理教程(第3版)M.北京:国防工业出版社,2006,9.3刘学勇.详解MATLAB/Simulink通信系统建模与仿真M.北京:电子工业出版社,2011,11.4张水英,徐伟强.通信原理及MATLAB/Simulink仿真M.北京:人民邮电出版社,2012,9.5赵鸿图,茅艳.通信原理MATLAB仿真教程M.北京:人民邮电出版社,2010,11.6赵静,张瑾.基于MATLAB的通信系统仿真M.北京:北京航空航天大学出版社,2010,1.7黄智伟.基于NI Multisim的电子电路计算机仿真设计与分析(修订版)M.北京:电子工业出版社,2011, 6.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1