43

8 ビット、16 ビット、および 32 ビットの CRC を見てきました。

どの時点でより広い CRC にジャンプする必要がありますか?

私の直感的な反応は、データの長さに基づいているということです。

  1. 1 ~ 100 バイト: 8 ビット CRC
  2. 101 ~ 1000 バイト: 16 ビット CRC
  3. 1001 - ??? バイト: 32 ビット CRC

編集: CRC とロットの回答に関するウィキペディアのページを見ると、次のようになります。

<64 バイト: 8 ビット CRC

<16K バイト: 16 ビット CRC

<512M バイト: 32 ビット CRC

4

7 に答える 7

44

研究テーマではありません。それは本当によく理解されています: http://en.wikipedia.org/wiki/Cyclic_redundancy_check

数学はとても簡単です。8 ビットの CRC は、すべてのメッセージを 256 の値のいずれかに要約します。メッセージの長さが数バイトを超える場合、複数のメッセージが同じハッシュ値を持つ可能性がますます高くなります。

同様に、16 ビット CRC は、65,536 の使用可能なハッシュ値の 1 つを提供します。これらの値のいずれかを持つメッセージが 2 つある確率は?

32 ビット CRC では、約 40 億の利用可能なハッシュ値が得られます。

ウィキペディアの記事から:「最大合計ブロック長は次の値に等しい2**r − 1」。それはビット単位です。2**9 - 1511 ビットであることを確認するために多くの調査を行う必要はありません。CRC-8 を使用すると、64 バイトを超える複数のメッセージの CRC チェックサム値が同じになります。

于 2010-02-23T21:13:11.167 に答える
17

CRC の有効性は、複数の要因に左右されます。CRC の SIZE だけでなく、使用する GENERATING POLYNOMIAL も選択する必要があります。以下に応じて、複雑で非直感的なトレードオフがあります。

  • チャネルの予想ビット誤り率。
  • エラーがバーストで発生する傾向があるか、または分散する傾向があるか (バーストが一般的)
  • 保護されるデータの長さ - 最大長、最小長、および分布。

Philip Koopman と Tridib Chakravarty による、2004 年の Dependable Systems and Networks に関する国際会議の議事録で公開された論文 Cy​​clic Redundancy Code Polynominal Selection For Embedded Networks は、非常に優れた概要を提供し、いくつかの推奨事項を示しています。さらに理解を深めるための参考文献も提供します。

http://www.ece.cmu.edu/~koopman/roses/dsn04/koopman04_crc_poly_embedded.pdf

于 2012-01-16T23:58:40.683 に答える
4

CRCのサイズは、入力データのサイズではなく、必要なCRCの一意性に関係していると思います。これは、CRC を計算しているアイテムの特定の使用法と数に関連しています。

于 2010-02-23T21:08:34.413 に答える
3

CRC は、メッセージの長さに合わせて選択する必要があります。CRC のサイズだけの問題ではありません。http://www.ece.cmu.edu/~koopman/roses/dsn04/koopman04_crc_poly_embedded.pdf

于 2010-02-23T21:18:25.350 に答える
0

どのサイズのパケットでも、CRC を使用してシングル ビット エラーを検出できます。ダブル ビット エラーの検出またはシングル ビット エラーの訂正は、CRC が取り得る個別の値の数に制限されるため、8 ビットの場合は 256 になります。16 ビットの場合は 65535。など 2^n

前方誤り訂正で訂正できるビット数は、多項式のハミング距離によっても制限されます。たとえば、ハミング距離が 3 の場合、一致する CRC を持つ 1 つの有効なメッセージを表すビットのセットから、独自の一致する CRC を持つ別の有効なメッセージに変更するには、3 ビットを反転する必要があります。それなら、安心して1ビット修正できます。ハミング距離が 5 の場合、2 ビットを修正できます。ただし、複数のビットを修正する場合は、効果的に複数の位置にインデックスを付けているため、修正された 2 つのビットのインデックスを表すには、1 つではなく 2 倍のビット数が必要になります。

前方誤り訂正では、パケットの CRC と CRC を一緒に計算し、残差値を取得します。エラーがゼロの適切なメッセージには、常に予想される残余値 (CRC レジスタのゼロ以外の初期値がない限りゼロ) があり、エラーの各ビット位置には一意の残余値があるため、それを使用して位置を識別します。その残差でCRC結果が得られた場合、エラーを修正するためにどのビット(または複数のビット)を反転する必要があるかがわかります。

于 2021-10-17T17:31:00.997 に答える