メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

comm.CRCGenerator

R2026a

CRC 符号ビットの生成と入力データへの付加

comm.CRCGenerator は将来のリリースで削除される予定です。代わりに crcGenerate を使用してください。 (R2024b 以降)コードの更新については、「バージョン履歴」を参照してください。

説明

comm.CRCGenerator System object™ は入力フレームごとに巡回冗長検査 (CRC) 符号ビットを生成し、それらをフレームに付加します。詳細については、CRC 発生器の動作を参照してください。

入力フレームごとに CRC 符号ビットを生成し、それらをフレームに付加するには、以下の手順に従います。

  1. comm.CRCGenerator オブジェクトを作成し、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とはを参照してください。

作成

説明

crcgenerator = comm.CRCGenerator は CRC 符号発生器 System object を作成します。このオブジェクトは、指定された生成多項式に従って CRC ビットを生成し、それらを入力フレームに付加します。

crcgenerator = comm.CRCGenerator(Name,Value) は、1 つ以上の名前と値のペアを使用してプロパティを設定します。たとえば、comm.CRCGenerator('Polynomial','z^16 + z^14 + z + 1') は CRC 発生器 System object を構成し、CRC-16 巡回冗長検査ビットを入力フレームに付加します。各プロパティ名を引用符で囲みます。

crcgenerator = comm.CRCGenerator(poly,Name,Value) は CRC 符号発生器 System object を作成します。このオブジェクトは、Polynomial プロパティを poly に設定し、指定の他のプロパティは指定の値に設定しています。

例

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。

プロパティが "調整可能" の場合、その値をいつでも変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

CRC アルゴリズムの生成多項式。次のいずれかとして指定します。

  • 'z^3 + z^2 + 1' などの多項式の文字ベクトル。

  • バイナリ行ベクトル。降べきの順に並べた生成多項式の係数を表します。このベクトルの長さは (N+1) です。ここで N は生成多項式の次数です。たとえば、[1 1 0 1] は、多項式 z3+ z2+ 1 を表します。

  • 多項式の非ゼロの項の z の指数を降べきの順に含む整数行ベクトル。たとえば、[3 2 0] は、多項式 z3 + z2 + 1 を表します。

詳細については、Communications Toolbox での多項式の表現を参照してください。

既定値は CRC-16-CCITT 生成多項式です。次の表に、よく使用される生成多項式の例を示します。

CRC 名生成多項式
CRC-32'z^32 + z^26 + z^23 + z^22 + z^16 + z^12 + z^11 + z^10 + z^8 + z^7 + z^5 + z^4 + z^2 + z + 1'
CRC-24 'z^24 + z^23 + z^14 + z^12 + z^8 + 1'
CRC-16 'z^16 + z^15 + z^2 + 1'
CRC-16-CCITT'z^16 + z^12 + z^5 + 1'
反転 CRC-16'z^16 + z^14 + z + 1'
CRC-8'z^8 + z^7 + z^6 + z^4 + z^2 + 1'
CRC-4 'z^4 + z^3 + z^2 + z + 1'

例: 'z^7 + z^2 + 1'、[1 0 0 0 0 1 0 1]、および [7 2 0] は同一の多項式 p(z) = z 7 + z 2 + 1 を表します。

データ型: double | char

内部シフト レジスタの初期状態。バイナリ スカラー、または生成多項式の次数に等しい長さをもつバイナリ行ベクトルとして指定します。スカラー値は、生成多項式の次数に等しい長さの行ベクトルに拡張されます。

データ型: logical

CRC チェックサムの計算での直接アルゴリズムの使用。false または true を指定します。

このプロパティを true に設定すると、CRC チェックサムの計算に直接アルゴリズムが使用されます。このプロパティを false に設定すると、CRC チェックサムの計算に非直接アルゴリズムが使用されます。

直接アルゴリズムと非直接アルゴリズムの詳細については、誤りの検出と訂正を参照してください。

データ型: logical

