【问题标题】:What kind of errors does CRC method cannot detect?CRC 方法无法检测到哪些错误?
【发布时间】:2019-02-20 18:57:51
【问题描述】:

让我们假设一个 16 位 CRC 多项式 x¹⁶+x¹²+x⁵+1 = 0x11021。该多项式可以:

  1. 检测所有单位错误(与数据大小无关)。
  2. 检测所有高达 16 位宽度的突发错误(与数据大小无关)。
  3. 检测所有奇数位错误(因为它有 4 个多项式项;数据 大小无关)。
  4. 检测高达 32571 位数据大小的 3 位错误 (HD4)。

考虑到以上几点是对的...... CRC 检测不到哪些错误?

【问题讨论】:

标签: crc


【解决方案1】:
  1. 这应该是检测所有最多 16 位的单突发错误。

  2. 0x11021 是 2 个“素数”多项式 0xf01f 和 0x3 的乘积。 0x3 因素是检测所有奇数位错误的原因(它是奇偶校验因素)。

  3. 由于检测到所有奇数位错误,因此该语句变为检测所有 2 位错误,最大数据大小为 32751 位或消息大小为 32767 位,其中包括附加到数据位。对于蛮力方法,使用除第一位是一位之外的所有零位的位串,然后在该串上计算 CRC,直到 CRC 只有一个位作为最高有效位。这可以通过从 0x8000 的 CRC 开始并循环它直到它再次循环回到 0x8000 来模拟,这将需要 32767 个循环。因此,如果 bit[0] 和 bit[32768] == 1(所有其他位 == 0),则计算的 CRC 将为 0,无法检测到 2 个错误位。

CRC 无法检测到哪些错误?

突发总距离超过 16 位的多个突发错误,本质上是超过 16 位长的单个突发错误。

无法检测到 4 个或更多随机分布的位错误的某些模式。如下表所示,未检测到错误的可能性相当低。随着误码数量的增加,故障率也会增加,但除非您有很多误码,否则它仍然很低。一个随机的位模式将在大约 1/65536 的时间内通过 CRC16 检查,但这在正常的消息发送/接收序列中是不寻常的。

48 bit data, 16 bit crc, => 64 bit message
2^64 - 1 possible error patterns
       84 of        635376 possible patterns of  4 error bits fail
     2430 of      74974368 possible patterns of  6 error bits fail
   133001 of    4426165368 possible patterns of  8 error bits fail
  4621021 of  151473214816 possible patterns of 10 error bits fail   
100246083 of 3284214703056 possible patterns of 12 error bits fail

【讨论】:

    猜你喜欢
    • 2020-10-25
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2022-06-30
    • 2013-02-23
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多