Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

Viterbi Decoder

ビタビ アルゴリズムを使用した畳み込み符号化されたデータの復号化

  • Viterbi Decoder block

ライブラリ:
Communications Toolbox / Error Detection and Correction / Convolutional
Communications Toolbox HDL Support / Error Detection and Correction / Convolutional

説明

Viterbi Decoder ブロックは、ビタビ アルゴリズムを使用して、畳み込み符号化された入力シンボルを復号化し、バイナリ出力シンボルを生成します。トレリス構造体は、畳み込み符号化スキームを指定します。詳細については、畳み込み符号のトレリス表現を参照してください。

このブロックは、パフォーマンスを高速化するために一度に複数のシンボルを処理でき、シミュレーション中に長さが変化する入力を受け入れることができます。可変サイズ信号の詳細は、可変サイズの信号の基礎 (Simulink)を参照してください。

このアイコンは、すべてのオプションのブロック端子が有効になっていることを示しています。

Viterbi Decoder block with optional erasure and reset ports enabled

端子

入力

すべて展開する

畳み込み符号化されたコードワード。列ベクトルとして指定します。復号化器が N 入力ビット ストリームを取る (つまり、2N の入力シンボル候補を受信できる) 場合、ブロックの入力ベクトルの長さはある正の整数 L に対して L×N になります。詳細については、入力および出力サイズ入力値と判別タイプ、および Operation mode パラメーターを参照してください。

この端子は 2 番目の入力端子が有効になるまでは名前なしになります。

データ型: double | single | Boolean | int8 | int16 | int32 | uint8 | uint16 | uint32 | ufixn

コードワードの消去ビット。バイナリ値ベクトルとして指定します。ベクトルの 1 の値は消去されたビットに対応し、0 の値は消去されていないビットに対応します。

受信するデータ ストリームでこれらを消去する場合、復号化器は分岐メトリクスを更新しません。消去および入力のデータ端子の幅とサンプル時間は、同じでなければなりません。

依存関係

この端子を有効にするには、[Enable erasures input port] を選択します。

データ型: double | Boolean

復号化器レジスタの状態をリセットするオプション。スカラー値として指定します。この端子が非ゼロの入力値を受け取った場合、ブロックは入力データを処理する前に内部メモリを初期状態に設定します。復号化器レジスタを初期状態にリセットすることで、次のように設定されます。

  • すべて 0 の状態メトリクス: 0

  • 他のすべての状態メトリクス: 最大値

  • トレースバック メモリ: 0

このブロックにリセット端子を使用することは、Convolutional Encoder ブロックで [Operation mode][Reset on nonzero input via port] に設定することと同じです。

依存関係

この端子を有効にするには、[Operation mode] パラメーターを [Continuous] に設定し、[Enable reset input port] を選択します。

データ型: double | Boolean

出力

すべて展開する

出力メッセージ。バイナリ列ベクトルとして返されます。復号化器が K 個の出力ビット ストリームを生成する (つまり、2K 個の出力シンボル候補を生成できる) 場合、ブロックの出力ベクトルの長さはある正の整数 L に対して L×K になります。詳細については、入力および出力サイズを参照してください。

この端子はブロック アイコンで名前なしになります。

データ型: double | single | Boolean | int8 | int16 | int32 | uint8 | uint16 | uint32 | ufix1

パラメーター

すべて展開する

メイン

畳み込み符号のトレリス表現。符号化率 K / N の符号に対するトレリス表現を含む構造体として指定します。K は入力ビット ストリーム数を表し、N は出力ビット ストリーム数を表します。

トレリス構造体は、関数 poly2trellis を使用して作成するか、手動で作成することができます。この構造体の詳細については、畳み込み符号のトレリス表現および関数 istrellis を参照してください。

トレリス構造体には次のフィールドがあります。

符号化器への入力シンボルの数。2K と等しい整数として指定します。ここで、K は入力ビット ストリームの数です。

データ型: double

符号化器からの出力シンボルの数。2N と等しい整数として指定します。ここで、N は出力ビット ストリームの数です。

データ型: double

符号化器内の状態の数。2 のべき乗として指定します。

データ型: double

現在の状態と現在の入力のすべての組み合わせの次の状態。整数の行列として指定します。行列のサイズは numStates 行 2K 列でなければなりません。

データ型: double

現在の状態と現在の入力のすべての組み合わせの出力。8 進数の行列として指定します。行列のサイズは numStates 行 2K 列でなければなりません。

データ型: double

[Puncture vector] 端子を表示して有効にするには、このパラメーターを選択します。

復号化されたデータをパンクチャするためのパンクチャ パターン ベクトル。列ベクトルとして指定します。ベクトルには 10 が含まれている必要があります。ここで、0 はパンクチャされたビットの位置を示します。このパンクチャ パターンは畳み込み符号化器によって使用されるパンクチャ パターンと一致しなければなりません。

