zoukankan      html  css  js  c++  java
  • 7.5 校验码(第一部分)

    校验码:奇偶校验、循环校验、海明码校验.这三种校验码当中奇偶校验是最容易的.所以我们没有把它单独提出来讲.但是在讲到海明码的时候会要用到奇偶校验的一些思想,所以在那里我们会提一提这个奇偶校验码.首先我们来看循环校验码.循环校验码又叫CRC码或者是冗余校验码.这个循环校验码它是一种非常重要的纠错码.这种编码它的编码器电路和译码器电路都非常的简单.所以这一种编码得到了广泛的应用.这种编码它的编码和译码的方法我们屏幕上已经列出来了.但是这个东西都讲得比较抽象.待会我们就以一个实例一个例题来说明它的编码译码的过程.但是在讲这个循环校验码之前,我们得了解一个概念,就是模二除法.也可以说是模二运算.当然模二运算不光指除法,还有模二的乘法,加法,减法,那么什么是模二除法?

    模二除法它是不计进位的.所以我们在第二位执行的时候0-1不要进位,它直接0-1就是1.这是模2除法里面的特有的一个规则.模2中间的加减运算有点类似这个异或运算⊕.就是1⊕0=1,0⊕1=1(1-0=1,0-1=1).其实这和异或运算就非常相似了.

    所以模2运算是1-0=1,0-1=1,1-1=0.它为什么101就能够上商呢?这也是基于这一个规则:模2除法是指在做除法运算的过程中不计其进位的除法.我们可以尝试一下试想如果101位置还不能够上商,那么要到第四位才能够上商,上一个1,我们假设是这样子来上商看看会不会有什么问题产生?我们就会发现在这一步就出错了.我原本在这个第四位上1个1,因为第三位我们认为上不了1.结果第4位的1上了之后,得到的这个数值能够让第三位上1了,这样子就产生了一个运算中的一个混乱,所以这种方式是不可取的.所以说模2除法当中只要位数够了,不管它值大小都可以上商.你比如说除数是三位,那么被除数第三位开始就可以上商.了解了这个规则之后,我们再来看一个实例,看一个CRC编码的一个实例:

    由于我们的生成多项式可以写成二进制形式,所以我们先就把它化成二进制.化成二进制的话就是2的0次方=1,就是X的几次方我们就在二进制的第N+1位标1,其他位置都为0.最低位指示的是2的0次方.然后我们要把原始报文再加5个0,加5个0是什么原因呢?是因为生成多项式有6位,两个二进制相除,得到的余数最大的位数就是使用我们的模2除,模2除法运算的那个规则,可能产生的最大的余数,就是除数-1位.因为我们知道如果它的被除数还有和除数同样的位置我们就还可以上商.只有位数不够的时候,才无法上商得到一个余数.

    好,我们就把原始报文添加5个0.再对这个生成多项式对应的二进制码进行模2除,模2除以后就得到了1个余数.然后我们就把这个余数和这个添加了0的原始报文进行相加,相加产生,大家可以想象一下,相加产生的这个数,是不是就能够被它整除,答案是肯定的.就是我们把余数补到被除数这里,那么它们这一个被除数,它就可以被这个除数整除了.能够整除了也就达到了我们的目的.所以这一个报文,编码之后它应该就是1010011011000.就是这么一个报文.这个报文就能够被生成多项式整除了.如果说我把这一个报文从A处传到B处之后,B处就开始检验了.它怎么检验呢?就把这个报文除生成多项式.生成多项式这个东西就像是一个密钥一样,A和B都有它,都有生成多项式.B检验数据正确性的时候就用这个得到的数据去除以生成多项式.如果整除它就认为这个信息是正确的.而无法整除就表示传输过程中出现了错误.CRC就是这样子来检错和编码.


    下面我们来看海明校验码.

    海明校验码它又比CRC要复杂一些.

  • 相关阅读:
    (判断是否为弱联通分量) poj 2762
    (最大生成树) poj 1979
    (暴力) bzoj 2208
    (BFS) bzoj 1102
    (并查集) bzoj 1161
    (数学) bzoj 1800
    (博弈) bzoj 2460
    (dinic) poj 3469
    (双端队列优化的SPFA) bzoj 2100
    (判断负环) bzoj 2019
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/7298170.html
Copyright © 2011-2022 走看看