メインコンテンツ

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

comm.gpu.TurboDecoder

R2026a

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

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

説明

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

ターボ復号化スキームを使用して入力信号を復号化するには、次のようにします。

  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 を使用して作成するか、手動で作成することができます。この構造体の詳細については、Trellis Description of a Convolutional Codeおよび関数 istrellis を参照してください。

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

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

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

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

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

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

データ型: 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 が使用されます。出力は復号化されたデータです。

入力引数

すべて展開する

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

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

データ型: 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 の内部状態のリセット

例

すべて折りたたむ

BPSK 変調されたデータをターボ符号化したブロックを AWGN チャネル経由で送信します。GPU ベースのターボ復号化器の System object を使用して各データ フレームを復号化し、誤り統計を累積します。すべてのデータ フレームを処理した後に、誤り統計を表示します。

フレーム長を指定します。再現性のある結果を得るには、乱数ストリームのプロパティでシードを設定します。

framelen = 256;
s = RandStream('mt19937ar',Seed=11);

ターボ符号化器の System object、および GPU ベースのターボ復号化器の System object を作成します。関数 poly2trellis を使用して、構成畳み込み符号のトレリス構造体を定義します。関数 randperm を使用して、符号化器と復号化器において入力ビットを並べ替えるためのマッピングを定義する一意の整数からなるランダムな列ベクトルとして、インターリーバーのインデックスを生成します。

intrlvrIndices = randperm(s,framelen);
trellis = poly2trellis(4,[13 15 17],13);
turboEnc = comm.TurboEncoder( ...
    TrellisStructure=trellis, ...
    InterleaverIndices=intrlvrIndices);
turboDec = comm.gpu.TurboDecoder( ...
    TrellisStructure=trellis, ...
    InterleaverIndices=intrlvrIndices, ...
    NumIterations=4);

BPSK 変調の変調次数を指定します。AWGN チャネルの SNR レベルを定義します。エラー統計を計算するためのエラー レート System object を作成します。シミュレーションを実行し、元のデータと受信したデータを比較してエラー結果を計算します。

M = 2;                      % BPSK modulation
snr = 2;                    % dB
numframes = 100;
errorRate = comm.ErrorRate;

for ii = 1:numframes
 data = randi(s,[0 1],framelen,1);
 encodedData = turboEnc(data);
 modSignal = pskmod(encodedData,M);
 rxsig = awgn(modSignal,2);
 demodsig = pskdemod(rxsig,M);
 rxbits = turboDec(demodsig);
 errorStats = errorRate(data,rxbits);
end
fprintf('BER = %f\nNumber of errors = %d\nTotal bits = %d\n', ...
errorStats(1),errorStats(2),errorStats(3))
BER = 0.001680
Number of errors = 43
Total bits = 25600

詳細

すべて展開する

拡張機能

すべて展開する

バージョン履歴

R2012a で導入