特定のレートや多項式で一般的に使用するパンクチャ パターンについては、Yasuda[4]、Haccoun[5]、および Begin[6]の各参考文献を参照してください。

依存関係

このパラメーターは、[Punctured code] パラメーターを選択した場合にのみ表示されます。

ブロックに Era 入力端子を追加するには、このパラメーターを選択します。

復号化器判定タイプ。[Unquantized][Hard decision]、または [Soft Decision] として指定します。

  • Unquantized — 復号化器は、ユークリッド距離を使用して分岐メトリクスを計算します。入力データは量子化されていない倍精度または単精度の軟判定値の実数値ベクトルでなければなりません。オブジェクトは、正の値を logical 1 に、負の値を logical 0 にマッピングします

  • Hard decision — 復号化器は、ハミング距離を使用して分岐メトリクスを計算します。入力は 0 または 1 の硬判定値のベクトルでなければなりません。入力のデータ型は、倍精度、単精度、logical、または数値でなければなりません。

  • Soft Decision — 復号化器は、ハミング距離を使用して分岐メトリクスを計算します。入力には、0 と 2SoftInputWordLength – 1 の間の整数として表される量子化された軟判定値のベクトルが必要です。入力のデータ型は、倍精度、単精度、logical、または数値でなければなりません。あるいは、[Number of soft decision bits] パラメーターに指定する語長と等しい語長 ("SoftInputWordLength") で fi (Fixed-Point Designer) オブジェクトを使用して、符号なしおよびスケーリングなしの固定小数点オブジェクトとしてデータ型を指定できます。0 は最も信頼性の高い 0 と見なされ、2SoftInputWordLength – 1 は最も信頼性の高い 1 と見なされます。

それぞれの量子化された軟入力値に対するビット数を表す軟入力の語長。整数として指定します。

依存関係

このパラメーターは、[Decision type] パラメーターを [Soft decision] に設定したときにのみ表示されます。

量子化入力値が範囲外の場合にエラーを発生させるには、このパラメーターを選択します。このパラメーターが選択されていない場合、範囲外の入力値は無視されます。

依存関係

このパラメーターは、[Decision type] パラメーターを [Hard decision] または [Soft decision] に設定したときにのみ表示されます。

トレースバック長。各トレースバック パスを構築するために使用されるトレリス分岐の数を示す整数として指定します。

トレースバック長は復号化遅延に影響を与えます。復号化遅延は、出力の最初に復号化されるシンボルよりも前の 0 シンボルの数です。

  • 連続操作モードの場合、復号化遅延はトレースバック長シンボルの数と同じです。

  • 打ち切られた操作モードまたは終了した操作モードの場合、復号化遅延は 0 です。この場合、トレースバック長は、各入力のシンボルの数以下でなければなりません。

