电子产业一站式赋能平台

PCB联盟网

搜索
查看: 81|回复: 0
收起左侧

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

[复制链接]

724

主题

724

帖子

5176

积分

四级会员

Rank: 4

积分
5176
发表于 2024-11-30 08:01:00 | 显示全部楼层 |阅读模式

vtpp4vvsgfj64044431419.gif

vtpp4vvsgfj64044431419.gif
4 {/ x# r2 U$ u0 \9 B+ x8 X# o
点击上方蓝色字体,关注我们( V9 _  K: ], n+ P/ \
/ X& W" s- A) m+ S$ ~: Q6 t$ M+ v
选择CRC校验码的长度时确实需要在检错能力和系统开销之间做出权衡。CRC码的长度(通常是4、8、16、32位)直接影响到能检测到的错误类型和概率。
: _/ f; \7 y4 B2 F* b! a
0 H5 D; [8 r  T3 B4 t# d" Q

0tnvlapkqrq64044431519.png

0tnvlapkqrq64044431519.png

/ M; }3 m* m2 S# l; c+ v8 Y要确定在一定检错概率 p 下的最小CRC长度,可以从几个方面入手,包括信息长度 n、错误检测概率需求 p、以及CRC多项式的选择。
: z4 O6 J; z, j& }, ]2 P( _
; M& x+ y2 @" L7 q$ m& \2 |2 d+ A( a下面从理论背景、实用方法以及计算步骤等方面详细解释。
5 a5 I3 [, p$ b9 I1 Q1 }1
1 g0 _  W' \- i2 a理论背景:CRC的检错原理, D! `' K3 P9 \5 l0 B
CRC(Cyclic Redundancy Check)使用一个特定的生成多项式对数据帧进行余数计算,产生一个校验码。1 t" L/ q) D  a. @

& B: Q! g3 U5 Q# i接收端利用相同的多项式重算余数,如果余数为零则判定无误差,否则判定出错。  x7 h! d; y- }% a' m# }. K4 y. y
: x& {: t8 E/ E
对于不同长度的CRC码,其生成多项式能探测不同类型的错误:: Y% V. F, Z6 v# S* M! R6 i4 U
  • 单比特错误:任何CRC都能检测单比特错误。
  • 连续位翻转的突发错误:长度为 k 位的CRC最多可以检测到长度不超过 k 位的突发错误。
  • 随机错误:概率与CRC码的位数有关。
    % v8 F8 q$ D9 l8 C* r1 X  a

    ( g1 o7 p/ R1 }2# u' e! I' S7 K7 k4 m. g. o
    检错概率的数学模型
      F1 h  P& `  E% [; \  [& e$ m' |CRC的检错概率可以近似通过以下公式进行估算:: `; Q- Y' \, c) J+ @

    vkrxvwac1xd64044431619.jpg

    vkrxvwac1xd64044431619.jpg
    ( T5 N  }8 h' Z! z1 @; ~
    其中 k为CRC校验码的位数。- o- D" l5 ]3 o, H4 V3 O. X+ C( }9 a6 v

    " K# h& T. s# n4 d; |6 L例如,对于一个8位的CRC码,理论上可检测到的错误概率约为 1?1/256=0.996。从公式中可以看出,位数越多,检错概率越高。3 \( }+ m4 D+ I: O8 W$ M
    3* ~4 _! T  {8 _* `% X" b
    根据信息长度 n 和所需检错概率 p 计算CRC位数
    . I* M; c7 }& j' M在实际应用中,我们可以通过以下步骤来确定CRC的位数:确定目标检错概率:假设我们要求的检错概率 Pdetect≥p。
      T$ ^5 \7 V# u7 {" O9 x
    5 T/ e5 S% i: d1 P' l# w& c! x$ w代入公式并求出位数:我们可以重新排列公式来得到最小的CRC位数:+ ?: b5 [9 R; P3 ^

    5hnnjxxd4il64044431719.jpg

    5hnnjxxd4il64044431719.jpg
    4 P, A) T3 g' }' o
    例如,若我们希望检错概率 p=0.999,则:
    8 V/ f4 B. C7 n, c' C) c6 {

    33vw2bzldje64044431819.jpg

    33vw2bzldje64044431819.jpg
    ' o# S$ i% p' n( A7 F
    这意味着至少需要10位的CRC才能满足这个检错概率。& r' {7 b$ y- e: ~& j; U

      z9 s$ ~- c; `) O考虑信息长度 n:虽然理论上,CRC的检错能力与信息长度 n 不直接相关,但在极长的帧中,可能会遇到极端情况。0 r9 z6 R7 k$ ^) H$ O4 Q3 V* B

    ! y$ N; N- s3 t( m$ T4 E: Q因此,当 n 非常大(如数百甚至上千位)时,建议增加1-2位以提高稳健性。
    7 [2 i5 x/ v" z8 J& D* @4
    ) @# k( n- @( x, b& lCRC位数选择的经验法则
    2 R4 V2 c5 Z: ~
  • 短数据帧(如10-100比特):通常8位的CRC码已经可以提供很高的检错概率,适合普通通信应用。
  • 中等数据帧(100-1000比特):16位的CRC是更合适的选择,适合要求较高检错概率的协议。
  • 长数据帧(1000比特以上):32位CRC可以提供极高的检错能力,多用于高可靠性的工业、通信或存储系统中。. A5 _. O, c0 F0 K- c
    $ K4 U) b( A  B* H
    假设你设计的协议需要保证检错概率不低于 p=0.999,且每帧数据为 n=500 比特。
    / m2 H  G( V9 y6 k  R6 b8 l
    & L( [$ B, r1 m0 e根据上面的公式,我们计算得到的最小位数约为10位;结合数据帧长度,实际应用中推荐至少选择12位甚至16位的CRC,以确保满足高检错需求。4 q! i0 @. P( o4 l% i. P5 @3 E
    2 P! r5 \( n) a3 j
    进一步的,标准CRC多项式(如CRC-16或CRC-32)经过广泛验证,在通信和存储应用中可靠性高,通常推荐直接采用这些标准多项式。
    % ?8 b, u) `$ l) n. C' V5; Z- ?' `9 Y; J( s5 ]- }% C# U
    CRC码位数对系统的影响
    ) i% {& m$ q8 P! v0 ], y; I' N" v0 z位数越长的CRC校验码,校验性能越好,但代价是数据包的开销和计算复杂性增大。; f( ~: n' B: o5 B. O( B
      l0 `# G+ B$ Q1 N1 F
    典型的实现中:
    / v# a3 V- k: _8 x$ R
  • 计算性能:硬件CRC加速器可以显著降低较长CRC的计算延迟。
  • 通信开销:8位CRC增加的传输开销通常较小,但超过16位时,额外开销对低速通信协议影响较大。
    " T5 u6 w4 U8 v2 d* g$ s

    5 h: C2 ^- V7 t( d9 w综合以上分析,为了在实际应用中确定CRC码长度,建议的步骤如下:8 o* \! l# {4 g# ^2 V2 v5 U
  • 根据要求的检错概率计算最小位数。
  • 考虑数据帧长度,适当增加1-2位以提高稳健性。
  • 使用标准CRC多项式以确保通用性和可靠性。8 `! [* o, b" S$ s
    9 [. C% q6 x1 ?) S" r; ?0 p/ N% D9 L

    pa2u5r01uci64044431919.jpg

    pa2u5r01uci64044431919.jpg

    ' c; d* S9 G+ k0 j0 K; \# U- r

    d0vuz2dwazn64044432019.gif

    d0vuz2dwazn64044432019.gif

    " n  G/ f/ c& Z. e6 X+ L点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表