0

参考这篇文章: https ://www.digikey.com/eewiki/display/microcontroller/CRC+Basics

多项式密钥是CRC的重要组成部分。密钥不仅仅是随机多项式;它们是使用一组数学公式生成的,旨在增加 CRC 过程识别的错误数量。多项式通常由网络协议或外部设备定义。由于有一套完善的可用密钥,这里不讨论定义密钥的过程。

我了解如何使用给定的多项式密钥计算 CRC,但是,如何生成多项式密钥,并确保它可以使用给定的一组协议捕获尽可能多的错误?

我假设多项式键与以下内容有关:

  1. 数据长度
  2. 数据速度
  3. 其他的?
4

1 回答 1

2

关于使用数学公式生成 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

于 2020-04-13T08:55:47.927 回答