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

comm.gpu.LDPCDecoder

GPU を使用したバイナリ低密度パリティ チェック (LPDC) 符号の復号化

このオブジェクトを使用するには、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)を参照してください。

comm.gpu.LDPCDecoder System object は、確率伝播アルゴリズムを使用してバイナリ LDPC 符号を復号化します。この符号は、復調からの軟判定出力 (受信ビットの対数尤度比) として、オブジェクトに入力されます。このオブジェクトは、パリティ チェック行列でパターンを想定しない一般バイナリ LDPC 符号を復号化します。詳細については、確率伝播復号化を参照してください。

LDPC 符号化された信号を復号化するには、以下の手順に従います。

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

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

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

作成

説明

gpu_ldpcdecoder = comm.gpu.LDPCDecoder は、GPU ベースのバイナリ LDPC 復号化器 System object を作成します。このオブジェクトは、指定されたパリティ チェック行列に基づいて LDPC 復号化を実行します。

gpu_ldpcdecoder = comm.gpu.LDPCDecoder(parity) は、ParityCheckMatrix プロパティを parity に設定して、GPU ベースの LDPC 復号化器 System object を作成します。parity 入力は ParityCheckMatrix プロパティで記述されているように指定しなければなりません。

gpu_ldpcdecoder = comm.gpu.LDPCDecoder(___,Name,Value) は、前のいずれかの構文の入力に加えて、1 つ以上の名前と値のペアを使用してプロパティを設定します。たとえば、comm.LDPCDecoder('DecisionMethod','Soft decision') は、軟判定方式を使用してデータを復号化し、データ型 double の対数尤度比を出力する LDPC 復号化器 System object を構成します。各プロパティ名を引用符で囲みます。

プロパティ

すべて展開する

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

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

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

パリティ チェック行列。スパースの (N – K) 行 N 列のバイナリ値行列として指定します。N は受信信号の長さで、(0, 231) の範囲でなければなりません。K は符号化されていないメッセージの長さで、N 未満でなければなりません。パリティ チェック行列の最後の (N – K) 列は、2 次のガロア体 gf(2) 内の可逆行列でなければなりません。

sparse(I(:,1),I(:,2),1) のように、パリティ チェック行列の要素 1 の行インデックスと列インデックスを定義する 2 列の非スパース インデックス行列 I としてパリティ チェック行列を指定することもできます。

このプロパティは数値データ型を受け入れます。このプロパティをスパース バイナリ行列に設定すると、このプロパティは logical データ型も受け入れます。

既定値では、関数 dvbs2ldpc を使用して、DVB-S.2 規格に規定されている、ハーフ レート LDPC 符号化のスパース パリティ チェック行列を構成します。

例: dvbs2ldpc(R,'indices') は、DVB-S.2 規格のインデックス行列を構成します。ここで、R は符号化率であり、'indices' は、パリティ チェック行列の要素 1 の行インデックスと列インデックスを定義する 2 列の倍精度行列として dvbs2ldpc の出力形式を指定します。

データ型: double | 論理値

出力値の形式。以下のいずれかの値として指定します。

  • 'Information part' — オブジェクトは、受信した対数尤度比ベクトルの情報部分のみを含む K 行 1 列の列ベクトルを出力します。K は符号化されていないメッセージの長さです。

  • 'Whole codeword' — オブジェクトは、対数尤度比ベクトル全体を含む N 行 1 列の列ベクトルを出力します。N は受信信号の長さです。

    N と K は、(N–K) 行 K 列のパリティ チェック行列の次元と一致しなければなりません。

データ型: char

復号化に使用する判定方法。以下のいずれかの値として指定します。

  • 'Hard decision' — オブジェクトは、データ型 logical の復号化されたデータを出力します。

  • 'Soft decision' — オブジェクトは、データ型 double の対数尤度比を出力します。

データ型: char

反復終了条件。以下のいずれかの値として指定します。

  • 'Maximum iteration count'MaximumIterationCount プロパティで指定された反復回数後に、復号化が終了します。

  • 'Parity check satisfied' — すべてのパリティ チェックが満たされた後、復号化が終了します。一部のパリティ チェックが満たされない場合、MaximumIterationCount プロパティで指定された反復回数後に、復号化が終了します。

データ型: char

復号化の最大反復回数。正の整数を指定します。

データ型: double

実行した反復数の出力。false または true を指定します。実行された反復回数を出力するには、このプロパティを true に設定します。

データ型: 論理値

最終パリティ チェックの出力。false または true を指定します。計算された最終パリティ チェックを出力するには、このプロパティを true に設定します。

データ型: 論理値

使用法

説明

y = gpu_ldpcdecoder(x) は、既定のパリティ チェック行列に基づく LDPC 符号を使用して、入力データを復号化します。

[y,numiter] = gpu_ldpcdecoder(x) は、復号化したデータ y と実行した反復回数 numiter を返します。この構文を使用するには、NumIterationsOutputPort プロパティを true に設定します。

