エラー検出効率(CRC、チェックサムなど)
-
19-09-2019 - |
質問
私はそれぞれ1000バイトのデータユニットを送信する仮説的な状況を持っています。故障率はまれですが、エラーが発生すると、単一のビットエラーになる可能性が低く、数ビットのエラーになる可能性が高くなります。
最初はチェックサムを使用することを考えましたが、どうやら1ビットよりも大きいビットエラーを見逃す可能性があります。パリティチェックも機能しないため、CRCが最良の選択肢になる可能性があります。
1000バイトで環状冗長チェックを使用するのは効率的ですか?それとも、よりうまく機能する他の方法はありますか?
解決
周期的な冗長チェック(CRC)が一般的です 具体的には 精度が保証されている複数のビットエラーを検出する効率のため。
トレードオフが精度と計算の複雑さであるCRC多項式を生成するためのさまざまな設計があります。あなたの場合、正確性の要件を満たす「最速」のものを選択できます。
あなたは、このウィキペディアの記事から始めたいと思うかもしれません 周期的な冗長性チェック.
他のヒント
CRCはここで別の質問で取り上げられています
CRCはいつMD5/SHA1よりも使用するのが適切ですか?
ランダムなエラーを検出し、実装しやすいのに適しています。
CRCを使用するのは正常です。 「効率」とはどういう意味かはわかりませんが、CRCがハードウェアに実装されることもあると思います(たとえば、イーサネットカードに)。それ以外の場合は、「最適化された」実装を見つけることができます(ルックアップテーブルを使用)。
ディスクセクターはどれくらいですか?おそらく少なくとも512バイト。 CRCは、ハードウェアレベルのディスクECCの昔からのスキームです。
ストックCRC多項式アルゴリズムは、少数のビットエラーに非常に効果的です。正確な精度は数学的に計算可能です。 CRCは、比較的少数のゲートとシフトレジスタがその場でジョブを管理できるハードウェアでも非常に効率的です。