欢迎来到通信人在线![用户登录] [免费注册]

循环冗余校验码(CRC)介绍

浏览:12919  来源:通信人在线  日期:2020-03-02

一、关于纠错与检错

纠正数据传输中出现的错误原则上可有两种做法:一是直接采用纠错码对某些错码进行纠正;二是利用检错码(校验码)进行检错,然后对出错帧进行重传。纠错码以增加附加比特,也即降低传输效率为代价,换来纠错能力。纠错码在某些场合较有实用价值,如单工信道,由于收方即使检测到错误也不可能通知发方重传,要想保证传输内容的正确性,只好采用纠错码。在大多数情况下,采用检错码加重传的方式效率更高,特别是在通信误码率较低的场合。

最简单的检错方式为奇偶校验法,即在每个数据块上增加1个奇偶位,当数据块中出现奇数个比特错时能被检测出来,因此能检测到差错的概率只有0.5,这很难被接受。改进措施可以采取将每个数据块组成一个n位宽和k位高的长方形的矩阵来发送。按列计算奇偶并将各列的奇偶校验位放在一起,作为矩阵的最后一行,而发送时则按行进行。数据块到达时,收方检测所有的奇偶位。假若其中任何之一错了,就需要重传整个块。这样做,对非单比特突发性错(多比特连续错)在横行的发送中可能影响到数列的单个比特,而容易被相关列中的奇偶校验位检测出来。

这种方法能够检测长度为n的非单个突发性差错,长度大于n的突发性连续差错将不会被检测到(注意:一个突发性非单比特错并不是意味着所有的位都出错了,但至少第1和最后1位出错),因为每列中就可能出现偶数个比特错,该列的奇偶校验不能检查出偶比特错。假若一个块被一个长的突发干扰或多个较短突发干扰所破坏,n列中每1列的奇偶值碰巧都正确的概率为0.5,那么,这个出错块被当作正确数据接受的概率是2 -n

欲进一步了解差错控制编码原理的请进入

二、关于循环冗余校验码(CRC

尽管上述策略有时已经足够了,但在实践中广泛采用的是另一种方法,即多项式编码,也叫循环冗余校验码(CRCCyclic Redundancy Check)。多项式码将比特串看成系数只能取01的多项式,因此,一个k比特帧可以看成从x k-1x0k项多项式的系数序列。这个多项式的阶数为k-1,高位(最左边)是x k-1的系数;下一位是x k-2的系数,依次类推。例如,110001具有6位,其中252420的系数为1,相应的多项式表示为x 5+ x 4+ x 0

1、关于模2运算:为了进行后面的讨论,先对多项式运算作一简要介绍。多项式以2为模运算,加法不进位,减法不借位。模2加法和减法实际上都是进行逻辑“异或”运算。例如下图2-1-1

2-1-1:以2为模运算法

多项式除法同二进制运算一样,只要被除数具有和除数同样多的位,即把除数按模2从被除数中减去(也即按模2进行加法)

如果采用多项式编码法,发方和收方必须事先商定一个生成多项式G(x)Generator polynomial)。生成多项式的最高位(比特)和最低位必须是1。要计算m位的帧M(x)的校验和(Checksum,也常称为帧校验序列(FCSFrame Check Sequence)),生成多项式必须比该多项式M(x)短。其基本思想是:将校验和加在帧的末尾,使这个带校验和的帧的多项式能被G(x)除尽。显然,用G(x)M(x)所得余数作为校验和(FCS)与M(x)一道组成的带校验和的帧一定能被G(x)整除。当收方收到该帧时,用G(x)相除,如果有余数,则表明传输有错。计算校验和的算法如下表2-1所示。

2-1:计算校验和的算法过程

下图2-1-2演算了帧1101011011G(x)x 4+x+1除而获得余数的计算过程。在图中,原始帧的比特串M(x)为:1101011011,相应的多项式为:

2-1-2:模2除法过程

x 9+ x 8+ x 6+ x 4+ x 3+ x1 + x 0

生成多项式的比特串G(x)t10011,相应的多项式为

x 4+ x 1+ x 0

加上40的帧为:11010110110000,相应的多项式为:

x 13+ x 12+ x 10+ x 8+ x 7+ x 5+ x 4

用加0后的帧除以G(x),经上图中计算后获得的余数为:1110,加上40的帧与余数相加,即得到用于线路上传送的帧的比特串T(x) 11010110111110。在任何除法问题中,如果用被除数减去余数,则剩下的部分能够被除数除尽。由于T(x)是由被除数减去余数得来的,显然能被被除数G(x)除尽(模2)。

