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

comm.LDPCEncoder

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

説明

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

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

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

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

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

作成

説明

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 でのシステム設計 (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 | 論理値

使用法

説明

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

入力引数

すべて展開する

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

データ型: double | 論理値

出力引数

すべて展開する

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

データ型: double | 論理値

オブジェクト関数

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