最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

comm.gpu.TurboDecoder

GPU による並列連結復号化を使用した入力信号の復号化

説明

GPU Turbo Decoder System object™ は、並列連結復号化スキームを使用して入力信号を復号化します。このスキームでは、"事後" 確率 (APP) 復号化器を構成復号化器として使用します。2 つの構成復号化器が同じトレリス構造体とアルゴリズムを使用します。

メモ

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

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

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

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

ターボ復号化スキームを使用して入力信号を復号化するには、以下の手順に従います。

  1. ターボ復号化器オブジェクトを定義および設定します。構築を参照してください。

  2. step を呼び出して、comm.gpu.TurboDecoder のプロパティに従い、バイナリ信号を復号化します。step の動作は、ツールボックスの各オブジェクト固有のものです。

メモ

R2016b 以降では、step メソッドを使用して、System object によって定義された演算を実行する代わりに、引数を関数であるかのように使ってオブジェクトを呼び出すことができます。たとえば、y = step(obj,x)y = obj(x) は同等の演算を実行します。

構築

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

H = comm.gpu.TurboDecoder(Name, Value) は、指定のプロパティ名を指定の値に設定して、GPU ベースのターボ復号化器オブジェクト H を作成します。Name は一重引用符 ('') で囲まなければなりません。Name1,Value1,…,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

H = comm.gpu.TurboDecoder(TRELLIS,INTERLVRINDICES, NUMITER) は、GPU ベースのターボ復号化器オブジェクト H を作成します。このオブジェクトでは、TrellisStructure プロパティは TRELLIS に、InterleaverIndices プロパティは INTERLVRINDICES に、NumIterations プロパティは NUMITER に設定されます。

プロパティ

TrellisStructure

構成畳み込み符号のトレリス構造体

トレリスを、構成畳み込み符号のトレリス表現を含む MATLAB 構造体として指定します。既定の設定は、poly2trellis(4, [13 15], 13) の結果です。構造体が有効なトレリス構造体かどうかを確認するには、関数 istrellis を使用します。

InterleaverIndicesSource

インターリーバー インデックスのソース

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

InterleaverIndices

インターリーバー インデックス

符号化器で入力ビットを並べ替えるために使用されるマッピングを、整数の列ベクトルとして指定します。既定の設定は (64:-1:1).' です。このマッピングは、step メソッドの出力の長さ L に等しい数の要素をもつベクトルです。各要素は、繰り返しの値のない 1 から L の間の整数でなければなりません。

Algorithm

復号化アルゴリズム

復号化アルゴリズムを指定します。このオブジェクトは、真の "事後" 確率復号化を実装します。有効な設定は True APP のみです。

NumScalingBits

Number of scaling bits

ターボ復号化器の GPU バージョンではこのプロパティは使用されません。

NumIterations

復号化反復回数

step メソッドへの各呼び出しに使用される復号化反復の回数を指定します。既定の設定は 6 です。オブジェクトは、符号化されていない出力ビットの対数尤度比 (LLR) への更新を反復して提供します。step メソッドの出力は最終 LLR 更新の硬判定出力です。

NumFrames

入力および出力データ ベクトルに存在する独立フレームの数

単一のデータ入力/出力ベクトルに含まれる独立フレームの数を指定します。このプロパティの既定値は 1 です。このオブジェクトは入力ベクトルを NumFrames 個のセグメントに分割して、これらのセグメントを個別に復号化します。出力には NumFrames 個の復号化されたセグメントが含まれます。

メソッド

resetターボ復号化器オブジェクトの状態をリセット
step並列連結復号化スキームを使用した入力信号の復号化
すべての System object に共通
release

System object のプロパティ値の変更の許可

すべて折りたたむ

ターボ符号化されたデータのブロックを BPSK 変調された AWGN チャネル経由で送信します。次に、反復ターボ復号化器を使用して復号化し、誤りを表示します。

結果を繰り返し可能にするために、ノイズ変数を定義し、フレーム長を 256 に設定し、乱数ストリーム プロパティを使用します。

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

ターボ符号化器 System object を作成します。構成畳み込み符号のトレリス構造体は poly2trellis(4, [13 15 17], 13) です。InterleaverIndices プロパティは、符号化器でオブジェクトが入力ビットを並べ替えるために使用するマッピングを、整数の列ベクトルとして指定します。

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

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

bpsk = comm.BPSKModulator;

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

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

GPU ベースのターボ復号化器 System object を作成します。構成畳み込み符号のトレリス構造体は poly2trellis(4, [13 15 17], 13) です。InterleaverIndicies プロパティは、符号化器でオブジェクトが入力ビットを並べ替えるために使用するマッピングを、整数の列ベクトルとして指定します。

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

誤り率 System object を作成します。

errorRate = comm.ErrorRate;

シミュレーションを実行します。

for frmIdx = 1:8
 data = randi(s, [0 1], frmLen, 1);
 encodedData = turboEnc(data);
 modSignal = bpsk(encodedData);
 receivedSignal = channel(modSignal); 

復号化のために受信信号を対数尤度比に変換します。

receivedBits  = turboDec(-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))

アルゴリズム

このオブジェクトは、Turbo Decoder ブロックのリファレンス ページで説明されている入力および出力を実装します。オブジェクト プロパティはブロック パラメーターに対応します。

拡張機能

R2012a で導入