CRC校验码系统设计.docx

上传人:b****8 文档编号:30431605 上传时间:2023-08-15 格式:DOCX 页数:16 大小:157.45KB
下载 相关 举报
CRC校验码系统设计.docx_第1页
第1页 / 共16页
CRC校验码系统设计.docx_第2页
第2页 / 共16页
CRC校验码系统设计.docx_第3页
第3页 / 共16页
CRC校验码系统设计.docx_第4页
第4页 / 共16页
CRC校验码系统设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

CRC校验码系统设计.docx

《CRC校验码系统设计.docx》由会员分享,可在线阅读,更多相关《CRC校验码系统设计.docx(16页珍藏版)》请在冰豆网上搜索。

CRC校验码系统设计.docx

CRC校验码系统设计

南华大学电气工程学院

《通信原理课程设计》

 

设计题目:

CRC校验码系统设计

专业:

通信工程

学生姓名:

学号

起迄日期:

2015年4月30日—2015年5月15日

指导教师:

系主任:

 

 

摘要

CRC(CyclicalRedundancyChecking)循环冗余校验码是一种重要的线性分组码,通过量项式除法检测错误,是在数据通信和数据检测中普遍应用的检错校验的循环码。

本设计研究了CRC循环冗余校验码的原理,和利用C语言对其进行了编程和编译仿真,实现了CRC循环冗余校验码的编码及校验,在接收端收到通过校验的码,从而肯定传输进程是不是犯错,取得的结论和理论上是一致的。

在本次计中,利用的系统开发平台为MATLAB。

设计方案中,实现了编码,纠错,译码。

从循环的原理动身,讨论循环码编译码系统的特点。

以一个(15,11)循环码的编译码的设计与仿真为例,利用C语言对该系统进行了设计。

关键词:

MATLAB;C语言;CRC循环冗余校验码

1.概要

循环码的介绍

随着运算机通信的日趋进展,传输数据的场合愈来愈多。

串行数据的过失查验是保证数据传输正确的必要手腕,而循环码是过失码中最常常利用的一种编码。

循环冗余校验码(CRC)的大体原理是:

在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。

对于一个给定的(N,K)码,能够证明存在一个最高次幂为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]。

循环码具有许多特殊的代数性质,这些性质有助于依照要求的纠错能力系统地构造这种码,能简化译码算法,而且目前发觉的大部份线性码与循环码有紧密关系。

已有循环码编译码系统大多以标准逻辑器件(如中小规模TTL系列、CMOS系列)按传统数字系统设计方式设计而成,其主要缺点是逻辑规模小、功耗大、靠得住性低。

随着大规模、超大规模集成电路的进展,和电子设计自化水平的提高,这种制约正在被逐渐消除。

一、循环校验码(CRC码):

是数据通信领域中最常常利用的一种过失校验码,其特征是信息字段和校验字段的长度能够任意选定。

二、生成CRC码的大体原理:

任意一个由二进制位串组成的代码都能够和一个系数仅为‘0’和‘1’取值的多项式一一对应。

例如:

代码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码字。

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)

发送方:

发出的传输字段为:

 10110011010

          信息字段   校验字段

接收方:

利用相同的生成码进行校验:

接收到的字段/生成码(二进制除法)

若是能够除尽,则正确。

2MATLAB大体介绍

MATLAB的介绍

MATLAB是美国MathWorks公司出品的商业数学软件,主要包括MATLAB和Simulink两大部份。

  MATLAB是矩阵实验室(MatrixLaboratory)的简称。

MATLAB能够进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处置与通信、图像处置、信号检测、金融建模设计与分析等领域。

  MATLAB的大体数据单位是矩阵,它的指令表达式与数学、工程中常常利用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的情形简捷得多,而且mathwork也吸收了像Maple等软件的长处,使MATLAB成为一个壮大的数学软件。

在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。

能够直接挪用,用户也能够将自己编写的实用程序导入到MATLAB函数库中方便自己以后挪用,另外许多的MATLAB爱好者都编写了一些经典的程序,用户能够直接进行下载就可以够用。

