Main Content

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

comm.gpu.TurboDecoder

GPU によるターボ復号化を使用した入力信号の復号化

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

説明

comm.gpu.TurboDecoder System object™ は、グラフィックス処理装置 (GPU) で並列連結復号化スキームを使用して、入力信号を復号化します。この復号化スキームでは、事後確率 (APP) 復号化器を構成復号化器として使用します。構成復号化器は、同じトレリス構造体とアルゴリズムを使用します。

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.TurboDecoder オブジェクトを作成し、そのプロパティを設定します。

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

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

作成

説明

gpuTurboDec = comm.gpu.TurboDecoder は、GPU ベースのターボ復号化器 System object を作成します。このオブジェクトは、APP 構成復号化器を使用して、並列連結され、畳み込み符号化された入力データを繰り返し復号化します。

gpuTurboDec = comm.gpu.TurboDecoder(trellis,interlvrIndices,numIter) は、TrellisStructure プロパティを trellis に、InterleaverIndices プロパティを interlvrIndices に、NumIterations プロパティを numIter に設定します。

gpuTurboDec = comm.gpu.TurboDecoder(___,Name,Value) は、前の構文にある任意の入力引数の組み合わせに加えて、名前と値の引数を 1 つ以上使用してプロパティを設定します。たとえば、'NumIterations',10 は System object への各呼び出しに使用される復号化反復の回数を指定します。

プロパティ

すべて展開する

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

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

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

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

メモ

ターボ符号化器の K は 1 でなければなりません。詳細は、符号化率 を参照してください。

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

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

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

データ型: double

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

データ型: double

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

データ型: double

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

データ型: double

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

データ型: double

データ型: struct

インターリーバー インデックスのソース。'Property' として指定します。このプロパティで有効な設定は Property のみで、InterleaverIndices プロパティで指定するインターリーバー インデックスを使用します。

データ型: char | string

復号化器へのコードワード ビット入力の置換に使用されるマッピングを定義するインターリーバー インデックス。整数の列ベクトルとして指定します。ベクトルの長さは L でなければなりません。ベクトルの各要素は、範囲 [1, L] の整数で一意でなければなりません。L は復号化された出力メッセージ dec の長さです。

データ型: double

復号化アルゴリズム。'True APP' として指定します。有効な設定は 'True APP' のみで、真の APP 復号化を実装します。

データ型: char | string

復号化の反復回数。正の整数として指定します。このプロパティは、オブジェクトへの各呼び出しに使用される復号化反復の回数を設定します。

データ型: double

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

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

データ型: double

使用法

説明

dec = gpuTurboDec(codeword) は、並列連結畳み込み符号化スキームを使用して入力データを復号化します。ホスト コンピューターに GPU が構成されている場合、処理には GPU が利用されます。そうでない場合、処理には CPU が使用されます。出力は復号化されたデータです。

入力引数

すべて展開する

並列連結コードワード。列ベクトルとして指定します。

データ型: double | single

出力引数

すべて展開する

復号化されたメッセージ。バイナリ値列ベクトルとして返されます。出力信号のデータ型は、入力のデータ型と同じです。オブジェクトは、符号化されていない出力ビットの対数尤度比 (LLR) への更新を反復して提供します。オブジェクトの出力は最終 LLR 更新の硬判定出力です。

構成畳み込み符号が符号化率 1/N の符号を表す場合、オブジェクトは長さ dec を (M-2✕NTails)/(2✕N-1) に設定します。M は入力ベクトルの長さであり、NTails は log2(TrellisStructure.numStates)✕N によって与えられます。dec の長さは、インターリーバー インデックスの長さと同じです。

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

ターボ符号化されたデータを、2 位相シフト キーイング (BPSK) 変調された加法性ホワイト ガウス ノイズ (AWGN) チャネル経由で送信します。次に、反復ターボ復号化器を使用して復号化し、誤りを表示します。

結果を再現可能にするために、ノイズ変数を定義し、フレーム長を 256 に設定し、乱数ストリームを使用します。

noiseVar = 4;
frmLen = 256;
s = RandStream('mt19937ar','Seed',11);
intrlvrIndices = randperm(s,frmLen);

それらのプロパティを使用してターボ符号化器 System object™ を作成します。

tEnc = comm.TurboEncoder('TrellisStructure',poly2trellis(4,[13 15 17],13), ...
                          'InterleaverIndices',intrlvrIndices);

PSK 変調器 System object を作成します。

modBPSK = comm.BPSKModulator;

AWGN チャネル System object を作成します。

channel = comm.AWGNChannel('NoiseMethod','Variance', ...
                           'Variance',noiseVar);

GPU ベースのターボ復号化器 System object を作成します。構成畳み込み符号のトレリス構造体は poly2trellis(4, [13 15 17], 13) です。

tDec = comm.gpu.TurboDecoder('TrellisStructure',poly2trellis(4,[13 15 17],13), ...
                             'InterleaverIndices',intrlvrIndices, ...
                             'NumIterations',4);

エラー レート System object を作成します。

errorRate = comm.ErrorRate;

シミュレーションを実行します。復号化のために受信信号を対数尤度比に変換します。元のデータと受信データを比較して、エラー レートの結果を計算します。

for frmIdx = 1:10
    data = randi(s,[0 1],frmLen,1);
    encodedData = tEnc(data);
    modSignal = modBPSK(encodedData);
    receivedSignal = channel(modSignal);
    receivedBits  = tDec(-2/(noiseVar/2)*real(receivedSignal));
    errorStats = errorRate(data,receivedBits);
end

誤り数を表示します。

fprintf('Error rate = %f\nNumber of errors = %d\nTotal bits = %d\n', ...
        errorStats(1), errorStats(2), errorStats(3));
Error rate = 0.000000
Number of errors = 0
Total bits = 2560

拡張機能

バージョン履歴

R2012a で導入

参考

オブジェクト

ブロック