CRC校验

CRC即循环冗余校验码(Cyclic Redundancy Check:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

CRC码由两部分组成,前一部分是k+1个比特的带发送信息,后一部分是r个比特的冗余码。由于前一部分是实际要传输的内容,因此是固定不变的,CRC码的产生关键在于后一部分冗余码的计算。

计算中主要用到两个多项式:f(x)和G(x)。其中,f(x)是一个k阶多项式,其系数是待发送的k+1个比特序列;G(x)是一个r阶多项式,由发收双方预先预定。例如,设实际发送的信息序列是1010001101(10个比特,k = 9),则以它们作为f(x)的系数,得到对应的9阶多项式为
f(x)  = 1*x^9+0*x^8+1*x^7+0*x^6+0*x^5+0*x^4+1*x^3+1*x^2+0*x+1 = x^9+x^7+x^3+x^2+1
再假设发送双方预先预定了一个5阶(r = 5) 的生成多项式G(x) = x^5+x^4+x^2+1 = 1*x^5+1*x^4+0*x^3+1*x^2+0*x+1,则其系数序列为110101。

CRC码的产生方法如下。

1、生成r个比特的冗余码:用模2除法进行x^r*f(x)/G(x)运算,得余式R(x),其系数即是冗余码。
例如,x^5*f(x) = x^14+x^12+x^8+x^7+x^5,对应的二进制序列为101000110100000,也就是f(x)信息序列向左移动r = 5位,低位补0。

x^5*f(x)/G(x) = (101000110100000)/(110101),得余数为01110,也就是冗余码,对应的余式R(x) = 0*x^4+x^3+x^2+x+0*x^0(注意若G(x)为r阶,则R(x)对应的比特序列长度为r)。


注意:模2除法在做减法时不借位,相当于在进行异或运算。

2、得到带CRC校验的发送序列:用模2减法进行x^5*f(x) -R(x)运算得到带CRC校验的发送序列,即x^5*f(x) - R(x) =
101000110101110。从形式上看,也就是简单地在原信息序列后面附加上冗余码。
在接收方,用同样的生成多项式G(x)除所收到的序列。若余数为0,则表示传输无差错,否则说明传输过程出现差错。例如,若收到的序列是 101000110101110,则用它除以同样的生成多项式G(x) = x^5+x^4+x^2+1 (即110101)。因为所得余数为0,所以收到的序列无差错。


例题:若要传送的信息序列为100000101,生成多项式为G(x) = x^5+x^4+x^2+1,求CRC码的校验序列码,若收到的数据比特序列为100010010100011,验证其正确性。

解:发送数据对应的比特序列为1000100101。生成多项式对应的比特序列为110101(k = 5)。

F(x)*x^k对应的比特序列为100010010100000。将F(x)*x^k对应的比特序列用生成多项式对应的比特序列110101去除,
                        
由上图我们求得余数比特序列为00011(5位),就是CRC码的校验序列码。将收到的比特序列用生成多项式对应的比特序列110101去除,(也就是用100010010100011去除以110101)若能被整除,数据传输正确,否则传输错误,计算过程按照模2算法与前面相同。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值