[y,parity] = gpu_ldpcdecoder(x) は、復号化したデータ y と最終パリティ チェック parity を返します。この構文を使用するには、FinalParityChecksOutputPort プロパティを true に設定します。

[y,numiter,parity] = gpu_ldpcdecoder(x) は、復号化したデータ、実行した反復回数、および最終パリティ チェックを返します。この構文を使用するには、NumIterationsOutputPort および FinalParityChecksOutputPort プロパティを true に設定します。

入力引数

すべて展開する

対数尤度比。復調からの軟判定出力を含む N 行 1 列の列ベクトルとして指定します。N は変調前の LDPC 符号語のビット数です。各要素は受信ビットの対数尤度比です。対数尤度比が正であれば、多くの場合、要素の値は 0 です。先頭 K 要素は、入力メッセージの情報部分に対応します。

データ型: double

出力引数

すべて展開する

復号化されたデータ。列ベクトルとして返されます。DecisionMethod プロパティは、オブジェクトが硬判定を出力するか軟判定 (対数尤度比) を出力するかを指定します。

  • OutputValue プロパティが 'Information part' に設定されている場合、出力には受信した対数尤度比ベクトルの情報部分のみが含まれます。

  • OutputValue プロパティが 'Whole codeword' に設定されている場合、出力には対数尤度比ベクトル全体が含まれます。

データ型: double | 論理値

実行した復号化の反復回数。正の整数として返されます。

依存関係

この出力を有効にするには、NumIterationsOutputPort プロパティを true に設定します。

入力 LDPC 符号を復号化した後の最終パリティ チェック。(N-K) 行 1 列の列ベクトルとして返されます。N は変調前の LDPC 符号語のビット数です。K は符号化されていないメッセージの長さです。

依存関係

この出力を有効にするには、FinalParityChecksOutputPort プロパティを true に設定します。

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

comm.gpu.LDPCDecoder System Object™ を使用して信号を復号化し、LDPC 符号化され、QPSK 変調されたビット ストリームを AWGN チャネル経由で送信します。AWGN を追加した後、受信した信号を復調および復号化します。符号化されていない信号および LDPC 符号化された信号の受信に対して、誤り統計を計算します。詳細については、GPU を使ったシミュレーションの高速化を参照してください。

シミュレーション変数を定義します。LDPC 符号化器、LDPC 復号化器、QPSK 変調器、および QPSK 復調器の System object を作成します。

M = 4; % Modulation order (QPSK)
snr = [0.25,0.5,0.75,1.0,1.25];
numFrames = 10;
ldpcEncoder = comm.LDPCEncoder;
gpuldpcDecoder = comm.gpu.LDPCDecoder;
pskMod = comm.PSKModulator(M,'BitInput',true);
pskDemod = comm.PSKDemodulator(M,'BitOutput',true,...
    'DecisionMethod','Approximate log-likelihood ratio');
pskuDemod = comm.PSKDemodulator(M,'BitOutput',true,...
    'DecisionMethod','Hard decision');
errRate = zeros(1,length(snr));
uncErrRate = zeros(1,length(snr));

各 SNR 設定およびすべてのフレームに対して、符号化されていない信号および LDPC 符号化された信号の誤り統計を計算します。

for ii = 1:length(snr)
    ttlErr = 0;
    ttlErrUnc = 0;
    pskDemod.Variance = 1/10^(snr(ii)/10); % Set variance using current SNR
    for counter = 1:numFrames
        data = logical(randi([0 1],32400,1));
        % Transmit and receiver uncoded signal data
        mod_uncSig = pskMod(data);
        rx_uncSig = awgn(mod_uncSig,snr(ii),'measured');
        demod_uncSig = pskuDemod(rx_uncSig);
        numErrUnc = biterr(data,demod_uncSig);
        ttlErrUnc = ttlErrUnc + numErrUnc;
        % Transmit and receive LDPC coded signal data
        encData = ldpcEncoder(data);
        modSig = pskMod(encData);
        rxSig = awgn(modSig,snr(ii),'measured');
        demodSig = pskDemod(rxSig);
        rxBits = gpuldpcDecoder(demodSig);
        numErr = biterr(data,rxBits);
        ttlErr = ttlErr + numErr;
    end
    ttlBits = numFrames*length(rxBits);
    uncErrRate(ii) = ttlErrUnc/ttlBits;
    errRate(ii) = ttlErr/ttlBits;
end

符号化されていないデータおよび LDPC 符号化されたデータの誤り統計をプロットします。

plot(snr,uncErrRate,snr,errRate)
legend('Uncoded','LDPC coded')
xlabel('SNR (dB)')
ylabel('BER')

アルゴリズム

すべて展開する

このオブジェクトは、メッセージ伝達アルゴリズムとも呼ばれる確率伝播アルゴリズムを使用して、LDPC 復号化を実行します。

参照

[1] Gallager, Robert G. Low-Density Parity-Check Codes. Cambridge, MA: MIT Press, 1963.

拡張機能

R2012a で導入