《CRC计算方法.docx》由会员分享,可在线阅读,更多相关《CRC计算方法.docx(4页珍藏版)》请在优知文库上搜索。
1、1CRC校验原理CRC校验原理看起来比较困难,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实很简洁的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要留意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(留意,这里不是干脆采纳二进制除法,而是采纳一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以(同样采纳“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应当是没有
2、余数。假如有余数,则表明该帧在传输过程中出现了差错。【说明】“模2除法”与“算术除法”类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:17=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。也就是比较后,两者对应位相同则结果为“0”,不同则结果为“1。如100lOl除以1110,结果得到商为11,余数为1,如图5-9左图所示。如1111=101,如图5-9右图所示。图5-9“模2除法”和“模2乘法”示例详细来说,CRC校验原理
3、就是以下几个步骤:(1)先选择(可以随机选择,也可按标准选择,详细在后面介绍)一个用于在接收端进行校验时,对接收的帧进行除法运算的除数(是二进制比较特串,通常是以多项方式表示,所以CRC又称多项式编码方法,这个多项式也称之为“生成多项式。(2)看所选定的除数二进制位数(假设为k位),然后在要发送的数据帧(假设为m位)后面加上k-1位“0”,然后以这个加了k-1个“0的新帧(一共是m+k-1位)以“模2除法”方式除以上面这个除数,所得到的余数(也是二进制的比特串)就是该帧的CRC校验码,也称之为FCS(帧校验序列)。但要留意的是,余数的位数肯定要是比除数位数只能少一位,哪怕前面位是0,甚至是全为
4、0(附带好整除时)也都不能省略。(3)再把这个校验码附加在原数据帧(就是m位的帧,留意不是在后面形成的m+k-1位的帧)后面,构建个新帧发送到接收端,最终在接收端再把这个新帧以“模2除法”方式除以前面选择的除数,假如没有余数,则表明该帧在传输过程中没出错,否则出现了差错。通过以上介绍,大家肯定可以理解CRC校验的原理,并且不再认为很困难吧。从上面可以看出,CRC校验中有两个关键点:一是要预先确定一个发送端和接收端都用来作为除数的二进制比特串(或多项式):二是把原始帧与上面选定的除进行二进制除法运算,计算出FCSo前者可以随机选择,也可按国际上通行的标准选择,但最高位和最低位必需均为“1”,如在
5、旧M的SD1.C(同步数据链路限制)规程中运用的CRC-16(也就是这个除数一共是17位)生成多项式g(X)=6+/5+2+1(对应二进制比特串为:):而在ISOHD1.C(高级数据链路限制)规程、ITU的SD1.CX.25、V.34、V.41、V.42等中运用CCHT-16生成多项式g(X)=X16+X15+X5+1(对应二进制比特串为:)。2.CRC校验码的计算示例由以上分析可知,既然除数是随机,或者按标准选定的,所以CRC校验的关键是如何求出余数,也就是CRC校验码。下面以一个例子来详细说明整个过程。现假设选择的CRC生成多项式为G(X)=X4+X3+1,要求出二进制序列IOI100ll
6、的CRC校验码。下面是详细的计算过程:(1)首先把生成多项式转换成二进制数,由G(X)=4+3+1可以知道(,它一共是5位(总位数等于最高位的幕次加1,即4+1=5),然后依据多项式各项的含义(多项式只列出二进制值为1的位,也就是这个二进制的第4位、第3位、第O位的二进制均为1,其它位均为0)很快就可得到它的二进制比特串为IIO01。11010100这4个“0”是附加上去的Illll11001余数,因不够要求的4位,所以前面一个“0”不能省略11000IlOOFoToo图5-10CRC校验码计算示例(4)当以上新帧到达接收端后,接收端会把这个新帧再用上面选定的除数11001以“模2除法”方式去除,验证余数是否为0,假如为0,则证明该帧数据在传输过程中没有出现差错,否则出现了差错。Energy-balancedalgorithmforRFIDEstimation