このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
General CRC Syndrome Detector
生成多項式に従って、受信したコードワード フレームの誤りを検出する
ライブラリ:
Communications Toolbox /
Error Detection and Correction /
CRC
説明
General CRC Syndrome Detector ブロックは、受信したコードワード フレームの巡回冗長検査 (CRC) チェックサムを計算します。通信システムのリンクで CRC 検出を適切に行うには、General CRC Syndrome Detector ブロックのパラメーター設定を、対になる General CRC Generator ブロックと一致させなければなりません。
詳細については、CRC シンドローム検出器の動作を参照してください。
例
Simulink でのノイズを含む BPSK データ フレームの巡回冗長検査
CRC 符号を使用して、ノイズを含む BPSK 信号のフレーム誤りを検出します。
cm_ex_crc_noisy_bpsk_frames
モデルでは、CRC 生成器と検出器のペアは標準 CRC-4 多項式 を使用します。CRC の長さは、多項式の次数によって決定された 4 ビットになります。フレームごとのチェックサムの数は 1 であるため、完全な伝送フレームの終端に 1 つの CRC が付加されます。
バイナリ信号フレームは、フレームの終端に CRC 符号が付加されます。BPSK 変調が信号に適用され、信号が AWGN チャネルを通過します。信号が復調されると、CRC シンドローム検出器が CRC を削除し、CRC の誤りを計算します。
12 ビット フレームのバイナリ データを生成し、CRC ビットを追加します。多項式の次数に基づき、各フレームに 4 ビットが追加されます。BPSK 変調を適用し、AWGN チャネルを通して信号を渡します。復調を行い、CRC 検出器を使用してフレームに誤りが発生しているかどうかを判断します。
CRC 検出の結果が BER 計算と比較されます。
Number of bit errors detected: 6 Number of crc errors detected: 7
端子
入力
In — 受信したコードワード
バイナリ列ベクトル
受信したコードワード。バイナリ列ベクトルとして指定します。
データ型: double
| Boolean
出力
Out — 出力フレーム
バイナリ列ベクトル
出力フレーム。入力信号のデータ型を継承するバイナリ列ベクトルとして返されます。出力フレームには、チェックサムが削除された受信コードワードが含まれています。
出力フレームの長さは n - k * r ビットです。ここで、n は受信コードワードのサイズ、k はフレームあたりのチェックサムの数、r は生成多項式の次数です。
Err — チェックサム エラー信号
バイナリ列ベクトル
チェックサム エラー信号。入力信号のデータ型を継承するバイナリ列ベクトルとして返されます。Err
の長さは [Checksums per frame] の値と一致します。各チェックサム計算に対して、Err
の要素値 0 はチェックサム エラーなしを示し、Err
の要素値 1 はチェックサム エラーありを示します。
パラメーター
ブロック パラメーターを対話的に編集するには、プロパティ インスペクターを使用します。Simulink® ツールストリップの [シミュレーション] タブの [準備] ギャラリーで [プロパティ インスペクター] を選択します。
Generator polynomial — 生成多項式
'z^16 + z^12 + z^5 + 1'
(既定値) | 多項式の文字ベクトル | バイナリ行ベクトル | 整数行ベクトル
CRC アルゴリズムの生成多項式。次のいずれかとして指定します。
'z^3 + z^2 + 1'
などの多項式の文字ベクトル。バイナリ行ベクトル。降べきの順に並べた生成多項式の係数を表します。このベクトルの長さは (N+1) です。ここで N は生成多項式の次数です。たとえば、
[1 1 0 1]
は、多項式 x3+ 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 を表します。
Initial states — 内部シフト レジスタの初期状態
0
(既定値) | 1
| バイナリ行ベクトル
内部シフト レジスタの初期状態。バイナリ スカラー、または生成多項式の次数に等しい長さをもつバイナリ行ベクトルとして指定します。スカラー値は、生成多項式の次数に等しい長さの行ベクトルに拡張されます。
Direct method — CRC チェックサムの計算での直接アルゴリズムの使用
off
(既定値) | on
選択すると、CRC チェックサムの計算に直接アルゴリズムが使用されます。オフにした場合、ブロックでは、CRC チェックサムの計算に非直接アルゴリズムが使用されます。
直接アルゴリズムと非直接アルゴリズムの詳細については、誤りの検出と訂正を参照してください。
入力バイトを反転する — 入力バイトを反転する
off
(既定値) | on
選択すると、シフト レジスタに入力される前に受信コードワードがバイト単位で反転されます。[Reflect input bytes] を選択する場合、受信コードワード長を [Checksums per frame] パラメーターの値で除算したものが、整数かつ 8
の倍数でなければなりません。[Reflect input bytes] をオフにすると、入力データは反転されません。
最終の XOR の前にチェックサムを反転する — 最終の XOR の前にチェックサムを反転する
off
(既定値) | on
[Reflect checksums before final XOR] を選択すると、入力データがシフト レジスタを完全に通過した後に CRC チェックサムが 180° 反転されます。[Reflect checksums before final XOR] をオフにすると、CRC チェックサムは反転されません。
Final XOR — Final XOR
0
(既定値) | 1
| バイナリ行ベクトル
Final XOR。バイナリ スカラー、または生成多項式の次数に等しい長さをもつバイナリ行ベクトルとして指定します。[Final XOR] パラメーターの値と CRC チェックサムを使用して XOR 演算が実行されてから、入力チェックサムとの比較が実行されます。スカラー値は、生成多項式の次数に等しい長さの行ベクトルに拡張されます。0
に設定すると、XOR 演算を実行しないことと等価になります。
Checksums per frame — 各フレームで計算されるチェックサムの数
1
(既定値) | 正の整数
各フレームで計算されるチェックサムの数。正の整数として指定します。
ブロックの特性
データ型 |
|
多次元信号 |
|
可変サイズの信号 |
|
アルゴリズム
直接および間接の CRC アルゴリズム
General CRC Syndrome Detector ブロックは、間接または直接の CRC アルゴリズムを使用した CRC チェックサムの検出をサポートします。
間接 CRC アルゴリズム
間接 CRC アルゴリズムは、多項式 M に対応するバイナリ データ ベクトルを受け取り、多項式 C に対応する r ビットのチェックサムを追加します。xr による乗算は入力ベクトルを左側に r ビット シフトすることに相当するので、入力ベクトルとチェックサムの連結は、多項式 T = M×xr + C に対応します。アルゴリズムは、T が次数 r の定義済み多項式 P (生成多項式) によって除算されるように C を選択します。
アルゴリズムは、T を P で除算し、チェックサムを剰余に対応するバイナリ ベクトルに等しくなるように設定します。したがって、T = Q×P + R の場合 (ここで、R は r より小さい次数の多項式)、チェックサムは R に対応するバイナリ ベクトルです。アルゴリズムは、チェックサムの長さが r になるように、必要に応じてチェックサムの先頭に 0 を追加します。
CRC アルゴリズムの伝送位相を実装する CRC 生成機能は、以下の処理を行います。
入力データ ベクトルを r ビットだけ左にシフトし、対応する多項式を P で除算します。
チェックサムを長さ r (ステップ 1 の剰余に相当) のバイナリ ベクトルと等しくなるように設定します。
チェックサムを入力データ ベクトルに追加します。結果は出力ベクトルです。
先に説明したように、CRC 検出機能は、その入力ベクトル全体のチェックサムを計算します。
CRC アルゴリズムは、バイナリ ベクトルを使用してバイナリ多項式を降べきの順で表します。たとえば、ベクトル [1 1 0 1]
は、多項式 x3+ x2+ 1 を表します。
ビットは、最小のインデックス ビットから最大のインデックス ビットに向かって線形フィードバック シフト レジスタ (LFSR) に入力されます。入力メッセージ ビットのシーケンスは、メッセージ多項式の係数を降べきの順で表します。メッセージ ベクトルは r 個の 0 で拡張され、LFSR をフラッシュします (ここで r は生成多項式の次数です)。左端のレジスタ ステージからの出力 d(1) が 1 の場合、シフト レジスタ内のビットは生成多項式の係数と XOR 計算されたものです。拡張されたメッセージ シーケンスが LFSR を介して完全に送信されると、レジスタにはチェックサム [d(1) d(2) . . . d(r)] が含まれます。これはバイナリ長除算の実装です (メッセージ シーケンスが分子で多項式が分母です)。CRC チェックサムは、除算演算の剰余です。
直接 CRC アルゴリズム
次のブロック線図は直接 CRC アルゴリズムを示しています。
"メッセージ ブロック入力" が の場合の "コード ワード出力" は次のようになります。
直接 CRC 符号化の初期ステップは、位置 X にある 3 つのスイッチによって生起します。このアルゴリズムは k 個のメッセージ ビットを符号化器に送り込みます。これらのビットは、符号語出力の最初の k ビットです。同時に、線形フィードバック シフト レジスタ (LFSR) に k 個のビットが送信されます。k 番目のメッセージ ビットの LFSR への送り込みが完了すると、スイッチは Y の位置に移動します。この例では、LFSR には多項式除算の数値剰余が含まれます。これらのビットは、LFSR からシフトされます。これらのビットは、符号語出力の残りのビット (チェックサム) です。
CRC シンドローム検出器の動作
CRC シンドローム検出器は、指定された生成多項式とフレームあたりのチェックサムの数に従って、受信メッセージ フレームとチェックサム エラー ベクトルを出力します。
チェックサム ビットが各サブフレームから削除されるため、出力フレーム長は N – C×P になります。ここで、N は受信コードワード列の長さ、C はフレームあたりのチェックサムの数、P は生成多項式の次数です。入力フレームは C で割り切れなければなりません。
内部シフト レジスタが特定の初期状態の場合、次のようになります。
受信コードワードは等しいサイズの C 個のサブフレームに分割されます。
CRC は C 個の各サブフレームから削除され、受信コードワード サブフレームに対して計算されたチェックサムと比較されます。
C 個のサブフレームのサブフレーム ビットが連結されることにより、出力フレームが組み立てられて、列ベクトルとして出力されます。
チェックサム エラーは、長さ C のバイナリ列ベクトルとして出力されます。要素値 0 はエラーのない受信サブフレームを示し、要素値 1 は受信サブフレームでエラーが発生したことを示します。
次に示すシナリオでは、3 番目のビットにエラーがある 16 ビットのコードワードを受信し、生成多項式 z3 + z2 + 1 で CRC チェックサムを計算します。また、初期状態は 0 で、フレームあたりのチェックサムの数は 2 です。
フレームあたりのチェックサムの数が 2 で、生成多項式の次数が 3 であるため、受信コードワードは半分に分割され、サイズ 3 の 2 つのチェックサム (半分の受信コードワードそれぞれに 1 つずつ) が計算されます。初期状態 [0]
は CRC アルゴリズムの出力に影響を与えないため、初期状態は表示されません。出力フレームには、半分の受信コードワード 2 つが連結されたものがサイズ 10 の単一ベクトルとして含まれます。チェックサム エラー信号出力には、2 行 1 列のバイナリ フレーム ベクトルが含まれ、そのエントリは、送信されたチェックサムに一致する必要があります。図に示したように、1 番目のチェックサムは送信された値と異なり、2 番目のチェックサムは送信された値と一致します。これは、コードワードの最初の半分を受信したときにエラーが発生したことを示します。
参照
[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.
拡張機能
C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)