如何选择CRC校验码的长度?

共 2776字,需浏览 6分钟

 ·

2024-11-30 08:00

点击上方蓝色字体,关注我们

来源于小伙伴提问。



选择CRC校验码的长度时确实需要在检错能力和系统开销之间做出权衡。CRC码的长度(通常是4、8、16、32位)直接影响到能检测到的错误类型和概率。


要确定在一定检错概率 p 下的最小CRC长度,可以从几个方面入手,包括信息长度 n、错误检测概率需求 p、以及CRC多项式的选择。


下面从理论背景、实用方法以及计算步骤等方面详细解释。


1


理论背景:CRC的检错原理

CRC(Cyclic Redundancy Check)使用一个特定的生成多项式对数据帧进行余数计算,产生一个校验码。


接收端利用相同的多项式重算余数,如果余数为零则判定无误差,否则判定出错。


对于不同长度的CRC码,其生成多项式能探测不同类型的错误:

  • 单比特错误:任何CRC都能检测单比特错误。

  • 连续位翻转的突发错误:长度为 k 位的CRC最多可以检测到长度不超过 k 位的突发错误。

  • 随机错误:概率与CRC码的位数有关。


2


检错概率的数学模型

CRC的检错概率可以近似通过以下公式进行估算:

其中 k为CRC校验码的位数。


例如,对于一个8位的CRC码,理论上可检测到的错误概率约为 1−1/256=0.996。从公式中可以看出,位数越多,检错概率越高。


3


根据信息长度 n 和所需检错概率 p 计算CRC位数

在实际应用中,我们可以通过以下步骤来确定CRC的位数:确定目标检错概率:假设我们要求的检错概率 Pdetect≥p。


代入公式并求出位数:我们可以重新排列公式来得到最小的CRC位数:

例如,若我们希望检错概率 p=0.999,则:

这意味着至少需要10位的CRC才能满足这个检错概率。


考虑信息长度 n:虽然理论上,CRC的检错能力与信息长度 n 不直接相关,但在极长的帧中,可能会遇到极端情况。


因此,当 n 非常大(如数百甚至上千位)时,建议增加1-2位以提高稳健性。


4


CRC位数选择的经验法则

  • 短数据帧(如10-100比特):通常8位的CRC码已经可以提供很高的检错概率,适合普通通信应用。

  • 中等数据帧(100-1000比特):16位的CRC是更合适的选择,适合要求较高检错概率的协议。

  • 长数据帧(1000比特以上):32位CRC可以提供极高的检错能力,多用于高可靠性的工业、通信或存储系统中。


假设你设计的协议需要保证检错概率不低于 p=0.999,且每帧数据为 n=500 比特。


根据上面的公式,我们计算得到的最小位数约为10位;结合数据帧长度,实际应用中推荐至少选择12位甚至16位的CRC,以确保满足高检错需求。


进一步的,标准CRC多项式(如CRC-16或CRC-32)经过广泛验证,在通信和存储应用中可靠性高,通常推荐直接采用这些标准多项式。


5


CRC码位数对系统的影响

位数越长的CRC校验码,校验性能越好,但代价是数据包的开销和计算复杂性增大。


典型的实现中:

  • 计算性能:硬件CRC加速器可以显著降低较长CRC的计算延迟。

  • 通信开销:8位CRC增加的传输开销通常较小,但超过16位时,额外开销对低速通信协议影响较大。


综合以上分析,为了在实际应用中确定CRC码长度,建议的步骤如下:

  • 根据要求的检错概率计算最小位数。

  • 考虑数据帧长度,适当增加1-2位以提高稳健性。

  • 使用标准CRC多项式以确保通用性和可靠性。

点击阅读原文,更精彩~

浏览 40
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报