参考本文:https://www.digikey.com/eewiki/display/microcontroller/CRC+Basics
多项式密钥是CRC的重要组成部分。键不仅仅是随机多项式;它们是使用一组数学公式生成的,目的是增加CRC进程识别的错误数量。多项式通常由网络协议或外部设备定义。由于有一组可靠的键可用,所以这里不讨论定义键的过程。
我理解如何用给定的多项式密钥计算CRC,但是,如何生成多项式密钥,并确保它能够在给定的协议集中捕获尽可能多的错误?
我假定多项式键与以下内容有关:
speed
发布于 2020-04-13 08:55:47
使用数学公式生成CRC多项式的部分有点误导。CRC多项式中的1位数是该多项式的最大可能Hamming距离(HD),一般情况下,实际Hamming距离将根据数据长度而变小。最大误码检测是汉明距离- 1.
通常,检测出较高比特数的CRC多项式是多个素多项式的乘积。例如,对于可以检测数据+ CRC长度= 1024位的多达7个错误的32位crc,33位CRC多项式0x1f1922815 = 0x787*0x557*0x465*0x3*0x3 *0x3。0x3因子将检测任何奇数的位错误,因此CRC需要检测1024位中所有可能的6位错误。
我不知道确定最大误码检测的公式,一般情况下会进行一些优化的蛮力搜索。例如,假设正在检查32位CRC多项式,以确定它是否能够检测数据+ crc长度为1024位的所有6位错误,则1024位中可能出现的6位错误模式的数目是梳(1024 6)= 1,577,953,087,760,896。为了将其降到合理的程度,使用梳(1024,3)= 178,433,024的3位错误的数目来创建一个大表,每个表包含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
https://stackoverflow.com/questions/61182006
复制相似问题