最"bit-efficient"的错误检测方法是什么?

What is the most "bit-efficient" error detection method?

要在 n_total 位长度的代码中检测到多个 n_errors 错误,我们必须为某种校验和牺牲一定数量的 n_check 位。

我的问题是:方法是什么,我必须牺牲最少的位数 n_check 才能在 n_total 的代码中检测到给定数量的错误 n_errors位长度。

如果这个问题没有一般性的答案,我将不胜感激关于以下条件的方法的一些提示: n_total=32n_errors>1和 显然n_check应该越小越好。

谢谢。

Link 到 CRC Zoo 注释:

http://users.ece.cmu.edu/~koopman/crc/notes.html

如果您查看 3 位 crc 的 table:

http://users.ece.cmu.edu/~koopman/crc/crc3.html

你可以看到第二个条目,0xb => x^3 + x + 1,有 4 个数据位的 HD(汉明距离)3,总大小为 7 位。这可以检测所有 2 位错误模式(7 位中的),但一些 3 位模式将失败,所有位都应为零的明显情况是

0 0 0 1 0 1 1    (when it should be 0 0 0 0 0 0)

这是一个简单的示例,其中多项式中 1 的位数决定了最大位错误数。为了验证 HD = 3(检测到 2 位错误),检查了所有 21 种情况,共 7 位,2 位错误。

如果你检查 32 位 CRC,你会看到 0x04c11db7(以太网 802.3,HD=6(5 位错误检测)在 263 个数据位 => 263+32 = 295 总位,而 0x1f4acfb13,在 32736 个数据位上有 HD=6 => 32736+32 = 32768 总位。

这是一篇关于搜索好的 CRC 的 pdf 文章:

https://users.ece.cmu.edu/~koopman/networks/dsn02/dsn02_koopman.pdf


查找特定汉明距离的 "good" CRC 需要一些有关该过程的知识。例如,在 0x1f4acfb13 且 HD=6(检测到 5 个坏位)的情况下,32768 位中有 5 个坏位有 314,728,365,660,920,250,368 种可能的组合。但是,0x1f4acfb13 = 0x1f4acfb13 = 0xc85f*0x8011*0x3*0x3 和 0x3 (x+1) 项中的任何一项都将检测到任何奇数个错误位,从而将搜索减少到 4 个坏位情况。对于使用此多项式失败的消息的最小大小,第一位和最后一位将是错误的。这将搜索减少到 5 位中的 2 位,从而将案例数量减少到大约 5.36 亿。不是为每个位组合计算 CRC,而是可以为全 0 位消息中的每个 1 位创建一个 table 个 CRC,然后可以对与特定位相对应的 table 个条目进行异或运算来加快这个过程。对于不是第一位和最后一位的多项式,可以为所有 2 位错误生成 CRC 的 table(假设这样的 table 适合内存),然后排序,然后检查重复值(对于已排序的数据,这只需要对已排序的 table 进行一次顺序传递)。重复值将对应于 4 位故障。其他情况将需要不同的方法,在某些情况下,它仍然很耗时。