Main Content

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

comm.gpu.ViterbiDecoder

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

このオブジェクトを使用するには、Parallel Computing Toolbox™ がインストールされており、サポートされる GPU にアクセスできなければなりません。ホスト コンピューターに GPU が構成されている場合、処理には GPU が使用されます。そうでない場合、処理には CPU が使用されます。GPU の詳細については、GPU 計算 (Parallel Computing Toolbox)を参照してください。

説明

comm.gpu.ViterbiDecoder System object™ は、グラフィックス処理装置 (GPU) でビタビ アルゴリズムを使用して、畳み込み符号化された入力シンボルを復号化し、バイナリ出力シンボルを生成します。

ビタビ アルゴリズムを使用して、畳み込み符号化されたデータを復号化するには、以下の手順に従います。

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

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

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

作成

説明

gpuViterbiDec = comm.gpu.ViterbiDecoder は、GPU ベースのビタビ復号化器 System object を作成します。

gpuViterbiDec = comm.gpu.ViterbiDecoder(trellis)TrellisStructure プロパティを trellis に設定します。

gpuViterbiDec = comm.gpu.ViterbiDecoder(___,Name,Value) は、前の構文にある任意の入力引数の組み合わせに加えて、名前と値の引数を 1 つ以上使用してプロパティを設定します。たとえば、gpuViterbiDec = comm.gpu.ViterbiDecoder(TerminationMethod="Continuous") は終了方法を連続として指定し、次のフレームで使用するために、各フレームの最後で内部状態メトリクスを保存します。

プロパティ

すべて展開する

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

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

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

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

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

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

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

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

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

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

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

データ型: struct

復号化器の入力形式。次のいずれかの値として指定します。

  • "Unquantized" — 入力データは量子化されていない倍精度または単精度の軟判定値の実数値ベクトルでなければなりません。オブジェクトは、正の値を logical 0 に、負の値を logical 1 にマッピングします。

  • "Hard" — 入力は 0 または 1 の硬判定値のベクトルでなければなりません。入力のデータ型は、倍精度または単精度でなければなりません。

  • "Soft" — 入力には、0 と 2SoftInputWordLength – 1 の間の整数として表される量子化された軟判定値のベクトルが必要です。入力のデータ型は、倍精度または単精度でなければなりません。

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

依存関係

このプロパティを有効にするには、InputFormat プロパティを "Soft" に設定します。

データ型: double

無効な量子化入力に対してアクションを実行するオプション。"Ignore" として指定します。有効な設定は "Ignore" のみです。範囲外の入力を無視します。

トレースバック長。範囲 [0, 256] の整数として指定します。トレースバック長は復号化の精度と遅延に影響を与えます。最初に復号化される出力のシンボルよりも前のゼロ シンボルの数が復号化遅延を表します。詳細については、トレースバックと復号化の遅延およびトレースバック長の推定値を参照してください。

TerminationMethod プロパティを "Continuous" に設定すると、復号化遅延は符号化率 1/N の畳み込み符号に対する TracebackDepth ゼロ シンボルまたは TracebackDepth ゼロ ビットで構成されます。

TerminationMethod プロパティを "Truncated" または "Terminated" に設定した場合、出力遅延は存在しません。TracebackDepth の値は、各入力のシンボルの数以下でなければなりません。符号化率が 1/2 の場合、一般的なトレースバック長値はコードの拘束長の約 5 倍です。

データ型: double

符号化フレームの終了方法。以下のいずれかの値を指定します。

  • "Continuous" — System object は、次のフレームで使用するために、各フレームの最後で内部状態メトリクスを保存します。オブジェクトは、各トレースバック パスを個別に扱います。入力信号に 1 つのシンボルだけが含まれているときは、このオプションを使用します。

  • "Truncated" — System object は各フレームを個別に扱います。トレースバック パスは最良のメトリクスで始まり、すべて 0 の状態で終了します。

  • "Terminated" — System object は各フレームを個別に扱います。トレースバック パスはすべて 0 の状態で開始し、終了します。

復号化器リセット入力を有効にするオプション。数値または logical 0 (false) または 1 (true) として指定します。オブジェクトへの追加入力を有効にするには、このプロパティを true に設定します。この追加のリセット入力が非ゼロの値のとき、復号化器の内部状態はその初期条件にリセットされます。

依存関係

このプロパティを有効にするには、TerminationMethod プロパティを "Continuous" に設定します。

データ型: logical | numeric

出力リセットを遅延するオプション。数値または logical 0 (false) として指定します。有効な設定は false のみです。

データ型: logical | numeric