一般的な推定として、標準のトレースバック長の値は (ConstraintLength – 1) / (1 – coderate) の約 2 倍から 3 倍になります。符号の拘束長 ConstraintLength は (log2(trellis.numStates) + 1) に等しくなります。coderate は (K / N) × (length(PuncturePattern) / sum(PuncturePattern) に等しくなります。

K は入力シンボルの数、N は出力シンボルの数、および PuncturePattern はパンクチャ パターン ベクトルです。

たとえば、この一般的な推定を適用することで、次のようなおおよそのトレースバック長が得られます。

  • 符号化率 1/2 の符号のトレースバック長は 5(ConstraintLength – 1) です。

  • 符号化率 2/3 の符号のトレースバック長は 7.5(ConstraintLength – 1) です。

  • 符号化率 3/4 の符号のトレースバック長は 10(ConstraintLength – 1) です。

  • 符号化率 5/6 の符号のトレースバック長は 15(ConstraintLength – 1) です。

詳細については、[7]を参照してください。

連続する入力フレーム間の遷移方法。以下のいずれかのモードの値として指定します。

  • [Continuous] — ブロックは次のフレームで使用するために、各入力の最後で内部状態メトリクスを保存します。各トレースバック パスは、独立して扱われます。このモードでは、符号化率 K/N の畳み込み符号に対する復号化遅延が Traceback depth×K ゼロ ビットになります。K はメッセージ シンボルの数、N は符号化されたシンボルの数です。[Enable reset input port] が選択されている場合、Rst 端子が非ゼロの値を受け取ると、復号化器の状態がリセットされます。

  • [Truncated] — ブロックは各入力を個別に扱います。トレースバック パスは最良のメトリクスの状態で開始し、常にすべて 0 の状態で終了します。このモードは、対応する Convolutional Encoder ブロックがその [Operation mode]Truncated (reset every frame) に設定するときに適切です。このモードでは、出力遅延が発生しません。

  • [Terminated] — ブロックは各入力を個別に扱い、トレースバック パスはすべて 0 の状態で開始し、終了します。このモードは、コード化されていないメッセージ信号 (つまり、対応する Convolutional Encoder ブロックへの入力) が各入力の末尾に、フィードフォワード符号化器のすべてのメモリ レジスタを埋めるのに充分な 0 がある場合に適しています。具体的には、入力ストリームが k 個で拘束長ベクトル constr (多項式表現を使用) をもつ符号化器の場合、入力の最後に少なくとも k*max(constr-1) 個の 0 があることになります。フィードバック符号化器の場合、このモードは、対応する Convolutional Encoder ブロックで [Operation mode][Terminate trellis by appending bits] に設定されている場合には適しています。

メモ

ブロックがシミュレーション中に長さが異なるシーケンスを出力し、[Operation mode][Truncated] または [Terminated] に設定すると、すべての入力タイム ステップで復号化器の状態がリセットされます。

入力信号にシンボルが 1 つしか含まれていない場合は、[Continuous] 操作モードを使用します。

Rst 入力端子を追加にするには、このパラメーターを選択します。

依存関係

このパラメーターは、[Operation mode] パラメーターを [Continuous] に設定したときにのみ表示されます。

現在のタイム ステップで受信した符号化データを計算するまで復号化器のリセットを遅延させるには、このパラメーターを選択します。このオプションは HDL サポートのために有効にしなければなりません。HDL コードを生成するには、HDL Coder™ ソフトウェアが必要です。

依存関係

このパラメーターは、[Operation mode] パラメーターを [Continuous] に設定し、[Enable reset input port] を選択したときにのみ表示されます。

データ型

状態メトリクス語長。正の整数として指定します。

出力データ型。doublesinglebooleanint8uint8int16uint16int32、または uint32 として指定するか、'Inherit via internal rule' または 'Smallest unsigned integer' に設定します。

  • 'Smallest unsigned integer' に設定されると、出力データ型は、モデルの [コンフィギュレーション パラメーター] ダイアログ ボックスの [ハードウェア実行] ペインで使用されている設定に基づいて選択されます。ASIC/FPGA[ハードウェア実行] ペインで選択されると、出力データ型は ufix(1) になります。他のすべての選択の場合は、char 値に対応する指定された最も小さな語長 (たとえば uint8) の符号なし整数です。

  • 'Inherit via internal rule' に設定した場合、ブロックは次のようになります。

    • double の入力に対してデータ型 double を出力

    • single の入力に対してデータ型 single を出力

    • 他のすべてのデータ型入力に対しては 'Smallest unsigned integer' オプションと同様の動作

ブロックの特性

データ型

Boolean | double | fixed pointa | integer | single

多次元信号

なし

可変サイズの信号

あり

a 硬判定の場合は入力が ufix(1) であり、軟判定の場合は ufix(N) です。出力は ufix(1) のみです。

詳細

すべて展開する

参照

[1] Clark, George C., and J. Bibb Cain. Error-Correction Coding for Digital Communications. Applications of Communications Theory. New York: Plenum Press, 1981.

[2] Gitlin, Richard D., Jeremiah F. Hayes, and Stephen B. Weinstein. Data Communications Principles. Applications of Communications Theory. New York: Plenum Press, 1992.

[3] Heller, J., and I. Jacobs. “Viterbi Decoding for Satellite and Space Communication.” IEEE Transactions on Communication Technology 19, no. 5 (October 1971): 835–48. https://doi.org/10.1109/TCOM.1971.1090711.

[4] Yasuda, Y., K. Kashiki, and Y. Hirata. “High-Rate Punctured Convolutional Codes for Soft Decision Viterbi Decoding.” IEEE Transactions on Communications 32, no. 3 (March 1984): 315–19. https://doi.org/10.1109/TCOM.1984.1096047.

[5] Haccoun, D., and G. Begin. “High-Rate Punctured Convolutional Codes for Viterbi and Sequential Decoding.” IEEE Transactions on Communications 37, no. 11 (November 1989): 1113–25. https://doi.org/10.1109/26.46505.

[6] Begin, G., D. Haccoun, and C. Paquin. “Further Results on High-Rate Punctured Convolutional Codes for Viterbi and Sequential Decoding.” IEEE Transactions on Communications 38, no. 11 (November 1990): 1922–28. https://doi.org/10.1109/26.61470.

[7] Moision, B. "A Truncation Depth Rule of Thumb for Convolutional Codes." In Information Theory and Applications Workshop (January 27 2008-February 1 2008, San Diego, California), 555-557. New York: IEEE, 2008.

拡張機能

C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2006a より前に導入

すべて展開する