zoukankan      html  css  js  c++  java
  • 海明码距离及检错纠错问题和CRC校验

    海明校验码

    两个长度相等的字符串的海明距离是在相同位置上不同的字符的个数,也就是将一个字符串替换成另一个字符串需要的替换的次数。海明距离与检错和纠错的关系:

    1.海明距离为d+1的编码能检测出d位差错。

    因为在距离为d+1的检验码中,只改变d位的值,不可能产生另一个合法码。如奇偶校验码,海明距离为2,能查出单个错。

    2.海明距离为2d+1的编码,能纠正d位差错。

    因为此时,如果一个码字有d位发生差错,它仍然距离原来的码字距离最近,可以直接恢复为该码。

    (奇偶校验码,海明距离为2,可以检出单个错)

    纠正单比特错的冗余位下界,m为数据位数,r为校验位数  
             (m+R+1)≤2^r

    1.每一个码字从左到右编号,最左边为第1位

    2.校验位和数据位

  • 凡编号为2的乘幂的位是校验位,如1、2、4、8、16、……。
  • 其余是数据位,如3、5、6、7、9、……。
  • 3.每一个校验位设置根据:包括自己在内的一些位的集合的奇偶值(奇数或偶数)。

    海明码纠错过程(只纠错1位)

  • 首先将差错计数器置“0”。
  • 当海明码数据到达接收端后,接收端逐个检查各个校验位的奇偶性。
  • 如发现某一校验位和它所检测的集合的奇偶性不正确,就将该检验位的编号加到差错计数器中。
  • 待所有校验位核对完毕:
  • 若差错计数器仍为“0”值,则说明该码字接收无误。
  • 非“0”值,差错计数器的值为出错位的编号,将该位求反就可得到正确结果。
  •    

    循环冗余检错码CRC

    可以检测到所有长度小于等于r的突发错误

    广泛用于各种网络,几乎所有的局域网

    使用CRC编码时发送方和接收方必须预先商定一个生成多项式G(x),假设有一个m为的帧M(x),使用G(x)生成的帧的步骤如下:

  • 假设G(x)的阶为r, 那么M(x)在末尾添加r个0,得到 m+r位的位模式 。
  • 利用模2出发,用G(x)去除 ,得到对应的余数(总是小于等于r位)。
  • 利用 减去(模2减法)第2步中得到的余数,得到的位模式就是即将被传输的带校验和的帧
  •   

    小结:

    Sender

  • 在数据帧的低端加上r个零,对应多项式为XrM(x)
  • 采用模2除法,用G(x)去除XrM(x),得余数
  • 采用模2减法,用XrM(x)减去余数,得到带CRC校验和的帧
  •   

    Receiver

  • 用收到的幀去除以G(x)
  • 为零:无错误产生。非零:发生了错误,重传
知足上进且温柔
查看全文
  • 相关阅读:
    Java实现 LeetCode 211 添加与搜索单词
    跨平台Unicode与UTF8互转代码
    C++转换unicode utf-8 gb2312编码
    c++ ANSI、UNICODE、UTF8互转
    Visual C++ unicode and utf8 转换
    Unicode和UTF-8的关系
    boost uuid 学习笔记
    boost uuid
    Darwin Streaming server 的 Task 类
    VS2010下编译安装DarwinStreamingServer5.5.5
  • 原文地址:https://www.cnblogs.com/nn-y/p/13498624.html
  • Copyright © 2011-2022 走看看