`
jiaguwen123
  • 浏览: 415429 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

CRC解释

阅读更多
数据通信中应用最广的一种检验差错方法。方法是在发送端用数学方法产生一个循环码,叫做循环冗余检验码。在信息码位之后随信息一起发出。在接收端也用同样方法产生一个循环冗余校验码。将这两个校验码进行比较,如果一致就证明所传信息无误;如果不一致就表明传输中有差错,并要求发送端再传输。
==============================================

在串行传送(磁盘、通讯)中,广泛采用循环冗余校验码(CRC)。CRC也是给信息码加上几位校验码,以增加整个编码系统的码距和查错纠错能力。

CRC的理论很复杂,一般书上只介绍已有生成多项式后计算校验码的方法。检错能力与生成多项式有关,只能根据书上的结论死记。

循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。

校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成C(x)*2R,这样C(x)的右边就会空出R位,这就是校验码的位置。通过C(x)*2R除以生成多项式G(x)得到的余数就是校验码。
分享到:
评论
2 楼 jiaguwen123 2011-05-07  
CRC(Cyclic Redundancy Check)循环冗余校验码
  是常用的校验码,在早期的通信中运用广泛,因为早期的通信技术不够可靠(不可靠性的来源是通信技术决定的,比如电磁波通信时受雷电等因素的影响),不可靠的通信就会带来‘确认信息’的困惑,书上提到红军和蓝军通信联合进攻山下的敌军的例子,第一天红军发了条信息要蓝军第二天一起进攻,蓝军收到之后,发一条确认信息,但是蓝军担心的是‘确认信息’如果也不可靠而没有成功到达红军那里,那自己不是很危险?于是红军再发一条‘对确认的确认信息’,但同样的问题还是不能解决,红军仍然不敢冒然行动。

  对通信的可靠性检查就需要‘校验’,校验是从数据本身进行检查,它依靠某种数学上约定的形式进行检查,校验的结果是可靠或不可靠,如果可靠就对数据进行处理,如果不可靠,就丢弃重发或者进行修复。

  CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码共长n个bit,信息码长k个bit,就称为(n,k)码。 它的编码规则是:
  1、首先将原信息码(kbit)左移r位(k+r=n)
  2、运用一个生成多项式g(x)(也可看成二进制数)用模2除上面的式子,得到的余数就是校验码。

  非常简单,要说明的:模2除就是在除的过程中用模2加,模2加实际上就是我们熟悉的异或运算,就是加法不考虑进位,公式是:
  0+0=1+1=0,1+0=0+1=1
即‘异’则真,‘非异’则假。
  由此得到定理:a+b+b=a 也就是‘模2减’和‘模2加’直值表完全相同。

  有了加减法就可以用来定义模2除法,于是就可以用生成多项式g(x)生成CRC校验码。

例如: g(x)=x4+x3+x2+1,(7,3)码,信息码110产生的CRC码就是:
             101
11101 | 110,0000
        111 01
          1 0100
          1 1101
            1001
余数是1001,所以CRC码是110,1001

标准的CRC码是,CRC-CCITT和CRC-16,它们的生成多项式是:
  CRC-CCITT=x16+x12+x5+1
  CRC-16=x16+x15+x2+1
1 楼 jiaguwen123 2011-05-07  
CRC校验码计算详解
(网络工程师考试必备)



以实例说明:2008年下半年上午试题(18)。

采用CRC进行差错检验,生成多项式为G(X)=X4+X+1,信息码字为10110,则计算出的CRC校验码是:   

A. 0000                       B. 0100                       C. 0010                       D.1111



【分析】

符号表示假定:多项式和多项式的系数排列均用相同的符号表示,如

G(X)= X4+X+1

G(X)=10011



1.已知条件如下:

原码字记做M(X),即:M(X) = 10110

生成多项式记做G(X),即:G(X) = 10011

G(X)的最高阶数记做r,此处r = 4



2.计算步骤

(1)计算XrM(X)

也就是把M(X)的尾部添加r个0

XrM(X) = 10110 0000



(2)计算XrM(X)长除G(X),余数记做Y(X)

这里的“长除”计算方法如下:

XrM(X) 10110 0000

--    G(X) 10011              (注意位对应方式,对应位进行异或运算即可)

          00101 0000

--    G(X)   100 11              (计算方法同上)

             001 1100

--    G(X)      100 11

                01111        (此数已经小于G(X),计算到此为止,即Y(X))

注意Y(X)的位数为r(此处为4),所以Y(X) = 1111

Y(X)即是CRC校验码。



(3) 计算传输码字T(X) = XrM(X)-Y(X)

   计算方法:在M(X)末尾连接上Y(X)即可

即:T(X) = 10110 1111



【答案】

此题只要计算出校验码Y(X)即可。正确答案为:D

相关推荐

    crc解释

    ### 循环冗余校验CRC的算法分析和程序实现 #### 概述 在现代通信技术中,确保数据传输的准确性和效率是一项至关重要的任务。为了提高数据传输的可靠性,差错控制技术应运而生。其中,循环冗余校验(CRC)作为一种...

    CRC校验原理解释以及范例

    CRC 校验原理解释以及范例 CRC 校验是一种常用的差错校验码,在数据通信领域中广泛应用。它的特征是信息字段和校验字段的长度可以任意选定。下面将详细介绍 CRC 校验的原理、生成方法、软件生成方法和源代码分析。 ...

    CRC.rar_crc_crc delphi_crc16 C语言_delphi crc_delphi crc16

    `CRC.txt`和`www.pudn.com.txt`这两个文件可能包含了CRC16计算的示例代码或者详细解释。`CRC.txt`很可能是CRC16算法的Delphi或C语言实现代码,而`www.pudn.com.txt`可能是从网络资源站pudn.com下载的关于CRC的文档或...

    51单片机上的CRC8和CRC16的源码

    根据提供的文件信息,本文将详细解释51单片机上CRC8与CRC16校验算法的实现原理及其对应的汇编代码。此算法主要用于数据完整性校验,在通信领域有着广泛的应用。 ### 一、CRC(循环冗余校验)基本概念 CRC是一种...

    单片机CRC算法与实现.rar_crc16单片机_crc8校验算法_单片机 CRC8_单片机 crc16_单片机crc16

    文件"www.pudn.com.txt"可能包含关于这些主题的详细资料,如CRC算法的原理、单片机中实现CRC的汇编代码或C代码示例、计算过程的解释等。而"CRC算法与实现"可能是更深入的CRC算法教程或实现指南,包括不同应用场景的...

    CRC校验原理完全阐释

    ### CRC校验原理详解 #### 一、CRC校验码简介 循环冗余校验(Cyclic Redundancy Check,简称CRC)是一种广泛应用于数据通信领域的差错检测方法。CRC码的主要特点是信息字段和校验字段的长度可以任意选定,这使得它...

    crc32 crc校验示例

    例如,提供的"Micro 'n Power.chm"文件可能包含一个关于CRC32的详细解释、代码实现和应用实例。CHM文件是Microsoft编写的帮助文档格式,其中可能涵盖了CRC32的理论基础、计算过程、C/C++或Python等编程语言的实现...

    CRC8.rar_CRC8 C语言_CRC8 C语言_CRC8 校验_CRC8校验_cr

    文件“www.pudn.com.txt”可能是关于CRC8算法的详细解释或者源代码的注释,通常这类文本文件会提供一些背景知识、使用说明或者参考资料。而“检验CRC8”可能是一个可执行文件或源代码,实现了CRC8的计算功能,用户...

    FX1S CRC验证

    压缩包中的"FX1S CRC"可能包含了一个完整的CRC计算程序示例,或者是详细解释如何在FX1S系列PLC上实现CRC验证的文档。用户可以参考这些资料,学习如何根据自己的需求构建CRC验证程序,从而提升FX1S PLC系统的数据传输...

    CRC-6/8/12/16/32代码

    以下是关于CRC-6、CRC-8、CRC-12、CRC-16和CRC-32的详细解释。 1. CRC-6:CRC-6通常用于简单的通信系统,如无线传感器网络。它产生6位的校验码,用于检测数据中的单个错误。CRC-6的多项式可以是不同的,但常见的有G...

    CRC16_CCITT计算方法

    为了更深入地理解CRC16_CCITT的工作原理,我们可以通过一个简单的示例来进一步解释: 假设我们有一个包含三个字节的缓冲区`{0x01, 0x02, 0x03}`,我们需要计算这个缓冲区的CRC16_CCITT校验值。 1. **初始化**: -...

    C语言版CRC32库及demo

    3. **接口文档**:详细说明了库的使用方式,包括函数原型、参数说明和返回值解释。这对于开发者来说是至关重要的,他们可以通过阅读文档了解如何正确地调用CRC32计算功能。 在C语言中,CRC32的计算过程通常包括以下...

    CRC32 查表法源代码详细说明

    因而,在数据存储和数据通讯领域,CRC无处不在:著名的通讯协议X.25的FCS(帧检错序列)采用的是CRC-CCITT,ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF等也都...

    java实现 crc16校验工具和代码

    下面将详细解释CRC16的基本原理以及如何在Java中编写相关代码。 **CRC16基本原理** CRC16是一种基于多项式除法的校验方法。它的核心思想是,将待校验的数据视为一个二进制数,选择一个预定义的固定长度的CRC生成...

    CRC.zip_crc校验是讲解_crc的全面解释_taste8ju

    在"CRC.zip_crc校验是讲解_crc的全面解释_taste8ju"这个压缩包中,包含的CRC.pdf文件很可能详细介绍了CRC校验的概念、原理、计算方法以及在实际应用中的例子。这份资料可以帮助读者深入理解CRC,包括如何选择合适的...

    CRC16原理及算法附带两种程序

    根据提供的文件信息,本文将详细解释CRC16的原理及其在ModBus和DLMS协议中的应用。 ### 一、CRC16基本原理 CRC (Cyclic Redundancy Check) 是一种用于检测数字通信中错误的方法。CRC16是一种特定的CRC实现方式,它...

    crc12校验的过程

    下面将详细解释CRC12校验的过程。 首先,CRC12校验的核心在于生成多项式。生成多项式是一个具有12位的二进制数,例如G(x) = x^12 + x^5 + 1。这个多项式定义了整个校验过程的规则。 1. **前缀处理**:在待校验的...

    CRC16算法 C程序源代码

    CRC16算法

    CRC校验码计算小工具

    "说明.txt"可能包含关于如何使用CRC计算器及解释MODBUS协议中CRC校验码的详细步骤和注意事项。"bs_out.txt"和"bs_in.txt"可能分别代表的是经过CRC校验的数据输出文件和原始输入文件,它们可以用于测试CRC计算的正确...

    CRC校验流程图1

    以下是对"CRC校验流程图1"的详细解释: 1. **开始**: - CRC校验过程从初始化开始,这是整个流程的第一步。 2. **CRC寄存器初始化为:0xffff**: - 在开始时,CRC寄存器被设置为一个特定的初始值,通常是全1的二...

Global site tag (gtag.js) - Google Analytics