MATLAB的组成部份

(1)开发环境(developmentEnvironment):

一组图形化用户接口工具和组件的集成:

MATLAB桌面、命令窗口、命令历史窗口、编辑调试窗口及帮忙信息、工作空间、文件和搜索路径等阅读器;

(2)MATLAB数学函数库:

(MathFunctionLibrary)大体函数:

求和、正弦、余弦和复数运算等;特殊函数:

矩阵求逆、矩阵特征值、贝塞尔函数和快速付里叶变换等;

(3)MATLAB语言:

(MATLABLanguage)一种高级编程语言,包括控制流的描述、函数、数据结构、输入输出及面对对象编程;

(4)句柄图形:

(HandleGraphics)能够对各类图形对象进行更为细腻的修饰和控制,成立完整的图形界面的应用程序;

(5)应用程序接口:

(AppliedFunctionInterface)MATLAB的应用程序接口允许用户利用C或FORTRAN语言编写程序与MATLAB连接。

MATLAB的特点

(1)此高级语言可用于技术计算;

  

(2)此开发环境可对代码、文件和数据进行管理;

  (3)交互式工具能够按迭代的方式探查、设计及求解问题;

  (4)数学函数可用于线性代数、统计、傅立叶分析、挑选、优化和数值积分等;

  (5)二维和三维图形函数可用于可视化数据;

  (6)各类工具可用于构建自概念的图形用户界面;

  (7)各类函数可将基于MATLAB的算法与外部应用程序和语言(如C、C++、Fortran、Java、COM和MicrosoftExcel)集成。

MATLAB的优势

(1)友好的工作平台和编程环境

(2)简单易用的程序语言

(3)壮大的科学运算机数据处置能力

(4)超卓的图形处置功能

(5)应用普遍的模块集合工具箱

(6)实用的程序接口和发布平台

(7)应用软件开发(包括用户界面)

3设计原理

编码器模块

按照给定的(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乘信息码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(x)的系数1表示有反馈,0表示无反馈。

每一个寄放器的初始值均为0,将码组m3m2m1m0依次串行送入电路的最高端,相当于对其后面补三个零,除法电路通过四次移位后,寄放器D1D2D3里的数即为余式r(x)。

因此,编出码组T(x)=(m3m2m1m0D1D2D3)。

实际设计中,要有一个信号K来控制码组的输入与输出,在K的控制下,输入的信息码元,一方面串行输入信道,另一方面进入除法电路进行计算。

当输入最末一名信息码元结束时,K信号也为零,在时钟脉冲作用下,移位寄放器将计算结果送往信道,即在最末一名信息码元后附加监督码。

译码器模块

接收端译码的要求有两个:

检错和纠错。

(1)检错若接收码组R(x)与发送码组相同,即R(x)=T(x),则R(x)一定能被g(x)整除;若在传输中发生错误,即R(x)≠T(x),则R(x)被g(x)除时可能除不尽而有余项,从而发生错误。

因此,能够以余项是不是为零来判断接收码组中有无错误。

可是,有错码的接收码组也有可能被g(x)整除,这时的错码就不能检出。

这种错误称为不可检错误,其误码一定超过了此编码的检错能力。

(2)纠错

为了能够纠错,要求每一个可纠正的错误图样必需与一个特定余式有一一对应关系。

只有存在上述一一对应的关系时,才可能从上述余式唯一地决定错误图样,从而纠正错码。

以下是为纠错而设计的。

由于(7,4)循环码的最小码距为d0=3,由d0≥2t+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)=rem[T(x)+E(x)]=rem[E(x)]

g(x)g(x)

