精华内容
下载资源
问答
  • 常用校验码(奇偶校验码、海明校验码、CRC校验码) 一、奇偶校验码二、海明校验码三、CRC校验码   计算机系统运行时,各个部之间要进行数据交换.交换的过程中,会有发生误码的可能(即0变成1或1变成0),由于...

    转载自:https://www.cnblogs.com/VersionP1/p/7779251.html ,作者: FunnyOne 

     

    常用校验码(奇偶校验码、海明校验码、CRC校验码)

    一、奇偶校验码
    二、海明校验码
    三、CRC校验码

      计算机系统运行时,各个部之间要进行数据交换.交换的过程中,会有发生误码的可能(即0变成1或1变成0),由于计算机的储存是通过二进制代码来实现的的,误码会导致储存的内容发生改变。为确保数据在传送过程正确无误,常使用检验码. 我们常使用的检验码有三种. 分别是奇偶校验码海明校验码循环冗余校验码(CRC) 。

     

    一、奇偶校验码

     

    学习资料:常用校验码

    概念:

      奇偶校验码是奇校验码偶校验码的统称. 它们都是通过在要校验的编码上加一位校验位组成.

    校验方法:

      如果是奇校验加上校验位后,编码中1的个数为奇数个。如果是偶校验加上校验位后,编码中1的个数为偶数个

    分类:

    1. 水平奇偶校验码:对每一个数据的编码添加校验位,使信息位与校验位处于同一行

    例子:

    原编码奇校验偶校验
    00000000 10000 0
    00100010 00010 1
    11001100 11100 0
    10101010 11010 0

    当原编码在传输、储存的过程中发生了误码,1的数量就会改变,然后就能校验出该过程出现了错误。

    1. 垂直奇偶校验码:把数据分成若干组,一组数据排成一行,再加一行校验码. 针对每一行列采用奇校验 或 偶校验

    缺点:

    1. 只能检测出奇数位出错. 如果发生偶数位错误就无法检测

      设原编码为0000,传输的过程中变成了1001。如果使用奇校验,原编码是00001,传输过后会变成10011,1仍然是奇数个,无法校验;如果使用偶校验,原编码是00000,传输过后会变成10010,1仍然是偶数个,同样无法校验。

    1. 奇偶校验码无法检测出哪位出错.所以属于无法矫正错误的校验码。

      校验过程中只知道1的数量发生变化,对于哪个地方发生变化无从知道。

    二、海明校验码

    学习资料:海明校验码

    实现原理:

      它的实现原理,是在m个数据位之外加上k个校验位,从而形成一个m+k位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。

    两个码组对应位上数字的不同位的个数称为码组的距离,简称码距

    例:

    这两个二进制码中,有三个不相同的位置,所以码距为3.

    须知:

    1. 海明校验码是放在2的幂次位上的,即“1,2,4,8,16,32······”;
    2. 信息位为m的原始数据,需要加入k位的校验码,它满足m+k+1<2^k;

    例子:

    要计算原始信息位为101101100的海明校验码。

    先用m+k+1<2^k计算出校验位:9+k+1 <2^k→k=4,即校验位为4位。

    因为海明校验码是放在2的幂次位上,所以插在位置1,2,4,8中

    用到的校验码是看 当前位置由哪几个 校验码所在的位置的和

    • 例如

    校验码的位置是1,2,4,8。位置3= 1 + 2,所以位置3用到的校验码是1和2;位置7 = 1 + 2 + 4组成的,所以位置7用到的校验码是1,2和4。

    然后将校验码校验的位置记录下来:

    • 校验码1(位置1):3,5,7,9,11,13
    • 校验码2(位置2):3,6,7,10,11
    • 校验码3(位置4):5,6,7,12,13
    • 校验码4(位置8):9,10,11,12,13

    注意:后面的数字串是位置的下标,不是值,值还是0或1。

    然后做异或运算(相同时为0,不同时为1)

    • 校验码1(位置1):1 xor 0 xor 1 xor 0 xor 1 xor 0 = 1
    • 校验码2(位置2):1 xor 1 xor 1 xor 1 xor 1 = 1
    • 校验码3(位置4):0 xor 1 xor 1 xor 0 xor 0 = 0
    • 校验码4(位置8):0 xor 1 xor 1 xor 0 xor 0 = 0

    三、循环冗余校验码(CRC校验)

    学习资料:CRC的校验原理以及例子

    原理:CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。

    实现步骤:

    双方事先约定了一个R次多项式g(x),即CRC码

    CRC码的特点:

    • 位数要少于原编码
    • 收尾为1
    • 自行决定

    例:

    原编码:1001001011

    则CRC码可以为10011,也可以为11001等

    但是:10010这种不可以,因为它的尾巴不是1,1001101011也不行,因为它的位数与原编码的一致。

    要注意的是:CRC码并非是校验码,但需要通过CRC码来获得校验码。具体校验码的话要先让原编码加上CRC码位数个0(即CRC码有的多少位,就要加上多少位0在原编码的后面)然后用新原编码除CRC码,得到的余数就是校验码

    例:

    原编码=1010001101

    CRC码设为:110101

    校验码有5位,因此

    新原编码:101000110100000

    然后用新原编码除以CRC码:

    校验码就是01110

    校验方法

    用原编码与校验码进行模2减法,获得最终原编码。此时最终原编码除以CRC码是可以整除的,由于接收方也有相同的CRC码,在数据传输的过程中不发生错误,接收方用接收到的数据除以CRC码也是可以整除的,此时为无错误。同时,不能整除,说明传输过程中数据发生了错误。

    展开全文
  • 基于LabVIEW的Modbus协议两种校验码的实现方法
  • CRC循环校验码两种理解,对于标准图示的一些发散小思考,挺有意思的
  • 1:奇偶校验码奇偶校验码是 [1] 一增加二进制传输系统最小距离的简单和广泛采用的方法。是一通过增加冗余位使得码字中"1"的个数恒为奇数或偶数的编码方法,它是一检错码。在实际使用时又可分为...

    原件故障,噪声干扰等各种因素常常导致计算机在处理信息的过程中出现错误。为了防止这种错误,可将信号采用专门的逻辑电路进行编码以检查错误。

    1:奇偶校验码

    奇偶校验码是 [1]  一种增加二进制传输系统最小距离的简单和广泛采用的方法。是一种通过增加冗余位使得码字中"1"的个数恒为奇数或偶数的编码方法,它是一种检错码。在实际使用时又可分为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验等几种。

    最简单且应用广泛的检验码就是采用一位校验位的奇校验或者偶校验。在实际中出现一位错误的几率是最高的。

    一个二进制码字,如果它的码元有奇数个1,就称为具有奇性。例如,码字“10110101”有五个1,因此,这个码字具有奇性。同样,偶性码字具有偶数个1。注意奇性检测等效于所有码元的模二加,并能够由所有码元的异或运算来确定。对于一个n位字,奇性由下式给出:奇性=a0⊕a1⊕a2⊕…⊕an

    我们只需要记住奇校验码要保证码字必须是奇性的,如果原码字就是奇性的,那么奇校验码就是0,反之为1

    偶校验码相反,保证码字非奇性,有偶数个1,如果原码字就是奇性的,那么奇校验码就是1,反之为0

    举个例子:

    数据:                                                      偶校验编码                                             奇校验编码

    1 0 1 0 1 0 1 0                                   1 0 1 0 1 0 1 0  0                                  1 0 1 0 1 0 1 0 1

    接受数据的那端只需要判断一下就好了,如果奇校验中出现了偶数个1,那么出错了,偶校验类比。

    但是奇偶校验只能提供是否出现一个错误,2个错误就不行了,还有出错的地方也不可能知道的,弊端比较明显。

    2:海明码(汉明码也是它)

    汉明码(Hamming Code),是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名。汉明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据位错误,以侦测并更正单一比特错误。由于汉明编码简单,它们被广泛应用于内存(RAM)。

    在此介绍海明码之前,先做俩道二年级智力题目。

    问题一:我们有四个罐子,里面分别装有一些药品,正版药品重1g,盗版重0.9g,四罐中有一罐是盗版,我们有一台天秤,问怎样称一次能辨别那个罐子是盗版。

    想一下。

    告诉你答案吧!我们取第一罐一颗药,取第二罐俩颗药,取第三罐三颗药,取第四罐四颗药。然后称一下重量。

    都是正品则重10g。如果差0.1g,那么第一罐假的,如果差0.2g,那么第二罐假的,如果差0.3g,那么第三罐假的,如果差0.4g,那么第四罐假的。问题解决了。

    问题二:我们有四个罐子,里面分别装有一些药品,正版药品重1g,盗版重0.9g,不知道有几罐是假的,我们有一台天秤,问怎样称一次能辨别那些罐子是盗版。

    想一下。

    有了刚刚的提示,可能有人会说,依然那样弄不行吗?很明显不行,如果差0.3g,那么是第一罐和第二罐有问题还是第三罐有问题。敏锐的你应该注意到了,关键在取药品的数量上。

    我们取第一罐一颗药(0001),取第二罐俩颗药(0010),取第三罐四颗药(0100),取第四罐八颗药(1000)。然后称一下重量。

    重量差值(g)                                 盗版药品

    0.1(0001)                                    第一罐

    0.2(0010)                                    第二罐

    0.3(0011)                                    第一罐与第二罐

    0.4(0100)                                    第三罐

    0.5(0101)                                   第三罐与第一罐 

    。。。。                                    。。。。

    1.5(1111)                                   第一罐 第二罐  第三罐 第四罐

    正好巧妙的利用二进制的特点,表示出了所有差值情况和对应的盗版药品(最关键一点:没有出现“一对多”)

    下面来正式介绍海明码

    对于一个长度为x位的数据,我们至少需要多少位的数据来保存它每一位可能会出错的信息了?

    我们知道一个长度为n位的字可以保存2^n的信息,

    则2^n>=x吗?不是的呀,它自己也需要保存咯,那么2^n>=x+n吗?不是的呀,那么如果2^n==x+n怎么办,那不也就是每一种情况都是错的,正确的情况怎么办了?则:

    2^n>=x+n+1

    我们以保存8位数据为例,代入得n=4,共构成12位数据(r表示海明码,x表示数据),排列如下:

                                                       r1 r2 x3 r4 x5 x6 x7 r8 x9 x10 x11 x12

    我们来表示一下:

    3= 1+2                  5= 1 + 4                  6= 2 + 4                  7= 1 + 2 + 4                  9=1 + 8                                             10=2 + 8                11=1 + 2 + 8                  12=4 + 8

    含有海明码的数据元素:

    r1: x3  x5  x7  x9  x11

    r2: x3  x6  x7  x10  x11

    r4: x5  x6  x7  x12

    r8: x9  x10  x11  x12

    r1 r2 r4 r8 存储什么了?这个得与奇偶校验码相结合。

    以奇校验为例:

                                           r1 r2 x3 r4 x5 x6 x7 r8 x9 x10 x11 x12

                                                     1       0   1  0       1    0    1     1(随便写的数据)

    那么r1就是x3  x5  x7  x9  x11(1,0,0,1,1)的奇校验码  r1=0

    那么r2就是x3  x6  x7  x10  x11(1,1,0,0,1)的奇校验码 r2=0

    那么r4就是x5  x6  x7  x12 (0,1,0,1)的奇校验码 r4=1

    那么r8就是 x9  x10  x11  x12(1,0,1,1)奇校验码  r8=0

                                       r1 r2 x3 r4 x5 x6 x7 r8 x9 x10 x11 x12

                                        0   0  1   1  0   1  0   0   1    0    1     1

    如果x3数据在信息转送过程中变成0了,r1 r2 r4 r8在接受方需要在算一遍

                                        r1 r2 x3 r4 x5 x6 x7 r8 x9 x10 x11 x12

                                                  0        0   1  0       1    0    1     1

    则变成:

                                        r1 r2 x3 r4 x5 x6 x7 r8 x9 x10 x11 x12

                                         1   1  0  1   0   1  0   0   1   0    1     1

    我们发现r1,r2变化了,那么错误在x=1+2=3

    因为3=1+2一开始就是一一对应的,出错的地方就非常容易找到。

    展开全文
  • 常用校验码及示例

    2018-09-22 15:00:00
    分别是奇偶校验码、海明校验码和循环冗余校验码(CRC)。 奇偶校验码(Parity Codes) 奇偶校验码最简单,但只能检测出奇数位出错. 如果发生偶数位错误就无法检测. 但经研究是奇数位发生错误的概率大很多. 而且奇偶...

    计算机系统运行时,各个部之间要进行数据交换. 为确保数据在传送过程正确无误,常使用检验码. 我们常使用的检验码有三种.
     分别是奇偶校验码、海明校验码和循环冗余校验码(CRC)。


    奇偶校验码(Parity Codes)

    奇偶校验码最简单,但只能检测出奇数位出错. 如果发生偶数位错误就无法检测. 但经研究是奇数位发生错误的概率大很多. 而且奇偶校验码无法检测出哪位出错.所以属于无法矫正错误的校验码。奇偶校验码是奇校验码和偶校验码的统称.
     它们都是通过在要校验的编码上加一位校验位组成. 如果是奇校验加上校验位后,编码中1的个数为奇数个。如果是偶校验加上校验位后,编码中1的个数为偶数个。

    例:原编码   奇校验 偶校验0000   0000 1 0000 00010   0010 0 0010 11100   1100 1 1100 01010   1010 1 1010 0

    如果发生奇数个位传输出错,那么编码中1的个数就会发生变化. 从而校验出错误,要求从新传输数据。目前应用的奇偶校验码有3种.

    水平奇偶校验码对每一个数据的编码添加校验位,使信息位与校验位处于同一行.

    垂直奇偶校验码把数据分成若干组,一组数据排成一行,再加一行校验码. 针对每一行列采用奇校验 或 偶校验例: 有32位数据10100101 00110110 11001100 10101011垂直奇校验    垂直偶校验10100101    10100101    数据00110110    0011011011001100    1100110010101011    1010101100001011    11110100    校验

    水平垂直奇偶校验码就是同时用水平校验和垂直校验例:奇校验 奇水平     偶校验 偶水平 10100101 1     10100101 0   数据 00110110 1     00110110 0 11001100 1     11001100 0 10101011 0     10101011 1 00001011 0     11110100 1   校验

     

      我们把传送过来的1100111000逐位相加就会得到一个1,应该注意的的,如果在传送中1100111000变成为0000111000,通过上面的运算也将得到1,接收方就会认为传送的数据是正确的,这个判断正确与否的过程称为校验。而使用上面方法进行的校验称为奇校验,奇校验只能判断传送数据中奇数个数据从0变为1或从1变为0的情况,对于传送中偶数个数据发生错误,它就无能为力了。
      Odd Parity(奇校验),校核数据完整性的一种方法,一个字节的8个数据位与校验位(parity bit )加起来之和有奇数个1。校验线路在收到数后,通过发生器在校验位填上0或1,以保证和是奇数个1。因此,校验位是0时,数据位中应该有奇数个1;而校验位是1时,数据位应该有偶数个1。如果读取数据时发现与此规则不符,CPU会下令重新传输数据。

      奇/偶校验(ECC)是数据传送时采用的一种校正数据错误的一种方式,分为奇校验和偶校验两种。 如果是采用奇校验,在传送每一个字节的时候另外附加一位作为校验位,当实际数据中“1”的个数为偶数的时候,这个校验位就是“1”,否则这个校验位就是“0”,这样就可以保证传送数据满足奇校验的要求。在接收方收到数据时,将按照奇校验的要求检测数据中“1”的个数,如果是奇数,表示传送正确,否则表示传送错误。 同理偶校验的过程和奇校验的过程一样,只是检测数据中“1”的个数为偶数。

     

    海明校验码(Hamming Code)

    海明码也是利用奇偶性来校验数据的. 它是一种多重奇偶校验检错系统,它通过在数据位之间插入k个校验位,来扩大码距,从而实现检错和纠错.

    设原来数据有n位,要加入k位校验码.怎么确定k的大小呢? k个校验位可以有pow(2,k) (代表2的k次方) 个编码,其中有一个代表是否出错. 剩下pow(2,k)-1个编码则用来表示到底是哪一位出错. 因为n个数据位和k个校验位都可能出错,所以k满足pow(2,k)-1
     >= n+k。

    设 k个校验码为 Pk,...,P1, n个数据位为D(n-1),...,D1,D0,产生的海明码为 H(n+k),...,H1。如有8个数据位,根据pow(2,k)-1 >= n+k可以知道k最小是4。那么得到的海明码是:

    H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1D7 D6 D5 D4 P4 D3 D2 D1 P3 D0 P2 P1  (Pi在海明码的第pow(2,i-1)位置;数据位Di则依序从低到高占据海明码中剩下位置)

    然后怎么知道Pi校验哪个位呢. 自己可以列个校验关系表

    海明码 下标 校验位组H1(P1) 1 P1H2(P2) 2 P2H3(D0) 1+2 P1,P2H4(P3) 4 P3H5(D1) 1+4 P1,P3H6(D2) 2+4 P2,P3H7(D3) 1+2+4 P1,P2,P3H8(P4) 8 P4H9(D4) 1+8 P1,P4H10(D5) 2+8 P2,P4H11(D6) 1+2+8 P1,P2,P4H12(D7) 4+8 P3,P4

    从表中可以看出P1校验 P1,D0,D1,D3,D4,D6P2校验 P2,D0,D2,D3,D5,D6P3校验 P3,D1,D2,D3,D7P4校验 P4,D4,D5,D6,D7其实上表很有规律很容易记,要知道海明码Hi由哪些校验组校验,可以把i化成二进制数数中哪些位k是1,就有哪些Pk校验

    如H7 7=0111 所以由P1,P2,P3。 H11 11=1011 所以由P1,P2,P4。  H3 3=0011 所以由P1,P2

    那看看Pi的值怎么确定,如果使用偶校验,则P1=D0 xor D1 xor D3 xor D4 xor D6P2=D0 xor D2 xor D3 xor D5 xor D6P3=D1 xor D2 xor D3 xor D7P4=D4 xor D5 xor D6 xor D7其中xor是异或运算,奇校验的话把偶校验的值取反即可.

     

    那怎么校验错误呢. 其实也很简单. 先做下面运算.G1 = P1 xor D0 xor D1 xor D3 xor D4 xor D6G2 = P2 xor D0 xor D2 xor D3 xor D5 xor D6G3 = P3 xor D1 xor D2 xor D3 xor D7G4 = P4 xor D4 xor D5 xor D6 xor D7

    若采用偶校验,则G4G3G2G1全为0表示接收到的数据无错误(奇校验则应全为1)。当G4G3G2G1不全为0说明发生了错误,而且G4G3G2G1的十进制指出了发生错误的位置,例如 G4G3G2G1=1010,说明H10(D5)出错了,将其取反即可纠正错误。

     

    异或,英文为exclusive OR,或缩写成xor。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。a⊕b
     = (?a ∧ b) ∨ (a ∧?b)如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。


    循环冗余校验码(Cyclic Redundancy Check)

    CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码. CRC码广泛应用于数据通信领域和磁介质存储系统中. CRC理论非常复杂,一般书就给个例题,讲讲方法.现在简单介绍下它的原理:

    在k位信息码后接r位校验码,对于一个给定的(n,k)码。可以证明(数学高手自己琢磨证明过程)存在一个最高次幂为 n-k=r 的多项式g(x),根据g(x)可以生成k位信息的校验码,g(x)被称为 生成多项式

    用C(x)=C(k-1)C(k-2)...C0表示k个信息位,把C(x)左移r位,就是相当于 C(x)*pow(2,r) 给校验位空出r个位来了.给定一个 生成多项式g(x),可以求出一个校验位表达式r(x) 。C(x)*pow(2,r) / g(x) = q(x) + r(x)/g(x) 用C(x)*pow(2,r)去除生成多项式g(x)商为q(x)余数是r(x)。所以有C(x)*pow(2,r)
     = q(x)*g(x) + r(x)

    C(x)*pow(2,r) + r(x)就是所求的n位CRC码,由上式可以看出它是生成多项式g(x)的倍式.所以如果用得到的n位CRC码去除g(x)如果余数是0,就证明数据正确. 否则可以根据余数知道出错位.在CRC运算过程中,四则运算采用 mod 2运算(后面介绍),即不考虑进位和借位. 所以上式等价于C(x)*pow(2,r) + r(x) = q(x)*g(x)

    继续前先说下基本概念吧.1.多项式和二进制编码x的最高次幂位对应二进制数的最高位.以下各位对应多项式的各幂次. 有此幂次项为1,无为0. x的最高幂次为r时, 对应的二进制数有r+1位 例如g(x)=pow(x,4) + pow(x,3) + x + 1 对应二进制编码是 11011

    2.生成多项式是发送方和接受方的一个约定,也是一个二进制数,在整个传输过程中,这个数不会变.在发送方利用 生成多项式 对信息多项式做模2运算生成校验码.在接受方利用 生成多项式 对收到的 编码多项式 做模2运算校验和纠错.

    生成多项式应满足:a.生成多项式的最高位和最低位必须为1b.当信息任何一位发生错误时,被生成多项式模2运算后应该使余数不为0c.不同位发生错误时,应该使余数不同.d.对余数继续做模2除,应使余数循环.

    生成多项式很复杂,不过不用我们生成。

    下面给出一些常用的生成多项式表n k 二进制码(自己根据多项式和二进制编码 的介绍转)7 4 1011 或 11017 3 11011 或 1011115 11 101131 26 100101

    3.模2运算a.加减法法则0 +/- 0 = 00 +/- 1 = 11 +/- 0 = 11 +/- 1 = 0注意:没有进位和借位

    b.乘法法则利用模2加求部分积之和,没有进位

    c.除法法则利用模2减求部分余数,没有借位,每商1位则部分余数减1位,余数最高位是1就商1,不是就商0,当部分余数的位数小于余数时,该余数就是最后余数.

    例 1110
    1011)1100000101111101011101010110010(每商1位则部分余数减1位,所以前两个0写出)0000010(当部分余数的位数小于余数时,该余数就是最后余数)最后商是1110余数是010

    好了说了那么多没用的理论.下面讲下CRC的实际应用.例: 给定的生成多项式g(x)=1011, 用(7,4)CRC码对C(x)=1010进行编码.由题目可以知道下列的信息:C(x)=1010,n=7,k=4,r=3,g(x)=1011 C(x)*pow(2,3)=1010000 C(x)*pow(2,3) / g(x) = 1001 + 11/1011 所以r(x)=011.所以要求的编码为1010011例2: 上题中,数据传输后变为1000011,试用纠错机制纠错. 1000011 / g(x) = 1011 + 110/1011

    不能整除,所以出错了. 因为余数是110.查1011出错位表可以知道是第5位出错.对其求反即可.

     

      冗余码的计算方法是,先将信息码后面补0,补0的个数是生成多项式最高次幂;将补零之后的信息码除以G(X),注意除法过程中所用的减法是模2减法,即没有借位的减法,也就是异或运算。当被除数逐位除完时,得到比除数少一位的余数。此余数即为冗余位,将其添加在信息位后便构成CRC码字。

     

      例如,假设信息码字为11100011,生成多项式G(X)=X^5+X^4+X+1,计算CRC码字。

     

      G(X) = X^5+X^4+X+1,也就是110011,因为最高次是5,所以,在信息码字后补5个0,变为1110001100000。用1110001100000除以110011,余数为11010,即为所求的冗余位。

     

      因此发送出去的CRC码字为原始码字11100011末尾加上冗余位11010,即 1110001111010。接收端收到码字后,采用同样的方法验证,即将收到的码字除以G(X),发现余数是0,则认为码字在传输过程中没有出错。

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

    本文来自 ncepu_xu 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/ncepu_xu/article/details/70208630?utm_source=copy

    转载于:https://www.cnblogs.com/jingcaijueyan/p/9690136.html

    展开全文
  • 数据校验码是一种常用的带有发现某些错误,甚至带有一定自动改错能力的数据编码方法。 例子: 码距:个合法码字对应位上数字的不同位的个数 上图中,方案一的码距为1,因为00和01之间只有1位数字不同。而方案二...

    一、为什么要使用校验码?

    数据在计算机系统内加工、存取和传送的过程中可能会产生错误。为了减少和避免这类错误,引入了数据校验码。数据校验码是一种常用的带有发现某些错误,甚至带有一定自动改错能力的数据编码方法。
    在这里插入图片描述
    例子:
    在这里插入图片描述
    码距:两个合法码字对应位上数字的不同位的个数
    上图中,方案一的码距为1,因为00和01之间只有1位数字不同。而方案二的码距为2,因为00和11之间有2位数字不同。
    奇校验:保证一段数据中出现奇数个1,仅需1位
    在上图方案一中,使用奇校验方法,则A的码字变为100,B的码字变为001。码字中的最高位(即加粗的数字)就是校验码。增加校验码后,可以发现方案一的码距变为了2。
    将奇校验改变规则->海明码、CRC

    二、奇偶校验码

    奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数。
    偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数。
    在这里插入图片描述
    【例2-3】给出两个编码1001101和1010111的奇校验码和偶校验码。
    答:
    设最高位为校验位,余7位是信息位,则对应的奇偶校验码为:
    1001101 —— 11001101(奇校验)01001101(偶校验)
    1010111 —— 01010111(奇校验)11010111(偶校验)

    三、海明校验码思路简介

    海明码设计思路:分组校验一>多个校验位一>校验位标注出错位置

    1010->1011 如果1010在传输过程中,变成了1011,我们希望通过校验位来告诉我们数据的哪个位置出现了错误!显然这里的校验位应该为001。
    在这里插入图片描述

    四、海明码求解步骤

    信息位:1010

    1. 确定海明码的位数:2^k >= n+k+1
      n=4 ------> k=3
      设信息位D4D3D2D1(1010),共4位,校验位P3P2P1,共3位,对应的海明码为H7、H6、H5、H4、H3、H2、H1。
    2. 确定校验位的分布
      在这里插入图片描述
      校验位P,放在海明位号为2-1的位置上
      信息位按顺序放到其余位置
    3. 求校验位的值
      在这里插入图片描述
      在这里插入图片描述
    4. 纠错
      经过检验方程计算后得到的结果全为0,则说明数据传输过程中没有出错。否则,说明出现了错误,出现1的位置,即为数据传输过程中中出错的位置
      在这里插入图片描述

    五、循环冗余校验码

    在这里插入图片描述
    【例2-5】设生成多项式为G(x)=x3+x2+1,信息码为101001,求对应的CRC码。

    1. 确定K、R以及生成多项式对应的二进制码
      在这里插入图片描述
    2. 移位
      信息码左移R位,也就是低位补R个0
    3. 相除
      对移位后的信息码,用生成多项式进行模2除法,产生余数
      对应的CRC码:101001001

    模2除法的方法如下:
    1)最高位为1则商1,最高位为0则商0
    2)减法规则为:对应位上相同,结果为0,不同,结果为1
    在这里插入图片描述
    4. 检错和纠错
    在这里插入图片描述

    六、总结

    在这里插入图片描述

    展开全文
  • 校验码(奇偶校验码)

    千次阅读 多人点赞 2020-09-21 21:05:16
    通过加入校验位后的1个数是奇数还是偶数,可分为两种: 奇校验:1的个数为奇数 偶校验:1的个数为偶数 下图为奇校验和偶校验的设置方法。 例如:M的ASCII77,二进制表示为01001101,若要求奇校验校验位在最高位...
  • 奇偶校验码,海明校验码 和 循环冗余校验码(CRC)   奇偶校验码是 奇校验码 和 偶校验码 的统称. 它们都是通过在要校验的编码上加一位校验位组成. 如果是 奇校验 加上校验位后,编码中1的个数为 奇数...
  • 奇偶校验码

    千次阅读 2021-03-20 16:39:32
    奇偶校验码就是用来检测数据传输过程中是否发生错误的一检验方式,是检验码中最简单的一 本质 奇校验 信息位 + 校验位里面 1 的个数的总和为奇数个 偶校验 信息位 + 校验位里面 1 的个数的总和为偶数个 信息...
  • 说是C++实现的,其实和C差不多。LTE中CRC24a是主要用于数据信道的校验码。...用两种方法实现的校验码,一种是查表法,另外一种是纯粹的计算法。在csdn上面搜了很多没有搜到24a的,因此上传一个,大家共享。
  • 校验码】数据校验码

    千次阅读 2016-11-05 22:05:59
    计算机系统在进行数据的传输和存储时,难免会发生错误。为了避免这种错误,一方面是从硬件的方面着手,提高硬件的抗干扰能力和可靠性;而另一方面在数据编码上采取编码纠码的措施,使得...常用的数据校验码有奇偶校验码
  • 校验码之奇偶校验码

    万次阅读 2017-07-26 11:27:01
    校验码之奇偶校验码 在计算机系统中各部件需要进行数据交换,为了确保数据在传送过程中正确无误,我们需要使用校验码来测试数据是否出错。 校验的基本思想:将编码分为合法编码和错误编码。合理的设计编码规则使数据...
  • 常用校验码(奇偶校验,海明校验,CRC)学习总结 参考手册 发布时间:18-03-0716:12优质原创作者 一.为什么要有校验码? 因为在数据存取和传送的过程中,由于元器件或者噪音的干扰等原因会出现错误,这个时候...
  • 校验码

    千次阅读 2013-08-07 18:19:46
    通常使用校验码的方法来检测传送的数据是否出错。  其基本思想是把数据可能出现的编码分为类:合法编码和错误编码。合法编码用于传送数据,错误编码是不允许在数据中出现的编码。  码距是校验码中的一个重要概念...
  • 奇偶校验码是一增加二进制传输系统最小距离的简单和广泛采用的方法。例如,单个的奇偶校验将使码的最小距离由一增加到二。 一个二进制码字,如果它的码元有奇数个1,就称为具有奇性。例如,码字“10110101”有五...
  • CRC校验码

    千次阅读 2017-03-15 14:55:56
    CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一数据传输检错功能,对数据进行多项式计算,...
  • 循环冗余编码(CRC)是二进制通信系统中一种常用的差错检测方法,它是通过在原始数据后面添加冗余校验码来实现检测差错的目的。CRC编码的基本原理就是:CRC可由原始数据流的二进制去除以一称作为生成多项式的常数,...
  • 奇偶校验码是 奇校验码 和 偶校验码 的统称.  它们都是通过在要校验的编码上加一位校验位组成.  如果是 奇校验 加上校验位后,编码中1的个数为 奇数个  如果是 偶校验 加上校验位后,编码中1的个数为 偶数个  ...
  • CRC校验码的理解+CRC校验码算法代码

    万次阅读 2015-11-26 20:54:48
    Redundancy Check):是数据通信领域中最常用的一查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,...
  • 文章目录:什么是校验码?1.奇偶校验码怎么通过奇偶校验码判断数据是正确还是错误呢?(1)奇校验(1)偶校验为什么无法检查出偶数个错误?2.海明(汉明)校验码什么是海明校验码?一题搞懂海明码,在信息位 n=4 ,...
  • 计算机基础--检错与纠错码1检错与纠错的原由奇偶校验码1、水平奇校验2、水平偶校验3、不足和改进海明校验码1、编码纠错理论--编码最小距离(码距)2、检错3、纠错4、不足 检错与纠错的原由 元件故障、噪声干扰等因素...
  • 校验码 奇偶校验 海明码校验

    千次阅读 2020-06-28 17:07:10
    奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中"1"的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 170,678
精华内容 68,271
关键字:

常用的两种校验码是