差错控制

差错的来源

  • 1、概括来所,传输层的差错都是由噪声引起的
  • 2、全局性:由于线路本身电气特性所产生的随机噪声(热噪声),是信道固有的,随机存在的
    • 解决办法:提高信噪比来减少或避免干扰。(对传感器下手)
  • 3、局部性:外界特定的短暂原因所造成的冲击噪声,是产生差错的主要原因
    • 解决办法:通常利用编码技术来解决
  • 4、差错分为
    • 位错:比特位出错,1变0,0变1
    • 帧错(原始帧为1-2-3)分为:
      • ①:丢失:收到1-3
      • ②:重复:收到1-2-2-3
      • ③:失序:收到1-3-2

数据链路层的差错控制

  • 数据链路层编码与物理层的数据编码与调制不同。物理层编码针对的是单个比特,解决传输过程中比特的同步等问题,如曼彻斯特编码。而数据链路层的编码针对的是一组比特,它通过冗余码的技术实现一组二进制比特串在传输过程是否出现了差错

  • 冗余编码:在数据发送之前,先按某种关系附加上一定的冗余位,构成一个符合某一规则的码字后再发送。当要发送的有效数据变化时,相应的冗余位也随之变化,使码字遵从不变的规则。接收端根据收到码字是否符合原规则,从而判断是否出错

  • 校验原理简介

    • ①由若干位代码组成的一个字叫码字
    • ②将两个码字逐位对比,具有不同的位的个数称为两个码字间的距离
    • ③一种编码方案可能有若干个合法码字,各合法码字间的最小距离称为码距
    • ④当码距d=1时,无检错能力;当d=2时,有检错能力;当d3时,若设计合理,可能具有检错、纠错能力(即海明码)
    • 假如有如下合法编码(2bit映射到4个合法状态)
    信息ABCD
    编码00011011
    码距d=1,当发送放发送01,最后一个比特出错,接收方收到00时不知道是否出错了,因为都是合法码字,即码距为1没有检错能力 * 若前面增加一个冗余的校验位,变成如下(3bit映射到4个合法状态,还有4个冗余的非法状态)
    信息ABCD
    编码100001010111
    则发送方发送001,接收方收到000,000非法则出错
  • 差错控制(比特错)分为

    • 检错编码
      • 奇偶检验码
        • 奇校验码:整个校验码(有效信息位和校验位)中1的个数为奇数
        • 偶校验码:整个校验码(有效信息位和校验位)中的1个数位偶数
        • 求偶校验的硬件实现:各信息进行异或(模2加)运算,得到的结果即为偶校验位
        • 进行偶校验:所有位进行异或,若结果为1说明出错
        • 缺点:只能检测出奇数位错误,无法确定是哪一位出错
      • 循环冗余码CRC(Cyclic Redundancy Check)
        • 1、循环冗余校验码的基本思想
        • 2、如何构造CRC码,下面以一个列子来说明。【例】设生成多项式为G(x)=,信息码为101001,求对应的CRC码
          • ①确定信息码的长度K=6,校验位长度R=生成多项式最高次幂=3 校验码位数N=K+R=9,生成多项式G(x)=,对应二进制编码1101
          • ②移位:信息码左移R位,低位补0,即101001000
          • ③相除:对移位后的多项式进行模2除法,产生余数(3位/R位),模2除中余数最高位为1则商1,否则商0,然后对后3位进行模2减(即异或),直到得出最后的余数,如下图 对应的CRC码:101001001
          • ④检错和纠错
            • 算出的余数不一定代表就是哪位出错,一种余数对应一个出错位,但并不是简单的按顺序一一对应的关系,并且只有当校验位与信息位的关系为-1K+R时,余数一共有种,除了000是正确的,剩下的一种余数才唯一对应一个出错位,此时能够知道哪一位出错,即可纠正一位错误。如果余数状态不够,则会出现余数循环的情况(如下图从第八位出错开始循环)
            • 下面的是满足-1K+R的情况
    • 纠错编码
      • 海明码
        • 1、对于偶校验,只能发现奇数位错误且无法确定是哪一位出错,因为1个校验位只能携带2中状态信息(要么对要么错)
        • 2、海明码设计思路:将信息位分组进行偶校验->多个校验位->多个校验位标准出错位置,假设有信息位n,校验位k,k个校验位可以表示种状态,其中需要包括一种正确状态,其他都是错误状态,因为n+k位中任何一位都可能出错,因此有-1n+k
        • 3、下面示例信息位1010的海明码求解步骤
          • ①确定海明码的位数,根据-1n+k推出k=3,设信息位(1010),共4位,校验位,共3位,对应的海明码为
          • ②确定校验位的分布
          1010
          校验位放在海明位号为的位置上,信息位按顺序放到其余位置,如上
        • 4、求校验位的值
        • 5、纠错(其中分布图可以反映各个分组的关系)
        • 6、补充
          • 如下图,当发生跳变时,=011,是否说明错误呢,显然是不对的,所以需要加一个全校验位对整体进行偶校验
          • 添加全校验位后的海明码

本文章使用limfx的vscode插件快速发布