入力バイトを反転する。false または true を指定します。このプロパティを true に設定すると、シフト レジスタに入力される前に入力フレームがバイト単位で反転されます。

このプロパティを true に設定する場合、入力フレーム長を ChecksumsPerFrame プロパティの値で除算した結果が整数で 8 の倍数でなければなりません。

データ型: logical

最終の XOR の前にチェックサムを反転する。false または true を指定します。このプロパティを true に設定すると、入力データがシフト レジスタを完全に通過した後に CRC チェックサムが 180° 反転されます。

データ型: logical

Final XOR。バイナリ スカラー、または生成多項式の次数に等しい長さをもつバイナリ行ベクトルとして指定します。FinalXOR プロパティの値と CRC チェックサムを使用して XOR 演算が実行されてから、入力チェックサムとの比較が実行されます。スカラー値は、生成多項式の次数に等しい長さの行ベクトルに拡張されます。0 に設定すると、XOR 演算を実行しないことと等価になります。

データ型: logical

各フレームで計算されるチェックサムの数。正の整数として指定します。詳細については、CRC 発生器の動作を参照してください。

データ型: double

使用法

説明

codeword = crcgenerator(X) は、入力フレームごとに CRC 符号ビットを生成し、それらをフレームに付加します。

例

入力引数

すべて展開する

入力信号。バイナリ列ベクトルとして指定します。入力フレームの長さは ChecksumsPerFrame プロパティの値の倍数でなければなりません。入力データ型が double の場合は、最下位ビットがバイナリ値として使用されます。詳細については、CRC 発生器の動作を参照してください。

このオブジェクトは可変サイズの入力を受け入れます。オブジェクトがロックされた後は、シミュレーション中に信号のフレーム サイズ (行数) を変更できますが、チャネル数 (列数) は一定のままでなければなりません。詳細については、Variable-Size Signals in Codeを参照してください。

データ型: double | logical

出力引数

すべて展開する

出力コードワード フレーム。入力信号のデータ型を継承するバイナリ列ベクトルとして返されます。出力には、CRC 符号シーケンス ビットが付加された入力フレームが含まれています。

出力コードワード フレームの長さは m + k * r です。ここで、m は入力メッセージのサイズ、k は入力フレームあたりのチェックサムの数、r は生成多項式の次数です。詳細については、CRC 発生器の動作を参照してください。

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。

release(obj)

すべて展開する

stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

例

すべて折りたたむ

バイナリ データを CRC 発生器を通して渡し、ビット エラーを発生させてから、CRC 検出器を使用して誤りを検出します。

ランダムなバイナリ ベクトルを作成します。

x = randi([0 1],12,1);

ChecksumsPerFrame プロパティを 2 に設定した CRC 発生器を使用して、入力メッセージ フレームを符号化します。これにより、受信フレームが同じ長さの 2 つのサブフレームに分割されます。

crcgenerator = comm.CRCGenerator([1 0 0 1],'ChecksumsPerFrame',2);
codeword = crcgenerator(x);

コードワードを復号化して、いずれのサブフレームにも誤りがないことを確認します。

crcdetector = comm.CRCDetector([1 0 0 1],'ChecksumsPerFrame',2);
[~, err] = crcdetector(codeword)
err = 2×1

     0
     0

サブフレーム 2 の最後の要素を反転させることで、2 番目のサブフレームに誤りを発生させます。誤りを含むコードワードを CRC 検出器を通して渡し、2 番目のサブフレームの誤りが検出されるかを検証します。

codeword(end) = not(codeword(end));
[~,err] = crcdetector(codeword)
err = 2×1
     0
     1

アルゴリズム

すべて展開する

参照

[1] Sklar, Bernard. Digital Communications: Fundamentals and Applications. Englewood Cliffs, NJ: Prentice-Hall, 1988.

[2] Wicker, Stephen B. Error Control Systems for Digital Communication and Storage. Upper Saddle River, NJ: Prentice Hall, 1995.

拡張機能

すべて展開する

バージョン履歴

すべて折りたたむ