【问题标题】:Which one is the better CRC scheme?哪个是更好的 CRC 方案?
【发布时间】:2016-08-07 23:10:36
【问题描述】:

假设我必须对大约 120 位长的消息进行错误检查。对于校验和方案,我有两种选择:

  1. 将消息拆分为 5 个 24 位字符串,并为每个字符串附加一个 CRC8 字段

  2. 用 CRC32 字段附加整个消息

哪种方案的错误检测概率更高,为什么?让我们假设没有关于错误模式分布的先验知识。


更新:

如果系统有一种自然的故障模式,即接收到清除位而不是设置位(即,“1”是 Tx-ed,但“0”是 Rx-ed),而相反的情况不会发生,该怎么办? ?

在这种情况下,长突发错误比特的概率要小得多,假设有效数据具有“0”和“1”的均匀分布,那么最长的突发将被最长的字符串绑定消息中的“1”。

【问题讨论】:

    标签: checksum crc error-detection


    【解决方案1】:

    您必须对错误模式做出一些假设。如果您对所有可能的错误进行均匀分布,那么 5 个 8 位 CRC 将比 1 个 32 位 CRC 检测到更多的错误,因为前者具有 40 位冗余。

    但是,我可以构造许多 24 位错误模式来欺骗 8 位 CRC,并使用其中五个的任意组合来使所有 8 位 CRC 都没有错误。然而,几乎所有这些都会被 32 位 CRC 捕获。

    【讨论】:

    • 谢谢马克。是的,您所说的符合我的直觉(请参阅我对@EJP 的评论)。显然,很容易找到可以欺骗 CRC8 但会被 CRC32 检测到的错误模式。在我看来,这是一个失败概率的问题。那么一个自然的问题是,如果替代方案是 CRC40 而不是 CRC32,该怎么办。在这种情况下,我们具有相同的总冗余,但平均每个 CRC 仍然有 2^(160-40)=2^(120) 条消息。我们如何证明 CRC40 是比 5 x CRC8 更好的方案?
    【解决方案2】:

    当然是 CRC32。它将检测五个段之间的排序错误,并为您提供 224 的错误检测。

    【讨论】:

    • 谢谢。好吧,8x5 给出了 40 位的校验和,而 32 位,所以对我来说,“当然”并不那么明显。让我不太确定的是,对于选项 (1),我有 2^(32-8)=2^(24) 个消息每个 CRC 值(平均),而对于选项 (2) 我有 2^(152-每个 CRC 值 32)=2^(120) 条消息。因此,人们会认为使用选项 (2) 将 2 条消息映射到同一个 CRC 的概率要高得多,因此其强度较低。​​
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    相关资源
    最近更新 更多