CRC校验

本文深入介绍了CRC校验的基础概念,包括纠错码与检错码的区别、CRC的工作原理、生成多项式的选择及其应用过程。通过实例演示了如何进行CRC校验,并讨论了其在数据通信中的作用及局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提准备

相关基本概念
- 纠错码:在每一个发送的数据块中包含足够的冗余信息,以便接收方可以推断出被发送的数据中肯定有哪些内容。
- 检错码:包含一些冗余信息,但是这些信息只能让接受放推断出发生了错误,但推断不出发生了哪个错误,然后接收方可以请求重传。
- CRC:即循环冗余码(cyclic redundancy check),又称多项式编码(polynomial code)。属于检错码中的一种(另外一种检错码是奇偶校验码)。是数据通信领域中,最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。
- 生成多项式(generator polynomial):当进行CRC检验时,发送方与接收方需要事先约定一个除数,即生成多项式,一般记作G(x)。生成多项式的位与位必须是1。
- 多项式模2运行:实际上是按位异或(Exclusive OR)运算,即相同为0,相异为1,也是不考虑进位、借位的二进制加减运算。如:10011011 + 11001010 = 01010001。
相关原理
- 生成CRC码的基本原理:将位串看成是系数为0或1的多项式。CRC校验保护的单位是数据块。数据块的大小根据实际情况而定。每一个数据块均被看作是一个二进制多项式,即所有系数均为二进制(0或1)的多项式。比如代码 1 0 1 0 1 1 1 对应的多项式为 x^6 + x^4 + x^2 + x + 1。而多项式 x^5 + x^4 + x^3 + x + 1 对应代码 1 1 1 0 1 1。
- CRC校验原理:收发双方约定一个生成多项式G(x)(其最高阶和最低阶系数必须为1),发送方用位串及G(x)进行某种运算得到校验和,并在帧的末尾加上校验和,使带校验和的帧的多项式能被G(x)整除;接受方收到后,用G(x)除多项式,若有余数,则传输有错。
示例:信息字段代码为:101001,对应m(x) = x^6 + x^4 + x^3 + 1、假设生成多项式为:g(x) = x^4 + x^3 + 1。则对应的g(x)的代码:11001. m(x)^4 = x^10 + x^8 + x^7 + x^4。对应的代码记为:10110010000;
利用多项式除法,得余数为:1010,即是校验字段。
所以:
发送发发出的传输字段是:1011001(信息字段) + 1010(校验字段)。
接受方接受字段:1011001 (信息字段)+ 1010(校验字段)。注意,此时接受的字段(包括校验字段),能够被双方约定好的生成多项式G(x)整除。若有余数,则表示传输有错误,否则,则表示传输无误。

CRC的分类

CRC 根据多项表达式G(x)的不同主要划分为一下几类
多种不同的CRC生成多项式G(x)

计算方法

  • 最高次方决定二进制数字序列,凡有x的位置为1,其它位置为0。
  • 根据二进制数字序列的位数n,在要发送的数据后面补n-1个0;
  • 将得到的新的数据除以二进制数字序列(使用异或算法,不借位),得到一个n-1位数的余数m
  • 将原来要发送的数据序列与余数m构成一个新的数字序列进行发送。
  • 接收方接到发送方发来的数据后,将收到的数据依然用规定的二进制序列来除,如果得到的余数为0,则数据正确,否则重发
  • -

CRC校验具体例子

以CRC-8为例(其他的种类,使用方法类似),发送方,发送一个字母‘a’。
此时,在传输的报文中添加的CRC校验码,可以通过下述步骤获取。
- 生成多项式g(x) = x^8 + x^2 + x + 1,对应代码P = 100000111,位数n = 8。
- a对应的ascii是65,即0x21,二进制表示:M = 0010 0001,也是信息字段。
- 在M后面家加8个0,对P做模2除法运算,获取余数r(x)的代码。
- 所以实际需要发送的数据是00100001(信息码)+11101110(校验码)
- 这里写图片描述

CRC的不足

  • CRC是一种常用的检错码,并不能用于自动纠错。只要经过严格的挑选,并使用位数足够多的除数 P,那么出现检测不到的差错的概率比较小。

  • 仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受并不能保证可靠传输。

  • -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值