Main Content

comm.CRCDetector

CRC を使用した入力データの誤り検出

説明

comm.CRCDetector System object™ は、受信した符号語全体の巡回冗長検査 (CRC) チェックサムを計算します。通信システムのリンクで CRC 検出を適切に行うには、comm.CRCDetector System object のプロパティ設定を、対になる comm.CRCGenerator System object と一致させなければなりません。詳細は、CRC シンドローム検出器の動作 を参照してください。

CRC シーケンス ビットを含む、受信した符号語の誤りを検出するには、以下の手順に従います。

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

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

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

作成

説明

crcdetector = comm.CRCDetector は CRC 符号検出器 System object を作成します。このオブジェクトは、指定された生成多項式に従って、受信した符号語の誤りを検出します。

crcdetector = comm.CRCDetector(Name,Value) は、1 つ以上の名前と値のペアを使用してプロパティを設定します。たとえば、comm.CRCDetector('Polynomial','z^16 + z^14 + z + 1') は、受信した符号語の CRC 符号の誤りを検出するときに CRC-16 巡回冗長検査ビットを使用する CRC 符号検出器 System object を構成します。各プロパティ名を引用符で囲みます。

crcdetector = comm.CRCDetector(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] は、多項式 x3+ z2+ 1 を表します。

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

詳細については、Representation of Polynomials in Communications Toolboxを参照してください。

最もよく使用される生成多項式には、次のものがあります。

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'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° 反転されます。

このプロパティを true に設定すると、オブジェクトは、最終の XOR の前に CRC チェックサムを 180° 反転します。

データ型: logical

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

データ型: logical

各受信符号語フレームで計算されるチェックサムの数。正の整数として指定します。詳細については、CRC シンドローム検出器の動作を参照してください。

データ型: double

使用法

説明

out = crcdetector(codeword) は、各受信符号語フレームの CRC 符号ビットをチェックし、チェックサムを削除してから、サブフレームを出力フレームに連結します。

[msg,err] = crcdetector(codeword) は、各符号語サブフレームの CRC 符号ビットをチェックするときに計算したチェックサム エラー信号も返します。

入力引数

すべて展開する

受信した符号語。バイナリ列ベクトルとして指定します。

データ型: double | logical

出力引数

すべて展開する

出力フレーム。入力信号のデータ型を継承するバイナリ列ベクトルとして返されます。メッセージ語出力には、チェックサムが削除された受信符号語が含まれています。

出力フレームの長さは n - k * r ビットです。ここで、n は受信符号語のサイズ、k はフレームあたりのチェックサムの数、r は生成多項式の次数です。

チェックサム エラー信号。入力信号のデータ型を継承するバイナリ列ベクトルとして返されます。Err の長さは ChecksumsPerFrame の値と一致します。各チェックサム計算に対して、err の要素値 0 はチェックサム エラーなしを示し、err の要素値 1 はチェックサム エラーありを示します。

オブジェクト関数

オブジェクト関数を使用するには、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

CRC 符号を使用して、ノイズを含む BPSK 信号のフレーム誤りを検出します。

標準 CRC-4 多項式 z4+z3+z2+z+1 を使用して、CRC 発生器と CRC 検出器のペアを作成します。

poly = 'z4+z3+z2+z+1';
crcgenerator = comm.CRCGenerator(poly);
crcdetector = comm.CRCDetector(poly);

12 ビット フレームのバイナリ データを生成し、CRC ビットを追加します。多項式の次数に基づき、各フレームに 4 ビットが追加されます。BPSK 変調を適用し、AWGN チャネルを通して信号を渡します。復調を行い、CRC 検出器を使用してフレームに誤りが発生しているかどうかを判断します。

numFrames = 20;
frmError = zeros(numFrames,1);

for k = 1:numFrames
    data = randi([0 1],12,1);                 % Generate binary data
    encData = crcgenerator(data);                   % Append CRC bits
    modData = pskmod(encData,2);              % BPSK modulate
    rxSig = awgn(modData,5);                  % AWGN channel, SNR = 5 dB
    demodData = pskdemod(rxSig,2);            % BPSK demodulate
    [~,frmError(k)] = crcdetector(demodData); % Detect CRC errors
end

CRC 符号のビット誤りが検出されたフレームを特定します。

find(frmError)
ans = 6

詳細

すべて展開する

参照

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

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

拡張機能