实例解析CRC(循环冗余检验码)

循环冗余校验码(CRC),是一种能力相当强的具有检错、纠错能力的校验码,常用于串行传送的辅助存储器与主机的数据通信和计算机网络中

 

为什么要使用CRC?

(在计算机网络中的应用)

数据在传输过程中,可能会产生比特差错:1可能变为0, 0可能变为1,因此为了保证数据传输的可靠性,必须采用各种差错检测措施

目前在数据链路层中广泛采用的就是循环冗余检验CRC的检错技术

(CRC技术也很容易实现)

 

CRC码

CRC码又称多项式码,任何一个二进制数都可以和一个对应的多项式建立一一对应的关系

举例

1011011对应的多项式为x^{6} + x^{4} + x^{3} + x + 1

解析:对应位上为1,则加上对应位的x多少次方

比如,以上,第六位为1(二进制数最右面是第0位),则加上 x^{6} ;第五位为0,则不加;第四位为1,则加上x^{4},以此类推

思考

x^{5} + x^{4} + x^{2} + 1 对应的代码是多少?

答案:110101

 

模2运算

对应位进行异或操作:相同为0,不同为1

CRC原理

CRC运算就是在发送的数据后面加上 r 位冗余位,构成一个由 k 位信息位,加上 r 位冗余位组成的 n = k + r 位码字发出去

也许直接看概念或者原理,可能会不容易理解,所以这里直接给出例题进行讲解

例题:

当我们要发送一帧数据时,要发送的数据为101110。采用CRC 生成多项式是P(x) = x^{3} + 1。试求应添加在数据后面的余数

  • 每组比特数 k = 6(因为数据101110有6位)
  • 除数 = 1001,n = 3(因为根据x^{3} + 1得出对应二进制为1001,最高次幂为3,所以n = 3)
  • 先进行移位,得被除数 = 101110000(就是将要发送的数据后面补 n 个0)
  • 求余:进行模二除法,得余数 = 011(求余过程如下)

图中可以看到,最后的余数为 011

所以当我们发送数据的时候,就可以将此余数添加到要发送的数据后面,也就是 101110011,这就是编码后的CRC码,我们将其发送即可

当码字到达接收端时

  • 若CRC码在接收端能被除数 1001 整除,则说明接收正确
  • 若CRC码不能被除数整除,则检测到出错

 

循环冗余校验码的检错能力:

  1. 可检测出所有奇数位错
  2. 可检测出所有双比特的错
  3. 可检测出所有小于、等于校验位长度的突发错

 

总结

采用CRC时,需要约定一个生成多项式(除数)

发送方:信息位 + 冗余位 = 发送码字 (冗余位就是上面例题中求的余数)

接收方:用收到的CRC码字除以生成多项式(除数),判断余数是否为0

  • 为0:接收正确,接收数据帧
  • 不为0:接收有错,丢弃数据帧
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值