CRC循环冗余校验计算

时间:2021-10-17 11:58:05

CRC循环冗余校验计算

   循环冗余校验(Cyclic Redundancy Check, CRC)是一种主要用来检测或校验数据传输过程中出现的错误,是一种常用且强大的检错方法,在数据块同步传输方式中都使用CRC检验。

特点:信息字段和校验字段的长度是任意的!

   循环冗余校验同其他差错检测方式一样,通过在要传输的k比特数据D后添加(n-k)比特冗余位(又称帧检验序列,Frame Check SequenceFCS)F形成n比特的传输帧T(如下图),再将其发送出去。

CRC的基本原理:

发送方:用一个n+1位二进制码元序列(冗余码生成多项式)去除(模2除、异或)要传输的码元序列*2n,把得到的余数作为帧校验序列附加在要传输的码元序列后面,组成带CRC校验码的数据帧发送到出去;接收方使用与发送端相同的冗余码多项式,对接收到的数据帧进行模2除,如果结果余数为0,表示传输正确,否则传输有误。

 

例:假设要传输的码元序列为:10111,使用的冗余多项式:G(X)=X4+X+1,转换后的二进制码序列为:10011,即n=4,那么(10111*24=101110000(即在码序列后加n0,这里n=4)。(101110000)模2除(或按位异或)运算:


   发送方得到CRC校验的数据帧:“101111100”并发送出去。接收方使用冗余码生成多项式“10011”,对接收到的数据帧进行模2除。如果接收到的内容为“101111100”,模2除的结果余数为0;如果传输中有1位或即几位错误,那么模2除的结果余数不为0.

 


补充:

多项式:任意一个由二进制位串组成的代码都可以和一个系数尽为1”或“0”取值的多项式一一对应。例如:代码11011对应的多项式为G(X)=X4+X3+X1+1,这里的最高次幂表示代码串的n+1个数,系数为0的对应项补0.

 

在求校验码(FCS)时可使用模2除法也可使用按位异或法求得。