我读过一些论文,未检测到 CRC 码的概率不取决于消息大小,它仅与 CRC 位有关。2^(-32) for 32bit CRC
我的问题是:
- 为什么我们需要更广泛的 CRC?即使我们计划对整个文件使用 16 位 CRC,未检测到错误的概率几乎为零,我们可以检测到文件中的所有错误。
- 使用 32bit CRC 时需要什么文件大小小于 2 ^ 32 (512 MB) 是否意味着如果我们有突发错误导致超过 512 MB 的文件更改,CRC 不能检测到吗?
检测 16 位 CRC 的随机错误模式的概率约为 2^(-16) (1/65536)。32 位 CRC 将其减少到 2^(-32)(1 / 40 亿)。
无论文件有多大,所有 CRC 都会检测到单个位错误。如果目标是保证检测任何 2 位错误模式的 32 位 CRC,则最大文件大小 + CRC 为 2^32-1 位。如果包含 CRC 的大小 >= 2^32 位,则如果在 bit[i+0] 和 bit[i+2^32-1] 处发生 2 位错误,则不会检测到错误。如果目标是检测所有 3 位错误的 CRC,通常通过在 CRC 中包含至少 2 个素数多项式因子来完成,其中之一是 (x+1),它将检测任何奇数个位错误,并且一个 31 位因子,如果文件大小 + CRC <= 2^31-1 位,它将检测任何 2 位错误。随着 CRC 保证纠正的错误数量增加,最大文件大小 + CRC 减小。看看“CRC Zoo”中的表格。它是一个 CRC 多项式列表,
https://users.ece.cmu.edu/~koopman/crc/crc32.html
尽管没有被问到,但另一个问题是传输或写入的数据没有错误的概率。这取决于错误率和数据大小。如果一个字节的错误率为e,则零错误的概率是所有字节都没有错误,或 (1 - e )^ n,其中n是字节数。为了处理错误概率很大的情况,使用某种类型的纠错码来降低不可纠正错误的概率。