Main Content

comm.gpu.ViterbiDecoder

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

このオブジェクトを使用するには、Parallel Computing Toolbox™ をインストールして対象 GPU へのアクセス権を入手しなければなりません。GPU の詳細は、GPU 計算 (Parallel Computing Toolbox)を参照してください。

説明

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

GPU ベースの System object は、gpuArray クラスを使用して作成された一般的な MATLAB® 配列またはオブジェクトを受け入れます。GPU ベースの System object は、倍精度または単精度データ型の入力信号をサポートします。出力信号のデータ型は、入力信号から継承されます。

  • 入力信号が MATLAB 配列の場合、System object は CPU と GPU の間のデータ転送を処理します。出力信号は MATLAB 配列です。

  • 入力信号が gpuArray の場合、データは GPU に残ります。出力信号は gpuArray です。オブジェクトに gpuArray が渡されると、計算がすべて GPU 上で実行され、データ転送は発生しません。gpuArray 引数を渡すことにより、シミュレーション時間が短縮されてパフォーマンスが向上します。詳細については、GPU での配列の確立 (Parallel Computing Toolbox)を参照してください。

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 つ以上の名前と値からなる引数を使用してプロパティを設定します。たとえば、'TerminationMethod','Continuous' は終了方法を連続として指定し、次のフレームで使用するために、各フレームの最後で内部状態メトリックを保存します。

プロパティ

すべて展開する

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

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

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

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

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

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

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

データ型: double

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

データ型: double

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

データ型: double

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

データ型: double

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

データ型: double

データ型: struct

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

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

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

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

データ型: char | string

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

依存関係

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

データ型: double

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

データ型: char | string

トレースバック長。範囲 [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 の状態で開始し、終了します。

データ型: char | string

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

依存関係

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

データ型: logical | numeric

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

データ型: logical | numeric

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

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

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

データ型: char | string

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

依存関係

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

データ型: double

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

データ型: logical | numeric

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

データ型: char | string

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

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

依存関係

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

データ型: double

使用法

説明

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

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

入力引数

すべて展開する

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

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

データ型: 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 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 = 1

参照

[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 で導入