关于使用数学公式生成 CRC 多项式的部分有些误导。CRC 多项式中 1 的位数是多项式可能的最大汉明距离 (HD),通常实际汉明距离会更小,具体取决于数据长度。最大误码检测是汉明距离 - 1。
通常,检测更多位数的 CRC 多项式是多个素数多项式的乘积。例如,对于一个 32 位 CRC 可以检测多达 7 个错误的数据 + crc 长度 = 1024 位,33 位 CRC 多项式 0x1f1922815 = 0x787*0x557*0x465*0x3*0x3。0x3 因子将检测任何奇数位错误,因此 CRC 需要检测 1024 位中所有可能的 6 位错误。
我不知道确定最大误码检测的公式,通常会进行一些优化的蛮力搜索。例如,假设正在检查一个 32 位 CRC 多项式以查看它是否可以检测到数据的所有 6 位错误 + 1024 位的 crc 长度,1024 位中可能的 6 位错误模式的数量是 comb(1024,6) = 1,577,953,087,760,896。为了将其减少到合理的程度,可能的 3 位错误的数量,comb(1024,3) = 178,433,024,用于创建一个大表,每个条目包含 CRC 和 3 位索引。该表被排序,然后用于检查 3 位模式的 CRC 与不同的 3 位模式的 CRC 相同的冲突。还需要检查 4 位模式的故障(检查两个不同的 2 位模式之间的冲突)。
通常随着数据长度变小,保证检测到的最大错误比特数会增加。这是一组 CRC 多项式及其错误检测能力的链接。
https://users.ece.cmu.edu/~koopman/crc/crc32.html
注释页面解释了表格条目:
http://users.ece.cmu.edu/~koopman/crc/notes.html