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



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

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

如果这个问题没有一般的答案,我将非常感谢有关以下条件的方法的一些提示:n_total=32n_errors>1和 显然,n_check应该尽可能小。

谢谢。

链接到CRC Zoo笔记:

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

如果您查看 3 位 crc 的表格:

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,在 263 个数据位 => 263+32 = 295 个总位时具有 HD=6(5 位错误检测(,而0x1f4acfb13在 32736 个数据位 => 32736+32 = 32768 个总位时具有 HD=6

。这是一篇关于寻找优质CRC的pdf文章:

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


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

相关内容

  • 没有找到相关文章

最新更新