パンクチャ パターンのソース。次のいずれかの値を指定します。

  • "None" — オブジェクトはパンクチャを適用しません。

  • "Property" — オブジェクトは、PuncturePattern プロパティで指定するパンクチャ パターン ベクトルに基づいてパンクチャされたコードワードを復号化します。

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

依存関係

このプロパティを有効にするには、PuncturePatternSource プロパティを "Property" に設定します。

データ型: double

入力シンボルで消去の指定を有効化するオプション。数値または logical 0 (false) として指定します。有効な設定は false のみです。

データ型: logical | numeric

出力のデータ型。"Full precision" として指定します。有効な設定は "Full precision" のみで、この場合、出力データ型は入力データ型と一致します。

入力および出力データ ベクトルに存在する独立フレームの数。整数として指定します。

オブジェクトは入力ベクトルを NumFrames 個のセグメントに分割して、これらのセグメントを個別に復号化します。出力には NumFrames 個の復号化されたセグメントが含まれます。

依存関係

このプロパティを有効にするには、TerminationMethod プロパティを "Truncated" または "Terminated" に設定します。

データ型: double

使用法

説明

decmsg = gpuViterbiDec(codeword) は、GPU ベースのビタビ復号化アルゴリズムを使用して、畳み込み符号化されている入力データを復号化します。出力は復号化されたデータです。

decmsg = gpuViterbiDec(codeword,resetstate) は、復号化器の内部状態をリセットするための入力を指定します。この構文を有効にするには、TerminationMethod プロパティを "Continuous" に設定し、ResetInputPort プロパティを true に設定します。

入力引数

すべて展開する

畳み込み符号化されたメッセージ。列ベクトルとして指定します。codeword のデータ型と要素の値は、InputFormat プロパティの値によって異なります。

畳み込み符号が 2N 出力シンボル候補のアルファベットを使用した場合、この入力ベクトルの長さは、ある正の整数 L に対して L ✕ N でなければなりません。

データ転送のレイテンシを短縮するには、入力信号を gpuArray (Parallel Computing Toolbox) オブジェクトとして書式設定します。詳細については、GPU ベースの System object を使用した配列処理を参照してください。

データ型: double | single

復号化器の内部状態のリセット。logical 0 (false) または 1 (true) として指定します。

依存関係

この引数を有効にするには、TerminationMethod プロパティを "Continuous" に設定し、ResetInputPort プロパティを true に設定します。

データ型: double | logical

出力引数

すべて展開する

復号化されたメッセージ。バイナリ値列ベクトルとして返されます。この出力ベクトルのデータ型は入力 codeword と同じです。

復号化されたデータが 2K 出力シンボル候補のアルファベットを使用する場合、この出力ベクトルの長さは L ✕ K になります。L は入力メッセージの長さです。

データ型: double | single

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

GPU ベースの畳み込み符号化器 System object を作成します。

conEnc = comm.gpu.ConvolutionalEncoder;

ビット入力信号を受け入れる GPU ベースの位相偏移変調 (PSK) の変調器 System object を作成します。

modPSK = comm.gpu.PSKModulator(BitInput=true);

S/N 比が 7 の GPU ベースの加法性ホワイト ガウス ノイズ (AWGN) チャネル System object を作成します。

chan = comm.gpu.AWGNChannel( ...
    NoiseMethod='Signal to noise ratio (SNR)', ...
    SNR=7);

ビット値の列ベクトルを出力する GPU ベースの PSK 復調器 System object を作成します。

demodPSK = comm.gpu.PSKDemodulator(BitOutput=true);

0 または 1 の硬判定値の入力ベクトルを受け入れる、GPU ベースのビタビ復号化器 System object を作成します。

vDec = comm.gpu.ViterbiDecoder(InputFormat='Hard');

3 つのデータ サンプルを無視した後に比較を行う、エラー レート System object を作成します。受信データは送信データよりも 34 個のサンプル分遅れます。

error = comm.ErrorRate(ComputationDelay=3,ReceiveDelay=34);

次の for ループを使用してデータを処理し、シミュレーションを実行します。

for counter = 1:20
    data = randi([0 1],30,1);
    encodedData = conEnc(gpuArray(data));
    modSignal = modPSK(encodedData);
    receivedSignal = chan(modSignal);
    demodSignal = demodPSK(receivedSignal);
    receivedBits = vDec(demodSignal);
    errors = error(data,gather(receivedBits));
end

誤り数を表示します。

errors(2)
ans = 26

詳細

すべて展開する

参照

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

[2] 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.

[3] Fettweis, G., and H. Meyr. “Feedforward Architectures for Parallel Viterbi Decoding.” Journal of VLSI Signal Processing Systems for Signal, Image and Video Technology 3, no. 1–2 (June 1991): 105–19. https://doi.org/10.1007/BF00927838.

拡張機能

バージョン履歴

R2012a で導入