精华内容
下载资源
问答
  • CRC8位循环冗余校验

    2020-08-27 16:10:29
    这是自己写得CRC校验源码,注释齐全,也是自己用CRC时的总结出来的,如果你也刚好遇到这个问题,不知道怎么入手,可以考虑下载我的代码作为参考,源代码VS可运行,资源只需要两分,毕竟整理也不容易,安慰一下吧
  • CRC的全称为Cyclic Redundancy Check,中文名称为差错控制理论是在...利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督 码(CRC码),附在原始信息后边...

    5d1201e9a455f446206af216ecb02ab8.png

    CRC的全称为Cyclic Redundancy Check,中文名称为

    差错控制理论是在代数理论基础上建立起来的。这里我们着于介绍CRC的算法与实现,对原理只能捎带说明一下。若需要进一步了解线性码、分组码、循环码、纠错编码等方面的原理,可以阅读有关资料。

    利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督 码(CRC码),附在原始信息后边,构成一个新的二进制码序列数共kr位,然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检验,以 确定传送中是否出错。这个规则,在差错控制理论中称为“生成多项式”。

    1 代数学的一般性算法

    在代数编码理论中,将一个码组表示为一个多项式,码组中各码元当作多项式的系数。例如 1100101 表示为

    1·x61·x50·x40·x31·x20·x1,即 x6x5x21。

    设编码前的原始信息多项式为P(x),P(x)的最高幂次加1等于k;生成多项式为G(x),G(x)的最高幂次等于r;CRC多项式为R(x);编码后的带CRC的信息多项式为T(x)。

    发送方编码方法:将P(x)乘以xr(即对应的二进制码序列左移r位),再除以G(x),所得余式即为R(x)。用公式表示为

    T(x)=xrP(x)R(x)

    接收方解码方法:将T(x)除以G(x),如果余数为0,则说明传输中无错误发生,否则说明传输有误。

    举例来说,设信息码为1100,生成多项式为1011,即P(x)=x3x2,G(x)=x3x1,计算CRC的过程为

    即 R(x)=x。注意到G(x)最高幂次r=3,得出CRC为010。

    如果用竖式除法,计算过程为

    因此,T(x)=(x6x5)(x)=x6x5x, 即 1100000010=1100010

    如果传输无误,

    无余式。回头看一下上面的竖式除法,如果被除数是1100010,显然在商第三个1时,就能除尽。

    上述推算过程,有助于我们理解CRC的概念。但直接编程来实现上面的算法,不仅繁琐,效率也不高。实际上在工程中不会直接这样去计算和验证CRC。

    下表中列出了一些见于标准的CRC资料:

    ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS

    ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS

    4.CRC算法的实现

    ---------------

    要用程序实现CRC算法,考虑对第2节的长除法做一下变换,依然是M = 11100110,G = 1011,

    其系数r为3。

    11001100

    ------------------------

    1011 )11100110000

    1011.......

    ----.......

    1010......

    1011......

    ----......

    1110...

    1011...

    ------...

    1010..

    1011..

    -------

    100

    本文来自电脑杂谈,转载请注明本文网址:

    http://www.pc-fly.com/a/tongxinshuyu/article-38614-1.html

    展开全文
  • 描述一、CRC简介循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及...

    描述

    一、CRC简介

    循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。

    在数据传输过程中,无论传输系统的设计再怎么完美,差错总会存在,这种差错可能会导致在链路上传输的一个或者多个帧被破坏(出现比特差错,0变为1,或者1变为0),从而接受方接收到错误的数据。为尽量提高接受方收到数据的正确率,在接收方接收数据之前需要对数据进行差错检测,当且仅当检测的结果为正确时接收方才真正收下数据。检测的方式有多种,常见的有奇偶校验、因特网校验和循环冗余校验等。

    二、CRC硬件计算过程

    1.设置CRC寄存器,并给其赋值FFFF(hex)。

    2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。

    3.CRC寄存器向右移一位,MSB补零,移出并检查LSB。

    4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。

    注意:该步检查LSB应该是右移前的LSB,即第3步前的LSB。

    5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。

    6.重复第2至第5步直到所有数据全部处理完成。7.最终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)得到的余数就是校验码。

    原理思维导图总结:

    38673fb08f4078b247571e9216f62e66.png

    123352e9e60ae8ecc6c46faa14fbd4d6.png

    四、通信与网络中常用的CRC

    在数据通信与网络中,通常k相当大,由一千甚至数千数据位构成一帧,而后采用CRC码产生r位的校验位。它只能检测出错误,而不能纠正错误。一般取r=16,标准的16位生成多项式有CRC-16=x16+x15+x2+1 和 CRC-CCITT=x16+x15+x2+1。

    一般情况下,r位生成多项式产生的CRC码可检测出所有的双错、奇数位错和突发长度小于等于r的突发错以及(1-2-(r-1))的突发长度为r+1的突发错和(1-2-r)的突发长度大于r+1的突发错。例如,对上述r=16的情况,就能检测出所有突发长度小于等于16的突发错以及99.997%的突发长度为17的突发错和99.998%的突发长度大于17的突发错。所以CRC码的检错能力还是很强的。这里,突发错误是指几乎是连续发生的一串错,突发长度就是指从出错的第一位到出错的最后一位的长度(但是,中间并不一定每一位都错)。

    【例1】某循环冗余码(CRC)的生成多项式 G(x)=x3+x2+1,用此生成多项式产生的冗余位,加在信息位后形成 CRC 码。若发送信息位 1111 和 1100 则它的 CRC 码分别为_A_和_B_。由于某种原因,使接收端收到了按某种规律可判断为出错的 CRC 码,例如码字_C_、_D_、和_E_。(1998年试题11)

    供选择的答案:

    A:① lllll00 ② 1111101 ③ 1111110 ④ 1111111

    B:① 1100100 ② 1100101 ③ 1100110 ④ 1100111

    C~E:① 0000000 ② 0001100 ③ 0010111 ⑤ 1000110 ⑥ 1001111 ⑦ 1010001 ⑧ 1011000

    解:

    A:G(x)=1101,C(x)=1111 C(x)*23÷G(x)=1111000÷1101=1011余111

    得到的CRC码为1111111

    B:G(x)=1101,C(x)=1100 C(x)*23÷G(x)=1100000÷1101=1001余101

    得到的CRC码为1100101

    C~E:

    分别用G(x)=1101对①~⑧ 作模2除: ① 0000000÷1101 余000 ② 1111101÷1101 余001

    ③ 0010111÷1101 余000 ④ 0011010÷1101 余000 ⑤ 1000110÷1101 余000

    ⑥ 1001111÷1101 余100 ⑦ 1010001÷1101 余000 ⑧ 1011000÷1101 余100

    所以_C_、_D_和_E_的答案是②、⑥、⑧

    【例2】计算机中常用的一种检错码是CRC,即 _A_ 码。在进行编码过程中要使用 _B_ 运算。假设使用的生成多项式是 G(X)=X4+X3+X+1, 原始报文为11001010101,则编码后的报文为 _C_ 。CRC码 _D_ 的说法是正确的。

    在无线电通信中常采用它规定码字长为7位.并且其中总有且仅有3个“1”。这种码的编码效率为_E_。

    供选择的答案:

    A:① 水平垂直奇偶校验 ② 循环求和 ③ 循环冗余 ④正比率

    B:① 模2除法 ②定点二进制除法 ③二-十进制除法 ④循环移位法

    C:① 1100101010111 ② 110010101010011 ③ 110010101011100 ④ 110010101010101

    D:① 可纠正一位差错 ②可检测所有偶数位错

    ③ 可检测所有小于校验位长度的突发错 ④可检测所有小于、等于校验位长度的突发错

    E:① 3/7 ② 4/7 ③ log23/log27 ④ (log235)/7

    解:从前面有关CRC的论述中可得出: A:③ 循环冗余 B:① 模2除法

    C:G(x)=11011,C(x)=11001010101,C(x)*24÷G(x)=110010101010000÷11011 余0011

    得到的CRC码为② 110010101010011

    D:从前面有关通信与网络中常用的CRC的论述中可得出:④ 可检测所有小于、等于校验位长度的突发错

    E:定比码又叫定重码,是奇偶校验的推广。在定比码中,奇数或偶数的性质保持不变,然而附加一种限制,每个字中1的总数是固定的。随用途之不同,定比码要求的附加校验位可能多于一个,但较之单一的奇偶校验将增加更多的检错能力。

    所谓7中取3定比码,就是整个码字长度为7位,其中1的位数固定为3。所有128个7位代码(0000000~1111111)中只有1的位数固定为3的才是其合法码字。可以用求组合的公式求出其合法码字数为:C73=7!/(3!*(7-3)!)=7*6*5/(1*2*3)=35

    编码效率=合法码字所需位数/码字总位数=(log235)/7

    而对于CRC的实现有两种方式,分别为多项式和查表法。

    打开APP阅读更多精彩内容

    点击阅读全文

    展开全文
  • 循环冗余校验

    千次阅读 多人点赞 2020-08-02 10:32:16
    循环冗余校验码简称CRC码,是目前使用非常广泛的数据校验方式.它不仅能校验传递过来的数据正确性,还能筛查出哪一位出现了错误.它的局限性是只能校验一位数据发生跳变,在现实世界当中数据发生跳变很大很大的概率是只有...

    前言

    循环冗余校验码简称CRC码,是目前使用非常广泛的数据校验方式.它不仅能校验传递过来的数据正确性,还能筛查出哪一位出现了错误.它的局限性是只能校验一位数据发生跳变,在现实世界当中数据发生跳变很大很大的概率只有一位发生变化,因此CRC码也拥有很大的发挥舞台.

     

    发送方数据处理

    前期准备

    假设发送方A向接收方B发送一串二进制数据101001.A需要计算出K位校验码,放在原始数据的后面一起发送给B.

    它们双方事先约定了一个私密的二项式G(x) = x^3 + x^2 +1,这个多项式用来计算校验码的位数和值.二项式的设计必须符合一定的规则,G(x)的最高项和最低项的系数必须为1.通过这个二项式我们首先可以获取K的大小,最高项x^3的幂指数3就等于K.另外通过二项式G(x)生成数据串G(x) = 1*x^3 + 1*x^2 + 0*x^1 +1*x^0 = 1101(将二项式前面的系数组合在一起就形成了数据串).数据串可以帮助我们计算出校验码的值.

    在有些情景下,我们无法获知多项式G(x).但直接得到了多项式生成后的数据串1101,此时怎么知道校验码有几位呢?用数据串的长度减去1就是K的大小.

    校验码的计算

    从上面描述可知二进制数据101001现在需要加上3位校验码,而用于校验的数据串也已经算出为1101.那通过这两个条件如何计算出校验码呢?在这里采用的是模2除法.模2除法它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行异或运算即可.详细运算过程如下:

                                                      

    • 101001后面需要加上3位校验码,先添加3个0替代变成101001000,随后对1101做模二除法
    • 然后要看被除数的最高位是1还是0,是1商就上1,是0商就上0.此时被除数最高位是1,所以商为1.1再乘以1101和1010做异或运算
    • 第一轮计算余数为0111,舍弃最高位0,将后面的0填上就变成了1110.此时被除数变成了1110,最高位仍然为1,所以商仍然上1,将1101和1101做异或运算.结果0011,舍弃最高位0,将后面的1填上,被除数就变成了0111.依次类推算到最后一位的余数为001.
    • 只要本着被除数的最高位为几商就写几的原则进行异或运算后的余数的最高位一定是0,是0就可以舍弃,继续进行下面的运算.最后得出的最终余数001就是我们想要的3位检验码.
    • 通过这种模二除法有什么好处呢?比如说数101001后面加三个0后对1101做模二除法,最终会得到三位余数.然后将三位余数替换被除数的三个0再对1101做模二除法时,余数一定为0.换言之101001001再对1101做模二除法时余数一定为0.利用这个特性就可以做数据校验.

     

    接受方数据校验

    接受方B此时已经接受到了A传递过来的数据 101001001,并且他也知道事先约定的多项式g(x),他先通过g(x)计算出数据串为1101.他现在要开始做校验操作了.让101001001对1101做模二除法.

                                                    

    计算出来的余数为0,说明传送过来的数据正确.

    假如传送过来的数据101001001第二位发生了跳变,变成了101001011,那运算结果又会如何?

                                                    

    最后计算出来的余数为010,并不为0,说明数据发生了跳变.而010代表数字2,指明是第二位数据出现了错误.细心的同学肯定会发现3位校验码最多只能表示8种情况,而101001001有9个数字,在最多只有一位数字发生跳变的前提下,它的错误情况有九种,这样的话3位校验码就无法表示所有的出错情况了.比如说101001001最高位发生了跳变.

                                                 

    最高位发生跳变时,被除数的最高位为0,商上0继续运算,算到最后的余数为010.此时我们可以发现最高位(第9位)发现跳变时最后算出的余数是010,而第二位发生跳变时也是010,如果接收方算出了010,它也无法确定到底是第二位出错还是第九位出错,这样就只能检错而不能纠错.为了避免此类状况的发生,多项式g(x)和信息数据的长度设计显得尤为重要.

    展开全文
  • CRC循环冗余校验

    千次阅读 2019-08-09 21:34:28
    循环冗余校验(英语:Cyclic redundancy check,通称“CRC”)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在...

    1了解CRC

     

    1.介绍

    循环冗余校验(英语:Cyclic redundancy check,通称“CRC”)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者存储之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。

    ---维基百科

     

    讲到CRC大家一定不陌生,在自控系统中很多通讯协议都用到它,如耳熟能详的Modbus RTU。很多人应该都是通过此协议了解并熟悉CRC的。

    概括讲其中的CRC就是Modbus RTU通信中检查传输的信息是否有误的一种方法。

     

     

    2.原理

    CRC为校验和的一种,是两部分字节数据流采用模2除法(没有进位,使用异或(XOR)来代替减法)相除所得到的余数。

    其中被除数是需要计算校验和的信息数据流的二进制表示(如Modbus RTU协议中就是:从机地址(1字节)+Modbus PDU,长度不超过253字节)。

    除数是一个长度为(n+1)的预定义(短)的二进制数,通常用多项式(及CRC多项式)的系数来表示。

    在做除法之前,要在信息数据之后先加上n个0(如Modbus RTU协议 n=16,及除数多项式最高阶数为16阶)。

     

    2CRC 多项式

     

    CRC多项式说简单也简单,就是多项式所有系数都为0或1(最高阶数的系数为1),匹配计算机的二进制。

     

    如Modbus RTU协议常用的CRC-16多项式X16+X15+X2+1,它的系数二进制集合就是11000000000000101为17位,十六进制等于0x8005(去除最高阶的系数)。

     

    说复杂也复杂,CRC多项式的设计要考虑很多因素,如选择的多项式必须有最大的错误检测能力,同时保证总体的碰撞概率最小等,这里就不再多讲述,可参考下面的链接。

     

    Cyclic redundancy check:

    https://en.wikipedia.org/wiki/Cyclic_redundancy_check

     

    下面表格是一些常用的CRC多项式(不包含“初始值”、“反射值”以及“最终异或值”)

     

    3模2运算

     

    二进制模2算术运算不同于一般二进制算术运算的规则,其没有进位和借位,加法等同于“异或”运算。

     

    关于二进制数的算术运算原理,可以观看下面链接中的视频:

    https://www.coursera.org/lecture/jisuanji-wangluo/er-jin-zhi-shu-de-suan-zhu-yun-suan-wuzUr

     

    ①模2加法运算规则:

    规则是两个序列模二相加,即两个序列中对应位,相加,不进位,相同为0,不同为1,等于异或运算。

    0+0=0      0+1=1      1+0=1      1+1=0(无进位)

    ②模2减法运算规则:

    0-0=0      0-1=1 (无借位)     1-0=1      1-1=0

    两个数相加和相减结果是一样的。

    ③模2乘法运算规则:

    0×0=0      0×1=0      1×0=0      1×1=1

    ④模2除法运算规则: 

    0÷1=1     1÷1=0  1÷0=1      0÷0=0

     

    对于二进制算术运算大家需要了解,其实上面链接里的视频已经讲了,二进制乘运算就是左移与加运算、除运算就是右移与减运算,而减运算又可以转换成加运算(如6-5=6+(-5),其中负数使用补码表示),所以在计算机中四则运算都是通过移位和加运算来实现的。

     

    模2除法运算中,余数项由被除数和除数对应位的异或求得,而商项由余数项去除最高位后的首位确定,为1时商为1为0时商为0,商项为0时除数项使用与除数等位数的0代替。直到余数位数小于除数位数时计算结束。对于CRC校验和运算最后所得的余数即为校验结果值(除非所选择的CRC规范要求进行一些后处理)。

     

    4CRC值的计算

     

    1.手算

    一般来说,其形式为:

     

    M(x)·xn=Q(X)·K(x)-R(x)

     

    这里M(x)是原始的信息流多项式。K(x)是n阶的CRC多项式。表示了将原始信息后面加上n个0。R(x)是余数多项式,即是CRC“校验和”。

    在通信中,发送者在原始的信息数据M后附加上n位的R(替换本来附加的0)再发送。接收者收到MR后,检查M(x)·xn+R(x)否能被K(x)整除。如果是,那么接收者认为该信息是正确的。值得注意的是M(x)·xn+R(x)就是发送者所想要发送的数据。

     

    我们以简单的信息流101001为例,使用CRC-3多项式X3+X2+1来计算CRC校验码。

     

    先使信息流左移3位补0得到被除数101001000,除以除数1101(CRC-3多项式系数合集)。

     

    计算步骤如下:

    最后余数为001及为CRC校验码。加上校验的完整报文为:信息流+CRC=101001001

     

    这里提一下,串行通信中经常用到的奇偶校验偶校验是循环冗余校验(CRC)的特殊情况,其中1位CRC由多项式 x + 1 生成。大家可以试算一下。

     

    2.计算机中CRC计算方法

    通常计算机中信息都是按字节来存储,数据的操作指令都有限制,如不可能把一很长信息流的被除数直接左移n位。并且不同的通讯协议,信息流传输的顺序也不同。但可以根据CRC计算的原理结合软件的指令找到合适的算法。

    下面是一个三菱PLC GX Works2中计算CRC-16的例子:

    V0:=ADDR;
    
    CRC:=Init;
    
    ByteNr:=LEN-1;
    
    FOR INDEX1 := 0 TO ByteNr BY 1 DO	
    
    IF Mode THEN
    
    IF ( INDEX1 MOD 2 )<> 0THEN
    
    Data:=D0V0;
    
    ROR( TRUE , 8 ,Data);
    
    ELSE
    
    Data:=D0V0;	
    
    END_IF;	
    
    ELSE	
    
    Data:=D0V0;
    
    END_IF;	
    
    IF RefIn THEN
    
        Bytedata :=SWAP_B( Data);
    
    ELSE
    
        Bytedata := Data;
    
    END_IF;	
    
    Iteration := H0080;	
    
    FOR INDEX2 := 0 TO 7 BY 1 DO
    
            IF ((CRC AND H8000) <> H0000) THEN
    
                ROL( TRUE , 1 ,CRC );
    
                CRC:=CRC&HFFFE;
    
                CRC := CRC XOR Poly;
    
            ELSE
    
                ROL( TRUE , 1 ,CRC );
    
                CRC:=CRC&HFFFE;
    
            END_IF;        
    
            IF ((Bytedata AND Iteration) <>  H0000) THEN
    
                CRC := CRC XOR Poly;
    
            END_IF;		    
    
    	    ROR( TRUE , 1 ,Iteration);
    
    END_FOR;		
    
    IF Mode THEN
    
    IF   ( INDEX1 MOD 2 )<> 0 THEN 
    
    V0:=V0+1;	
    
    END_IF;	
    
    ELSE	
    
    V0:=V0+1;
    
    END_IF;	
    
    END_FOR;	
    
    IF  RefOut  THEN
    
    CRC:=SWAP_W(CRC );
    
    END_IF;
    
    CRC := CRC XOR XorOut;
    
    IF  ByteSwap THEN  
    
        ROR(TRUE , 8 ,CRC);  
    
    END_IF;
    
    CRC16 := CRC;

    更多精彩内容,可关注本人微信公众号scadafaq

    展开全文
  • 循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理...
  • CRC校验原理 CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。...到达接收端后,把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发
  • 比起奇偶校验码(PCC)只能校验一位错误,循环冗余校验码(CRC)的检错能力更强,可以检出多位错误。 1.CRC校验原理 CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实...
  • CRC循环冗余校验,经典例子讲解~

    千次阅读 2020-11-27 09:22:01
    CRC循环冗余校验,看完这篇你就懂了~
  • Cyclic Redundancy Check 1、 选择 k位二进制比特串 表示方式:多项式 (所以CRC又称为多项式编码方式) ...余数:k-1位 即改CRC校验码,也称FCS(帧校验序列) 余数的位数必须为k-1位,全为0也不能省略。 example
  • 循环冗余校验码(CRC)详解

    千次阅读 2021-04-09 11:46:20
    循环冗余校验码(CRC)广泛应用于数据通信领域和磁介质存储系统。它利用生成多项式为k个数据未产生r个校验位来进行编码,其编码长度为k+r。由此可知,循环冗余校验码是由两部分组成的,左边为信息码(数据),右边...
  • 2.1.5-3 循环冗余校验(CRC)码

    千次阅读 2020-10-31 11:36:05
    中午我们要学习最后一种校验码叫做循环冗余校验码英文缩写叫CrC码,这给出了他的英文全称,那这个小节我们首先会介绍CrC码的一个基本思想,然后介绍如何构造,还有如何使用,也就是如何检错和纠错,那首先来看一下...
  • 循环冗余校验码的思想: 例题: 注:产生的余数为R位(比除数少一位)二进制数。 注:这里与海明码不同,余数转换成十进制后的数与出错位没有必然的联系。 ——————————————————————————...
  • 循环冗余校验(CRC校验)

    千次阅读 2017-06-19 20:02:43
    一、循环冗余校验的作用在网络传输过程,我们可能会遇到或多或少的差错,所谓差错,是指接收端收到的数据和发送端实际发送的数据出现不一致的现象,凡是出现差错的地方,我们都应对其进行差错控制。差错控制的作用...
  • CRC循环冗余校验原理

    2021-06-24 12:40:12
    类型为无系数的一元多次方程,例如,将其转换为二级制编码才能进行计算,转换的规则是:依次从低位到高位依次写出方程未知数的n次幂的有无情况,有的记为'1',没有的记为'0',上面的多项式就可以转换为1011,如...
  • CRC循环冗余校验的编程实现
  • CRC循环冗余校验码代码实现

    千次阅读 2018-08-13 12:36:44
    一、CRC循环冗余校验简介 二、CRC循环冗余校验基本原理 三、CRC循环冗余校验代码实现 四、程序执行结果 一、CRC循环冗余校验简介 现实的通信链路都不是理想的。也就是说,比特在传输过程可能会产生差错:1...
  • 循环冗余校验(CRC)——C语言版

    万次阅读 多人点赞 2019-03-20 19:40:37
    CRC目前是在数据通信和计算机网络应用最广泛的一种校验编码方式。它的原理十分简单但非常使用,具体内容可自行百度,下面主要讲一下我的代码的算法: 先来一组名字解释: Gx:生成码,这个是可以人为设定的,它...
  • 常用的校验方式有奇偶校验、异或校验、累加和校验(可以看我之前的一篇文章累加和校验算法(CheckSum算法))、循环冗余校验(CRC校验)等等。 奇偶校验、异或校验、累加和校验都比较简单,且易于实现,但是检错能力...
  • CRC循环冗余校验纠错循环左移的原因以及一些新感受问题的描述理解已知前提新知 问题的描述 理解 已知前提 1.我们讨论的是只有一位代码出错的情况,多位出错的情况由于 纠错代价过大而直接丢弃。 2.CRC循环冗余...
  • CRC循环冗余校验算法

    2020-07-19 10:56:21
    在数据链路层广泛使用的是循环冗余的CRC检错技术。 一、基本原理 CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;附加在数据序列...
  • 在串行传送(磁盘、通讯),广泛采用循环冗余校验码(CRC)。CRC也是给信息码加上几位校验码,以增加整个编码系统的码距和查错纠错能力。 CRC的理论很复杂,一般书上只介绍已有生成多项式后计算校验码的方法。...
  • CRC循环冗余校验

    2020-05-09 23:25:04
    CRC(Cyclic Redundancy Check),循环冗余校验码,可以检测信息是否传输或存储错误,常用于外存储器的数据校验。 这个我有点印象。我读书的时候,还是386、486时代,那时硬盘很小,只有几百兆,更加没有U盘,拷贝...
  • 循环冗余校验同其他差错检测方式一样,通过在要传输的k比特数据D后添加(n-k)比特冗余位(又称帧检验序列,Frame Check Sequence,FCS)F形成n比特的传输帧T,将其发送出去。 手算 Python源码 # af=10110111 a = [1,...
  • CRC(循环冗余校验)查表算法的代码实现前言准备工作查表算法的由来查表算法的基本原理模二减法(异或运算)的性质对直接计算法进行分析基本原理的推广查表算法的代码实现测试用例正式编码代码的测试仓库地址 ...
  • 循环冗余校验-CRC

    2017-07-09 16:26:10
    CRC即循环冗余校验码(Cyclic Redundancy Check ):是数据通信领域最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算...
  • 循环冗余校验(CRC)总结

    千次阅读 2018-03-06 16:09:46
    CRC校验采用多项式编码方法,如一个8位二进制数(B7B6B5B4B3B2B1B0)可以用7阶二进制码多项式B7X7+B6X6+B5X5+B4X4+B3X3+B2X2+B1X1+B0X0表示。 例如11000001可表示为 1X7+1X6+0X5+0X4+0X3+0X2+0X1+0X0 一般说,n位二...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,747
精华内容 7,098
关键字:

在循环冗余校验中