Main Content

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

comm.LDPCEncoder

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

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

説明

comm.LDPCEncoder System object™ は、LDPC 符号化をバイナリ入力メッセージに適用します。LDPC 符号は、スパース パリティ チェック行列およびシャノン限界に近いパフォーマンスを達成できる長いブロック長をもつ、線形の誤り制御符号です。

バイナリ LDPC 符号を符号化するには、以下の手順に従います。

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

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

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

作成

説明

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

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

ldpcencoder = comm.LDPCEncoder(___,Name,Value) は、前のいずれかの構文の入力に加えて、1 つ以上の名前と値のペアを使用してプロパティを設定します。たとえば、comm.LDPCEncoder('ParityCheckMatrix',sparse(I(:,1),I(:,2),1)) は、パリティ行列 sparse(I(:,1),I(:,2),1) を使用してデータを符号化する LDPC 符号化器 System object を構成します。各プロパティ名を引用符で囲みます。

プロパティ

すべて展開する

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

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

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

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

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

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

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

メモ

  • パリティ チェック行列の最後の (N – K) 列が三角行列を形成する場合、パリティ チェック式を解くために前進代入や後退代入が実行されます。

  • パリティ チェック行列の最後の (N – K) 列が三角行列を形成しない場合、パリティ チェック式を解くために逆行列が計算されます。大きな行列の逆行列を求める必要がある場合、初期化や更新に時間がかかります。

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

データ型: double | logical

使用法

説明

codeword = ldpcencoder(message) は、パリティ チェック行列に基づく LDPC 符号を使用して、入力メッセージを符号化します。LDPC コードワード出力はパリティ チェック式の解です。

入力引数

すべて展開する

入力メッセージ。バイナリ値要素を含む K 行 1 列の列ベクトルとして指定します。K は符号化されていないメッセージの長さです。

データ型: double | logical

出力引数

すべて展開する

LDPC コードワード。N 行 1 列の列ベクトルとして返されます。N は LDPC コードワードのビット数です。出力信号のデータ型は、入力信号から継承されます。LDPC コードワード出力はパリティ チェック式の解です。入力メッセージは LDPC コードワード出力の最初の K ビットで構成され、パリティ チェックは残りの (N – K) ビットで構成されます。

データ型: double | logical

オブジェクト関数

オブジェクト関数を使用するには、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')

拡張機能

バージョン履歴

R2012a で導入

すべて展開する

R2023b: 削除予定

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

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

非推奨の機能推奨される代替案
% Encode using parity-check matrix (pcmatrix)
enc = comm.LDPCEncoder(pcmatrix);
codeword = enc(infoBits);
% Encode using parity-check matrix (pcmatrix)
cfg = ldpcEncoderConfig(pcmatrix);
codeword = ldpcEncode(infoBits,cfg);

参考

オブジェクト

関数

ブロック