データ伝送中にエラーが発生することは避けられません。データを受信した後、受信側はまずデータの正確性を検証し、異常なデータを特別に処理します。チェックする方法は多数ありますが、最も一般的なのは CRC 巡回冗長検査です。 CRC アルゴリズムは強力なエラー検出能力と高い効率性を備えており、情報通信分野で最も一般的な検証方法です。 CRC チェックサム アルゴリズムは広く使用されており、実装も簡単ですが、その背後にあるエラー訂正コードの代数理論は、一般の人が理解できるものではありません。したがって、巡回検証の原理を理解せずにアルゴリズムフローを分析するのは賢明ではありません。ソースコードに基づいて実装プロセスを逆にしたとしても、なぜこのように実行されるのか理解できません。一般的に、人々はCRCをアプリケーションの観点から注目し、同じCRC16アルゴリズムであるにもかかわらず、なぜ得られる結果が異なるのかを考えます。この記事はまさにそれを目的としています。 1. CRCの定義 996 という数字を送信するとします。これを 7 で割ると余りが 2 になります。送信するときは、996 から 2 を引いて送信します。受信側は同じ計算を使用して、データ パケットが正しいかどうかを判断します。同じソース データでも、除数が異なると余りが異なります。 CRC アルゴリズムも同様の原理に基づいています。 CRC アルゴリズムのパラメータは次のように説明されます。 1. 除算は2を法として定義されます 2. 除数は、x^16+x^12+x^5+1(0x1021) 2^16+2^12+2^5+2^0=65536+4096+32+1= 69665=0x11021 などの多項式に設定されます。言い表せない規格によれば、多項式の最上位ビットと最下位ビットは 1 でなければならないため、通常は最上位ビットを無視して 0x1021 に簡略化され、Poly として記録されます。 3. 多項式の長さが異なるため、一般的には CRC8、CRC16、CRC32 に分類されます。モジュロ 2 除算は XOR とシフト演算に簡略化されるため、初期値は Init です。 4. さらに3つのパラメータがあります RefIn: テストするデータの各バイトがビット反転されているかどうか (TRUE または FALSE)。 RefOut: 計算後、XOR 出力前に、データ全体がビット反転されているかどうか (TRUE または FALSE)。 XorOut: 計算結果とこのパラメータを XOR して、最終的な CRC 値を取得します。ただし、0 と XOR された数値は数値自体となるため、値が 0 の場合は無視できます。 5. 多項式や初期値などの違いにより、CRC にはさまざまなバージョンがあります。理論的には、多項式は任意に定義できますが、異なるデータに対して計算される CRC 値が可能な限り異なるようにするために、普遍的な標準多項式が数学的に導出されます。 6. https://crccalc.com/ の定義を参照してください。シナリオによって異なる多項式が使用されます。 2. CRCアルゴリズムとテンプレート CRC アルゴリズムの一般的なバージョンは次のとおりです。 CRC8
CRC16
CRC8 および CRC16 の場合、異なるバージョンのパラメータの違いに応じて、表を参照してテンプレート内のパラメータを対応する値に変更すると、対応するバージョンの CRC 値を取得できます。データの逆転に関係するコードは次のとおりです。
3. ルックアップテーブル 上記のコードでは、CRC シフト XOR 演算のループ本体を解きます。時間要件が高いシナリオでは、事前に値テーブルを計算して生成し、スペースと時間を交換することができます。
poly を決定した後、init が 0 ~ 255 であると仮定して、256 個のパラメータを見つけて 1 次元配列に変換します。上記のように、CRC-8/ITU を例にとると、生成される配列は次のようになります。
元の直接計算は、次のようにテーブル参照に変更されます。
CRC16 にはテーブル検索方式も使用できます。 この記事はWeChatのパブリックアカウント「Embedded Systems」から転載したものです。以下のQRコードからフォローできます。この記事を転載する場合は、Embedded System パブリック アカウントにお問い合わせください。 |
<<: 独学で機械学習エンジニアを目指す人のための 10 の戒律
>>: 無人バスは無人タクシーよりも信頼性が高いでしょうか?
ナデラ氏は最近、米国政府によるグーグルに対する反トラスト訴訟で証言した。これは、米国政府が1998年...
写真を鮮明に見るにはどうすればいいですか?サムネイルを何度も拡大すると、モザイクしか見えなくなる場合...
この記事は、Viktor Mayer-Schönberger と Kennedy Cukier によ...
翻訳者|朱 仙中レビュー | Chonglou導入大規模言語モデル (LLM) が世界を席巻するにつ...
<!-- /* Style Definitions */ p.MsoNormal, li.M...
関連概念バイナリ画像とは、2 つの色 (通常は黒と白) のみを含む画像です。バイナリ画像では、各ピク...
ネイチャーの公式サイトのトップページには、世界に衝撃を与えた最新の考古学的発見が掲載された。 200...
51CTO 編集者注: 「Java ガベージ コレクション メカニズムの簡単な分析」では、Java ...
まず、一般的なビザンチン将軍問題からコンセンサスとは何かを理解しましょう。ビザンチン将軍問題ビザンチ...
最も先駆的で影響力のあるキューエンジニアリング技術の 1 つである Chain of Thought...
RPA 導入を成功させるために、この記事では、ビジネスに最適な RPA コンサルタントを選択するプロ...
[[398324]]この記事はWeChatの公開アカウント「Beta Learns JAVA」から転...
「第14次5カ年計画」の骨子には「デジタル化の加速とデジタル中国の構築」という独立した章が設けられ、...
社会における分業がますます洗練されていくにつれ、まるで種の進化のように、新しい職業が次々と生まれ、中...
[[337135]]この記事では、MySQL におけるキーワードの原則を比較的マクロな観点から見てい...