2CRC的检错能力分析:现在让我们来分析这种方法的检错能力,看看它能够检查出什么类型的误码。如果出现了1个突发性连续差错(Burst Errors),记作少E(x),则收到的多项式会变成T(x)+E (x) 。突发性连续差错的特点是初始位是“1”,然后是“0”和“1”的某种组合,最后一个比特为“1”。由于E(x)中的每个“1”都会使T(x)中的对应比特变反,因此,如果E (x)中有k个“1”,即会产生k比特的差错。

由于有E(x)的存在,接收方所收到的帧,将变为带校验和的多项式T(x)E (x)之和。收方用生成多项式G(x)去除收到的帧,即计算[T(x)+E(x)]/ G(x)。由于T(x)/ G(x)余数总是0,所以运算结果就变成E(x)/G(x)的余数。如果E(x)能被G(x)整除,余数为0。这可能有两种情况:① E(x)=0;② E(x)G(x)的整数倍。因此,如果收方用余数为移判定传输无错,只有情况②属于判断错误;情况①则代表确无差错。

假定传输过程中只有单个比特错,即E(x) = x i (iT(x)出错比特项次),由于G(x)内至少有两项为1,因此,E(x)/G(x)不可能余数为0,于是所有的单比特差错都能被查出。

如果发生两个孤立的单比特差错,即E(x) = x i +x j(其中i>j)。我们把E(x)改写成:

E(x)x j (x i-j+1)

如果我们假定G(x)不能被x j整除,那么能够发现两个比特错的充分条件是:对小于或等于i-j的最大值(即最大帧长)的任何k值,G(x)都不能除尽x k+1。已经知道一些可用于长帧纠错的简单低阶多项式。例如,对于小于32768(比特)的k值,x15+x14+1不可能整除差错多项式E(x)x k+1

如果有奇数个比特错,E(x)将包括奇数个项(例如,x5+x2+1 )。由于奇数项多项式都不能被x+1按模2整除,因此,如果选用x+l的整数倍的多项式做G(x)就能查出所有奇数个比特变反的差错。为了证明项数为奇数的多项式不能被x+l整除,我们先假定E(x)为奇数项多项式,且能被x+1整除。将E(x)进行因式分解,变成(x+1)Q(x)。现在代人值E(1)=(1+1)Q(1)。因为1+1=0(模2),故E(1)=0。如果E(x)具有奇数个项,用1替换所有的x,按模2相加所产生的结果将总是1,与按上述假设计算的结果E(1)=0相矛盾。因此,奇数的多项式不能被x+l整除。

3CRC的检错能力结论:通过上述分析得到最重要的结论是:r比特的校验码能检查出所有长度≤r的突发性连续差错。一个长度为k的突发性连续差错可以表示成x ix k-1++1 ),这里项次i为突发性连续差错的结束位置距接收到的帧最低阶比特的距离(比特数)。如果G(x)包括有x0项,它将不能被x i整除,因此如果圆括号内的表达式的阶低于G(x)的阶,余数不可能为0

如果突发性连续差错长度为r+1,当且仅当突发性连续差错E(x) G(x)一样时,被G(x)除的余数才可能是0。根据突发性连续差错的定义,第一位和最后一位必须是1,因此,它是否相等取决于r-1个中间比特的取值。如果所有01排列出现的概率均等,则将这个出错帧当作正确帧接收的概率是1/2 r-1

可以证明:当一个长度大于r+1的突发性连续差错或几个较短的突发性连续差错发生后,假定被破坏后的帧内所有比特值为“1”或“0”出现的模式是等概率的,则一个出错帧未被检查出来的概率是1/2 r

目前已有多个生成多项式[G(x)]被列为国际标准。其中CRC-12用作以6比特字符为基础的帧校验;其余生成多相式用于以8比特字符为基础的帧校验。使用如CRC-16CRC-CCITT作为生成多项式所产生的16位的校验和。能查出所有的单比特错和双比特错、所有的奇数比特错、所有长度等于或小于16比特的突发性连续差错,99.99%17比特突发性连续差错以及99.998%18比特或18比特以上错。

尽管校验和计算看起来相当的复杂,但和提出用一种简单移位寄存器方法,用硬件来完成对校验和的检验,因而在实践中几乎都采用这种硬件来实现。

欲进一步了解循环冗余码(CRC)多项式标准的请进入

联合国儿童基金会助学
© 2004-2025 通信人在线 版权所有 备案号:粤ICP备06113876号 网站技术:做网站