Main Content

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

comm.LDPCDecoder

(削除予定) バイナリ低密度パリティ チェック (LDPC) コードの復号化

comm.LDPCDecoder は将来のリリースで削除される予定です。代わりに ldpcDecode を使用してください。 (R2021b 以降)コードの更新の詳細については、バージョン履歴を参照してください。

説明

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

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

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

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

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

作成

説明

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

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

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

プロパティ

すべて展開する

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

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

プロパティ値の変更の詳細については、System object を使用した 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 | logical

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

  • '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 に設定します。

データ型: logical

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

データ型: logical

使用法

説明

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

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

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

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

入力引数

すべて展開する

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

データ型: double

出力引数

すべて展開する

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

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

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

データ型: double | logical

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

依存関係

この出力を有効にするには、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 の内部状態のリセット

すべて折りたたむ

LDPC 符号化され、QPSK 変調されたビット ストリームを AWGN チャネル経由で送信します。受信信号を復調および復号化します。符号化されていない信号および LDPC 符号化された信号の受信に対して、誤り統計を計算します。

シミュレーション変数を定義します。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;
ldpcDecoder = comm.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 ループでは各 SNR 値を処理します。内側の for ループでは入力データのフレームを処理します。

for ii = 1:length(snr)
    ttlErr = 0;
    ttlErrUnc = 0;
    pskDemod.Variance = 1/10^(snr(ii)/10);
    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 = ldpcDecoder(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 で導入

すべて展開する

R2023b: 削除予定

comm.LDPCDecoder は削除される予定です。代わりに ldpcDecode を使用してください。関数 ldpcDecode で適用する LDPC 符号を指定するには、ldpcDecoderConfig から返される構成オブジェクトを使用します。

次の表に記載するコードは、推奨される関数と構成オブジェクトを使用した LDPC 復号化の指定を示しています。

非推奨の機能推奨される代替案
% Decode using parity-check matrix (pcmatrix)
dec = comm.LDPCDecoder(pcmatrix);
dec.OutputValue = 'Whole codeword';
dec.DecisionMethod = 'Soft decision';
dec.MaximumIterationCount = 10;
dec.IterationTerminationCondition = 'Parity check satisfied';
output = dec(LLR);
% Decode using parity-check matrix (pcmatrix)
cfg = ldpcDecoderConfig(pcmatrix);
output = ldpcDecode(LLR,cfg,10, ...
    'OutputFormat','whole', ...
    'DecisionType','soft', ...
    'Termination','early');