电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

959

主题

959

帖子

7957

积分

高级会员

Rank: 5Rank: 5

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

vtpp4vvsgfj64044431419.gif

vtpp4vvsgfj64044431419.gif

" |! o, [# x' I8 X0 i点击上方蓝色字体,关注我们
% B2 ]: w9 s  f
* f+ _. Q8 H7 E  f  n9 M选择CRC校验码的长度时确实需要在检错能力和系统开销之间做出权衡。CRC码的长度(通常是4、8、16、32位)直接影响到能检测到的错误类型和概率。9 V+ x" b/ d: T! p

! v3 f) B5 T( t) h7 g

0tnvlapkqrq64044431519.png

0tnvlapkqrq64044431519.png
, [! Z2 y- g/ n
要确定在一定检错概率 p 下的最小CRC长度,可以从几个方面入手,包括信息长度 n、错误检测概率需求 p、以及CRC多项式的选择。6 c2 E* \+ h2 W! B

( X/ d- F+ P1 s5 m0 e下面从理论背景、实用方法以及计算步骤等方面详细解释。  t2 s; c% a" A
1
" O/ a, w0 M3 |) @. L- o4 L; x理论背景:CRC的检错原理+ R3 S( ?2 d3 _+ a6 `! n
CRC(Cyclic Redundancy Check)使用一个特定的生成多项式对数据帧进行余数计算,产生一个校验码。
( r& _& N* C! p2 F, Z7 C( E
% ]0 \% Y) t; V: }; g) q( K/ P接收端利用相同的多项式重算余数,如果余数为零则判定无误差,否则判定出错。8 G) Z$ `+ [8 [- p6 v+ @8 [3 J: S! C
  b8 c+ L4 J& \, b# ~! h; e) B
对于不同长度的CRC码,其生成多项式能探测不同类型的错误:
9 Z, U$ L* I8 y$ L6 h3 E
  • 单比特错误:任何CRC都能检测单比特错误。
  • 连续位翻转的突发错误:长度为 k 位的CRC最多可以检测到长度不超过 k 位的突发错误。
  • 随机错误:概率与CRC码的位数有关。
    . P  S' C7 G6 y, ~. Z( d

    $ P& s) G" x, l1 p/ p  F( G2
    " v1 M- @2 i* g( O$ w检错概率的数学模型3 M6 v9 K: @# d% y1 o: S
    CRC的检错概率可以近似通过以下公式进行估算:
    . @0 H$ ^5 v+ s' ?

    vkrxvwac1xd64044431619.jpg

    vkrxvwac1xd64044431619.jpg

    ' T2 t& i0 U5 _; v# z其中 k为CRC校验码的位数。
    & A; v% J( f& p0 I+ f; m* N
    " T1 g. g8 |4 E3 s7 w4 h: K& d9 T例如,对于一个8位的CRC码,理论上可检测到的错误概率约为 1?1/256=0.996。从公式中可以看出,位数越多,检错概率越高。
    / s' y! q/ c9 `3! b" D, y7 k2 I" e, j( M: u5 Y
    根据信息长度 n 和所需检错概率 p 计算CRC位数
    . q4 Z/ S) H3 T9 q5 \# z在实际应用中,我们可以通过以下步骤来确定CRC的位数:确定目标检错概率:假设我们要求的检错概率 Pdetect≥p。
    ; A9 B6 d7 E; y) Y5 ~  S6 [) _! l, G8 L
    代入公式并求出位数:我们可以重新排列公式来得到最小的CRC位数:
    0 Q( T6 m2 x2 }8 r. H

    5hnnjxxd4il64044431719.jpg

    5hnnjxxd4il64044431719.jpg
    ! t2 _  h% ]% w4 B
    例如,若我们希望检错概率 p=0.999,则:
    6 h3 I% W' k  S* _( h# l5 s

    33vw2bzldje64044431819.jpg

    33vw2bzldje64044431819.jpg

      Q  {1 }5 o! P. j这意味着至少需要10位的CRC才能满足这个检错概率。
    2 p) m$ Y* P6 h2 V9 s& k! _8 ?7 r: ^; T
    考虑信息长度 n:虽然理论上,CRC的检错能力与信息长度 n 不直接相关,但在极长的帧中,可能会遇到极端情况。6 L0 E2 Q' `* C( |3 T$ [7 |

    + a/ C8 Z7 |* x2 I因此,当 n 非常大(如数百甚至上千位)时,建议增加1-2位以提高稳健性。
    0 R' m$ H) \% M7 m$ e/ d4
    & e& r+ S1 y$ |/ F- _CRC位数选择的经验法则
    4 g6 f; V/ x' z$ |
  • 短数据帧(如10-100比特):通常8位的CRC码已经可以提供很高的检错概率,适合普通通信应用。
  • 中等数据帧(100-1000比特):16位的CRC是更合适的选择,适合要求较高检错概率的协议。
  • 长数据帧(1000比特以上):32位CRC可以提供极高的检错能力,多用于高可靠性的工业、通信或存储系统中。. U) u$ y" p0 a1 I$ ~& r' q. y4 ~! e
    9 q5 ^5 P) L* f! l9 j% C
    假设你设计的协议需要保证检错概率不低于 p=0.999,且每帧数据为 n=500 比特。
    * d5 j. V1 M7 v2 M& R3 Z; j" w+ |; k7 Q3 r: L
    根据上面的公式,我们计算得到的最小位数约为10位;结合数据帧长度,实际应用中推荐至少选择12位甚至16位的CRC,以确保满足高检错需求。
    ) h$ r7 E* T0 w& `/ `! \' _' z" P) t1 F5 l! ]! O( N7 j7 q
    进一步的,标准CRC多项式(如CRC-16或CRC-32)经过广泛验证,在通信和存储应用中可靠性高,通常推荐直接采用这些标准多项式。3 G  W  O8 m  j. ]5 T$ Y5 k' j. V
    5$ ~3 {" W* i& l: d4 R0 p
    CRC码位数对系统的影响
    4 j' x7 C* ^/ i8 r+ S2 d位数越长的CRC校验码,校验性能越好,但代价是数据包的开销和计算复杂性增大。
    $ x3 G( G% g, p; [7 X# n
    3 v, U% C. y7 U% }典型的实现中:
    / B" X- m  J' Q8 ?9 T% Q" \: P6 Y
  • 计算性能:硬件CRC加速器可以显著降低较长CRC的计算延迟。
  • 通信开销:8位CRC增加的传输开销通常较小,但超过16位时,额外开销对低速通信协议影响较大。. a2 j" ~7 x- f% i
    0 F% X* `, ^/ d
    综合以上分析,为了在实际应用中确定CRC码长度,建议的步骤如下:/ P0 V6 B; m4 z2 t' m. _' K3 M
  • 根据要求的检错概率计算最小位数。
  • 考虑数据帧长度,适当增加1-2位以提高稳健性。
  • 使用标准CRC多项式以确保通用性和可靠性。* N6 m$ I9 W4 v. }3 H4 P  y

    , @7 F2 a  G# c3 @, _) L. t8 l. o

    pa2u5r01uci64044431919.jpg

    pa2u5r01uci64044431919.jpg
    . U! N' ^* I$ ?# S) K  w9 A  w7 q

    d0vuz2dwazn64044432019.gif

    d0vuz2dwazn64044432019.gif

    4 W2 Q; j6 ?' f( N% V点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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