CRC校验原理及推导过程.docx

上传人:b****5 文档编号:14727494 上传时间:2023-06-26 格式:DOCX 页数:15 大小:118.11KB
下载 相关 举报
CRC校验原理及推导过程.docx_第1页
第1页 / 共15页
CRC校验原理及推导过程.docx_第2页
第2页 / 共15页
CRC校验原理及推导过程.docx_第3页
第3页 / 共15页
CRC校验原理及推导过程.docx_第4页
第4页 / 共15页
CRC校验原理及推导过程.docx_第5页
第5页 / 共15页
CRC校验原理及推导过程.docx_第6页
第6页 / 共15页
CRC校验原理及推导过程.docx_第7页
第7页 / 共15页
CRC校验原理及推导过程.docx_第8页
第8页 / 共15页
CRC校验原理及推导过程.docx_第9页
第9页 / 共15页
CRC校验原理及推导过程.docx_第10页
第10页 / 共15页
CRC校验原理及推导过程.docx_第11页
第11页 / 共15页
CRC校验原理及推导过程.docx_第12页
第12页 / 共15页
CRC校验原理及推导过程.docx_第13页
第13页 / 共15页
CRC校验原理及推导过程.docx_第14页
第14页 / 共15页
CRC校验原理及推导过程.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

CRC校验原理及推导过程.docx

《CRC校验原理及推导过程.docx》由会员分享,可在线阅读,更多相关《CRC校验原理及推导过程.docx(15页珍藏版)》请在冰点文库上搜索。

CRC校验原理及推导过程.docx

CRC校验原理及推导过程校验原理及推导过程1.1伽罗华域

(2)在伽罗华域

(2)中的元素由

(2)上的本原多项式构造,域中的元素两两运算之后例如当=4,本原多项式为:

()=+1,

(2)中的元素集合CRC校验原理及推导过程1代数引论参考文献1对伽罗华域、线性码、循环码、缩短循环码进行了很好的论述。

的结果依然是该域中的元素,域中运算是基于模2的。

440,1,2,3,14,转换为十六进制数依次对应为0,1,2,4,8,3,6,5,7,9,转换为多项式依次对应为0,1,2,3,+1,2+,3+2,3+1,2+1,3+,2+1,3+2+,3+。

于是:

15=14=(1+3)=+4=+1+=17+5=(2+)+(3+1)=3+2+1=131.2模运算法则模运算与基本四则运算有些相似,但是除法例外。

其规则如下(a+b)%p=(a%p+b%p)%p(1-1)(a-b)%p=(a%p-b%p)%p(1-2)(ab)%p=(a%p)(b%p)%p(1-3)ab%p=(a%p)b)%p(1-4)结合率:

(a+b)%p+c)%p=(a+(b+c)%p)%p(1-5)(ab)%pc)%p=(a(bc)%p)%p(1-6)交换率:

(a+b)%p=(b+a)%p(1-7)(ab)%p=(ba)%p(1-8)分配率:

(a+b)%pc)%p=(ac)%p+(bc)%p)%p(1-9)一个长度为,有2个码字的分组码,当且仅当其2个码字构成

(2)域上1.3线性分组码和循环码所有维向量组成的向量空间的一个维子空间是被称为(,)线性码。

线性码的码字由位消息部分和()位冗余校验部分组成。

循环码事线性分组码的一个重要的子类,其有两个引入注目的原因:

一是通过带反馈连接的移位寄存器(一般称为线性时序电路),其编码和校正计算能够很容易的实现;二是由于其具有固有的代数机构,都能找到很多种实用的方法进行译码。

一个(,)线性码C,如果每个码字的循环移位后的数仍是C的码字,则成为其为循环码。

给定一个(,)循环码的生成多项式g(x)=+11+1+1,假设待编码的消息为u=(1,2,1,u0),则相应的消息多项式为:

u()=11+22+1+u0(1-10)用乘以u(),得到次数不大于

(1)的多项式为:

u()=11+22+11+u011)用生成多项式g(x)除u()得到:

