メインコンテンツ

comm.LDPCEncoder

R2026b

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

comm.LDPCEncoder は削除されました。代わりに ldpcEncode を使用してください。コードの更新の詳細については、バージョン履歴を参照してください。

説明

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;
errRate = zeros(1,length(snr));
uncErrRate = zeros(1,length(snr));

各 SNR 設定およびすべてのフレームに対して、符号化されていない信号および LDPC 符号化された信号の誤り統計を計算します。外側の for ループでは各 SNR 値を処理します。内側の for ループでは入力データのフレームを処理します。

for ii = 1:length(snr)
    ttlErr = 0;
    ttlErrUnc = 0;
    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,M,InputType='bit');
        rx_uncSig = awgn(mod_uncSig,snr(ii),'measured');
        demod_uncSig = pskdemod(rx_uncSig,M,OutputType='bit');
        numErrUnc = biterr(data,demod_uncSig);
        ttlErrUnc = ttlErrUnc + numErrUnc;
        % Transmit and receive LDPC coded signal data
        encData = ldpcEncoder(data);
        modSig = pskmod(encData,M,InputType='bit');
        rxSig = awgn(modSig,snr(ii),'measured');
        demodSig = pskdemod(rxSig,M, ...
            OutputType='approxllr',NoiseVariance=variance);
        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 で導入

すべて展開する

参考

オブジェクト

関数

ブロック