为crc生成多项式密钥

问题描述 投票:0回答:1

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

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

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

我认为多项式键与以下内容有关:

  1. 数据长度
  2. 数据速度
  3. 其他人?
algorithm crc crc32 crc16 crc64
1个回答
0
投票

有关使用数学公式生成CRC多项式的部分有些误导。 CRC多项式中的1位数量是该多项式的最大可能汉明距离(HD),通常,实际汉明距离将取决于数据长度。最大的比特错误检测是汉明距离-1。

通常,检测更多位数的CRC多项式是多个素数多项式的乘积。例如,对于可检测多达7个数据+ crc长度= 1024位错误的32位CRC,33位CRC多项式0x1f1922815 = 0x787 * 0x557 * 0x465 * 0x3 * 0x3。 0x3因子将检测任何奇数个误码,因此CRC需要检测1024位中所有可能的6位误码。

我不知道确定最大误码检测的公式,通常会进行某种程度的优化蛮力搜索。例如,如果要检查一个32位CRC多项式,以查看它是否可以检测到数据的所有6位错误+ crc长度为1024位,则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

© www.soinside.com 2019 - 2024. All rights reserved.