(1-u()=()()+v()(1-12)其中,()和v()分别为商式和余式。

由于g(x)的最高次数为(),则()的次数必不大于(-1)。

从而有()=11+1+0整理得到次数不大于

(1)的多项式:

u()+()(1-13)=()()=11+22+11+u0+11+1+0(1-14)该多项式能被多项式g(x)整除。

相应的完整码字为:

(1,2,1,u0,1,1,)(1-15)1.4缩短的循环码在系统设计中,如不能找到一个具有合适的自然长度的或者信息位数目的码字,缩短码是一种有效的解决方案。

对一个(,)循环码,其中信息位的高位均为零的码字共有2个,构成了的线性子码。

若从这些码字中删除这个零信息位,将得到2个长度为n的向量,这些向量组成了(,)线性码。

这种码被称为缩短循环码,但不是循环码。

缩短循环码的纠错能力与差错检测能力至少与原码相同。

1.5冗余码所用符号数或信号码元数比表示信息所必需的数目多的代码叫冗余码。

1.6循环冗余检验循环冗余检验英文名称为CyclicalRedundancyCheck,简称CRC。

它是利用多项式除法及余数的原理来做错误检测的。

它将要发送的数据比特序列当作一个信息多项式u()的系数,发送时去除以约定的生成多项式g(x),得到一个余数多项式v(),将余数多项式加到信息多项式之后发送到接收端,接收端同样用g(x)去除接收到的接收多项式r(),进行计算,然后把计算结果与由生成多项式g(x)决定的固定序列比较,来检测传输错误。

由此可以看出其同时具有循环码和冗余码的特征,所以这种错误检测方法叫循环冗余校验,编码叫循环冗余校验码,即如式1-15所示。

理论上可以证明循环冗余校验码的检错能力有以下特点:

(1)可检测出所有奇数位错。

(2)可检测出所有双比特的错。

(3)可检测出所有小于、等于校验位长度的突发错。

2CRC码编码在1.3节线性分组码和循环码中得到算式1-15的计算过程就是循环冗余校验码的编码步骤,归纳起来有以下三步骤:

第1步预先用乘以信息多项式u(),得到u();第2步用生成多项式g(x)去除u(),获得余式v();第3步整合余式v()和u(),获得码多项式u()+()。

对于一个(,)循环码,生成多项式g(x)=+11+11+1,编码电路有两种方式:

一,信息位由高位到低位的顺序从循环移位寄存器体左侧依次输入,信息位完全进入循环体后继续输入n1个0,最后循环体中寄存器的值就是余式码字;g0g1gn-k-1Din+D+D1+Dn-k-1图1左侧串行输入循环移位寄存器体二,信息位由高位到低位的顺序从循环移位寄存器体右侧依次输入,信息位完全进入循环体后寄存器的值就是余式码字。

g0g1gn-k-1D+D1+Dn-k-1+以CRC4为例,其生成多项式为:

g(x)=+1,当信息多项式Din图2右侧串行输入循环移位寄存器体注:

1,移位寄存器循环体中余式码字低位在左侧,高位在右侧。

4u=(101011)时用两种方法计算得到得余式码字是一样的:

=(0100),编码后完整地码字为:

(1010110100)。

图三所示的两种计算余式码字的方法对应于数字电路中D触发器、加法器、乘法器的组成的循环体结构分别为图1、图2所示。

方法一方法二0101101010101101011001101101011010110101001101001010010100110001010011100001001100110000000110100001110010011011110000011110100110110110000010101000001001010110001000100图3信息位为单比特两种方法比较3CRC码校验3.1CRC码校验的基本原理所有的CRC校验都是基于以下这个等式:

(+)=0(3-1)其中=u(),u()=11+1+u0,=,=11+1+0,g(x)=+11+1+1。

息字段多项式的最高次幂,取决于k的值即=2,是信息字段长度,G是生M是信息字段(Message)多项式,R是校验字段(Remainder)多项式,r是校验字段多项式的最高次幂(也就是校验字段的长度,CRC-32对应的k,依次类推),是信息字段加上冗余校验码后多项式的最高次幂,k是信k成(Generator)多项式。

由此可见CRC32信息字段最大比特数为232-32,除此之外的信息字段编码就是缩短的CRC32编码。

发送端M和G(对某一种确定的CRC校验,其G是固定的)是已知的,CRC计算就是为了求出校验字段R;接收端M,R,G都是已知的,主要的操作都是为了验证等式是否成立,方法有很多种。

下表展示了用于被用于一些常用的CRC标准的生成多项式,Hex列表示生成多项式对应的十六进制,MSB(mostsignificantbit,可以理解为最左边的一位)省略,因为该位总是为1:

表一几种典型CRC生成多项式3.2发送端和接收端的具体处理方法参考文献2对CRC校验码的接收端有具体处理的描述,缺少中间推导过程。

CRC校验码在工程应用过程中相比数学计算稍微有些变化:

1,在发送端对全0数据包的编码处理。

数学计算中,当信息字段全部为0时的得到的余式码字也是全零的,但是在工程应用中,当非0信息字段在编码后发送给接收端,在线路传输中出现干扰或者是其他情况的错误,导致接收端收到的全零数据,即信息字段和余式字段都为0。

如果在发送端不做特殊处理,在接收端就检验不出来这样的错误数据包。

于是,在通信传输时,很多协议规定在发送端对CRC编码时定义一个Key寄存器,对CRC编码进行初始化,定义一个不为0的初值,Key寄存器通常被设置为全1。

结合图1、图2来说,就是在信息输入给循环体之前,其D触发器的值为1。

2,对接收端收到的数据包中拖尾0数据的处理。

接收端接收到信息字段和余式字段,计算出数据包的余式码字,并与余式字段做比较,就能检测出错误。

更简单的做法是,接收端对接收到的所有数据求余式(包括信息字段和余式字段),如果没有传输错误所得的余式一定为0。

但是,余式为0并不一定能够说明数据包没有改变,如果数据包在余式字段后有0增加或者删除的情况出现,就无法被检测出来。

为了更好的理解公式的推导过程,需要用到1.2节中的几个关于取模运算法则。

接收端如何才能识别无差错的传输呢?

我们知道在发送侧满足:

(+)=0(3-1)如果用R表示R对1取反,我们得到:

(Mx+)modG=(Mx+(x1+x2+1)=()+x1+x2+1)=(+)+x1+x2+1)=(M+)modG)+(1+2+1)=(0+(1+2+1)=(1+2+1)=(1+2+1)因此,在发送端发出来的无差错的传输的校验序列应该是:

在接收侧收到的完整码字多项式:

=+用多项式G对取模为:

(1+2+1)(3-2)(3-3)()=(+)=(+(1+2+1))=(+(1+2+1+))=(+(1+2+1)=(+(1+2+1)=(1+2+1)=(1+2+1)因此,在接收端计算出的无差错的传输的校验和应该是:

(1+2+1)(3-4)对于给定的生成多项式G,上式是一个常数,对CRC-32而言,该值成为余式多项式为:

31+30+26+25+24+18+15+14+12+11+10+8+6+5+4+3+1(3-5)余式值用十六进制表示:

C704DD7B。

到此,关于通信用的CRC校验实现原理除了通信过程中比特流顺序之外,基本上是理顺,使得知其然也知其所以然。

参考文献1纠错码原理参考文献2CYCLICREDUNDANCYCHECK

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

当前位置:首页 > 小学教育

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2