电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

959

主题

959

帖子

7957

积分

高级会员

Rank: 5Rank: 5

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

vtpp4vvsgfj64044431419.gif

vtpp4vvsgfj64044431419.gif

3 ~$ N5 b) i( U5 s1 |/ {# E) K点击上方蓝色字体,关注我们
& P6 y2 X4 m4 A1 r, h1 H; _7 B' h( f9 z" r
选择CRC校验码的长度时确实需要在检错能力和系统开销之间做出权衡。CRC码的长度(通常是4、8、16、32位)直接影响到能检测到的错误类型和概率。5 w9 z2 a: u* a  e4 N
6 x  F$ K: U- ?! Y! Y' t& {

0tnvlapkqrq64044431519.png

0tnvlapkqrq64044431519.png
+ I) L. T1 z& E* R
要确定在一定检错概率 p 下的最小CRC长度,可以从几个方面入手,包括信息长度 n、错误检测概率需求 p、以及CRC多项式的选择。/ s8 M3 m7 s& s* o5 j* v

3 Y( F: ]8 S* d5 [( y4 C0 m下面从理论背景、实用方法以及计算步骤等方面详细解释。
: i. T' s. j; p) u# h$ o( J6 H1
. P6 K+ r2 t# g; E! J/ w理论背景:CRC的检错原理8 ?- M8 ~9 L- k' v9 X4 }. H
CRC(Cyclic Redundancy Check)使用一个特定的生成多项式对数据帧进行余数计算,产生一个校验码。! M* Z* M/ A3 e+ P
2 G) x1 i- M- e
接收端利用相同的多项式重算余数,如果余数为零则判定无误差,否则判定出错。
2 J3 s6 i# R* t
  Q' {% l0 x! z( N" p+ E, ?对于不同长度的CRC码,其生成多项式能探测不同类型的错误:
  |5 k2 m( {7 B" t. V; r8 l
  • 单比特错误:任何CRC都能检测单比特错误。
  • 连续位翻转的突发错误:长度为 k 位的CRC最多可以检测到长度不超过 k 位的突发错误。
  • 随机错误:概率与CRC码的位数有关。
    . ]% b5 W+ l- ~/ S3 b

    - p: ?/ u  j- P8 f# [2% c4 y8 B" o0 y/ e
    检错概率的数学模型
    $ J) L* t4 s8 W2 {' u+ ?& {CRC的检错概率可以近似通过以下公式进行估算:' g6 h9 s$ j' H; J$ L+ C0 P

    vkrxvwac1xd64044431619.jpg

    vkrxvwac1xd64044431619.jpg
    / d% Q' n7 L& v# z
    其中 k为CRC校验码的位数。; a$ {2 v& a# R0 I( p7 L6 ~0 ]& m
    5 e& x; h6 `2 f& F* N# N* @7 ^/ ]
    例如,对于一个8位的CRC码,理论上可检测到的错误概率约为 1?1/256=0.996。从公式中可以看出,位数越多,检错概率越高。
    " n- ~# v' q& _7 }- k5 `9 V3/ j* i8 S; M( d% q* B. m, g# |
    根据信息长度 n 和所需检错概率 p 计算CRC位数! @2 y6 a  g% K6 f6 [
    在实际应用中,我们可以通过以下步骤来确定CRC的位数:确定目标检错概率:假设我们要求的检错概率 Pdetect≥p。
    ) p5 J: D3 B" y& Y+ z
    3 K3 P# s: q* V! W+ r+ ]代入公式并求出位数:我们可以重新排列公式来得到最小的CRC位数:
    ) o: s( \5 F( V

    5hnnjxxd4il64044431719.jpg

    5hnnjxxd4il64044431719.jpg

    , [; O  R/ r4 \1 ?# X例如,若我们希望检错概率 p=0.999,则:
    % b. K, d- @5 Z. q4 w

    33vw2bzldje64044431819.jpg

    33vw2bzldje64044431819.jpg

    6 N5 _4 f$ \6 F: t7 H( X4 Z" B这意味着至少需要10位的CRC才能满足这个检错概率。. [+ _: \& _0 d0 W5 s4 K

    $ B# y- S7 G  F) n8 E: `0 c1 s9 {考虑信息长度 n:虽然理论上,CRC的检错能力与信息长度 n 不直接相关,但在极长的帧中,可能会遇到极端情况。
    , K0 G/ ]* P: E& J# Y* j9 I4 q1 {, ?# C5 c
    因此,当 n 非常大(如数百甚至上千位)时,建议增加1-2位以提高稳健性。
    + [& q& _" n+ p  q. ]' y4
    * S; P2 Q9 ?/ PCRC位数选择的经验法则4 D! ]4 U6 {( X1 @% a
  • 短数据帧(如10-100比特):通常8位的CRC码已经可以提供很高的检错概率,适合普通通信应用。
  • 中等数据帧(100-1000比特):16位的CRC是更合适的选择,适合要求较高检错概率的协议。
  • 长数据帧(1000比特以上):32位CRC可以提供极高的检错能力,多用于高可靠性的工业、通信或存储系统中。
    3 H3 I5 L# R; i* Z, K

    ' s4 _, F  f( G6 \4 ^1 M  Z% C* _( }假设你设计的协议需要保证检错概率不低于 p=0.999,且每帧数据为 n=500 比特。, V/ e1 k! U" Y2 }! F
    # u1 X) f3 B+ {: f. p! n* h+ B
    根据上面的公式,我们计算得到的最小位数约为10位;结合数据帧长度,实际应用中推荐至少选择12位甚至16位的CRC,以确保满足高检错需求。2 q) a: i- y2 |' c: |

    + X* @( j0 P: V进一步的,标准CRC多项式(如CRC-16或CRC-32)经过广泛验证,在通信和存储应用中可靠性高,通常推荐直接采用这些标准多项式。
    ; C1 F- y$ @* F" T7 C; Z52 `( @1 H% _7 c1 o, R- Y4 b
    CRC码位数对系统的影响
    6 G9 x/ ]. Q. R% `位数越长的CRC校验码,校验性能越好,但代价是数据包的开销和计算复杂性增大。: p0 R3 r; ?  B0 i8 n; l; Q

    2 i' E3 a* k( @% U( A* Q典型的实现中:
    6 k9 e# W  X8 a( {$ W& u! ~
  • 计算性能:硬件CRC加速器可以显著降低较长CRC的计算延迟。
  • 通信开销:8位CRC增加的传输开销通常较小,但超过16位时,额外开销对低速通信协议影响较大。
    9 w- n% C1 m! V6 F% i3 I

    8 f- g0 N4 w. f$ o; [6 m综合以上分析,为了在实际应用中确定CRC码长度,建议的步骤如下:6 |- {" N. L- D+ _
  • 根据要求的检错概率计算最小位数。
  • 考虑数据帧长度,适当增加1-2位以提高稳健性。
  • 使用标准CRC多项式以确保通用性和可靠性。- v9 ?( Z  E+ {5 D1 P

    - a' `, X! d! J- y' w- i" u

    pa2u5r01uci64044431919.jpg

    pa2u5r01uci64044431919.jpg

    ; e* j$ d) b  O* U/ W

    d0vuz2dwazn64044432019.gif

    d0vuz2dwazn64044432019.gif
    & Y4 \( x! S- ?: h" R2 G( N1 E9 R
    点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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