对于一个S(x),E(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两种状态,明白错误位置后,能够直接对该位置的码元取反即可。

综上所述,纠错的步骤如下:

(1)把接收码组R(x)送入除法电路,得到余数D1D2D3即为伴随矩阵S(x)。

(2)由典型生成矩阵G和典型监督矩阵HT之间的关系可进一步求得,再由S=可得错误图样E(x),如此就可以够肯定错码的位置。

(3)按照错误的码位,对该码位的码元取反输出即可取得原发送码组T(x)。

其中,T(x)的前四位即为译出码元m(x)。

图译码器示用意

4设计思想

程序流程图

图1CRC编码程序流程图

5CRC编解码系统的设计及实现

取n=15,r=9,k=6,生成多项式G(X)=X^9+X^6+X^5+X^4+X+1,设计了CRC编译码系统,其框图如图1所示。

该系统包括发端电路和收端电路两部份。

发端有信码发生器模块、编码器模块,收端有模拟错码发生器模块、错码位置计算模块、纠错单元模块。

其中错码位置计算单元和纠错单元合在一路组成译码器。

程序设计

MATLAB程序编写

%CRC编码主程序

clear;clc;closeall;

uncode_sequence=randint(1,11)

sequence_length=length(uncode_sequence);%取得原始信号长度

crc_ccitt=[11001];%常常利用的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则将除数所有位置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

add_len=length(crc_coded_sequence)-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=[11001];%常常利用的CRC生成多项式

remainder_bits=crc_coded_sequence;%初始化余数数组

cycle_length=sequence_length-length(crc_ccitt)+1;

%计算长除法的循环周期

fork=1:

cycle_length%开始循环计算长除取得最终余数

add_zeros=zeros(1,cycle_length-k);

%加入冗余位参与模2运算

register_bits=[crc_ccittadd_zeros];%构造除数数组

ifremainder_bits

(1)==0

%被除数第一名为0则将除数所有位置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

ifsum(remainder_bits)==0%传输码元中没有发生奇数个错误

original_sequence=crc_coded_sequence(1:

cycle_length)

else

err=1%码元传输发生错误

 

系统仿真

运行结果及其分析

运行结果

MATLAB的运行结果如下:

图2程序仿真图

结果分析

CRC校验的大体思想是利用线性编码理论,在发送端按照要传送一个n比特的帧或报文,发送器生成一个r比特的序列,称为帧查验序列(FCS)。

如此形成的帧将由(n+r)比特组成。

那个帧恰好能被某个预先规定的数整除。

接收器用相同的数去除外来的帧,结果无余数,则以为无过失。

循环冗余校验与奇偶校验不同,或是一个字符校验一次,而前者是一个数据块校验一次。

在同步通信中,几乎都利用这种校验方式。

二进制多项式的加减运算为模2加减运算,即两个码多项式相加时,对应系数进行模2加减。

所谓模2加减就是列位做不带进位、借位的按位加减。

这种加减运算实际上是逻辑上的异或运算,即加法和减法等价。

信息多项式和余数多项式能够归并成一个新的多项式(称为循环码的码多项式),则该多项式是生成多项式的整数倍,即能被宣称多项式整除。

按照这一原理,在发送端用信息码多项式除以生成多项式所得的余数多项式就是所要加的监督位。

将循环码的码多项式除以生成多项式,若能除尽,说明传输正确,不然说明犯错。

CRC校验的关键是如何求出余数,此余数即为校验码(CRC校验码)。

以前用数字电路来实现,而此刻能够用运算机来完成。

为了传输的正确性,在接收端要有一个CRC查验器。

它的功能和发生器一样,当收到CRC冗余校验码后,做一样的模2除法(注意,这里采用的生成多项式必然要与发送端相同)。

若是余数是0,则说明传输正确;不然,传输错误,应重传。

本次课设通过对(15,11)循环码的编译码的设计与仿真得出仿真进程取得的结论与理论是一致的。

6总结

本设计研究了循环冗余校验码的原理,和利用MATLAB对其进行了编程和仿真,取得的结论和理论上大体是一致的。

通过这次课程设计使我知道了理论与实际相结合的必要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立试探的能力。

在本次课程设计中,我碰到了很多问题,刚开始我并非是用的MATLAB来做的,而是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]黄智伟.基于NIMultisim的电子电路计算机仿真设计与分析(修订版)[M].北京:

电子工业出版社,2011,6.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 成考

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

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