メインコンテンツ

ldpcEncode

バイナリ LDPC 符号の符号化

R2021b 以降

説明

Y = ldpcEncode(informationbits,encodercfg) は、LDPC 符号化器構成オブジェクト encodercfg によって指定された LDPC 行列を使用して、入力メッセージ informationbits を符号化します。出力 LPDC コードワードには、情報ビットとそれに続くパリティチェック ビットが含まれます。LDPC 符号は、スパース パリティ チェック行列およびシャノン限界に近いパフォーマンスを達成できる長いブロック長をもつ、線形の誤り制御符号です。

Y = ldpcEncode(informationbits,encodercfg,OutputFormat=fmt) は、コードワードの出力形式を指定します。

すべて折りたたむ

IEEE® 802.11 で指定された符号化率 3/4 の LDPC 符号を構成するために、プロトタイプ行列とブロック サイズのパラメーターを初期化します。関数 ldpcQuasiCyclicMatrix を使用して、パリティチェック行列を作成します。

P = [16 17 22 24  9  3 14 -1  4  2  7 -1 26 -1  2 -1 21 -1  1  0 -1 -1 -1 -1
     25 12 12  3  3 26  6 21 -1 15 22 -1 15 -1  4 -1 -1 16 -1  0  0 -1 -1 -1
     25 18 26 16 22 23  9 -1  0 -1  4 -1  4 -1  8 23 11 -1 -1 -1  0  0 -1 -1
      9  7  0  1 17 -1 -1  7  3 -1  3 23 -1 16 -1 -1 21 -1  0 -1 -1  0  0 -1
     24  5 26  7  1 -1 -1 15 24 15 -1  8 -1 13 -1 13 -1 11 -1 -1 -1 -1  0  0
      2  2 19 14 24  1 15 19 -1 21 -1  2 -1 24 -1  3 -1  2  1 -1 -1 -1 -1  0
    ];
blockSize = 27;
pcmatrix = ldpcQuasiCyclicMatrix(blockSize,P);

LDPC 符号化器構成オブジェクトを作成し、そのプロパティを表示します。構成オブジェクトの NumInformationBits プロパティを使用してランダムな情報ビットを生成し、LPDC コードワードの情報ビット数を指定します。LDPC 符号化器構成オブジェクトで指定された LDPC 符号で情報ビットを符号化します。

cfgLDPCEnc = ldpcEncoderConfig(pcmatrix)
cfgLDPCEnc = 
  ldpcEncoderConfig with properties:

     ParityCheckMatrix: [162×648 logical]

   Read-only properties:
           BlockLength: 648
    NumInformationBits: 486
    NumParityCheckBits: 162
              CodeRate: 0.7500

infoBits = rand(cfgLDPCEnc.NumInformationBits,1) < 0.5;
codeword = ldpcEncode(infoBits, cfgLDPCEnc);

IEEE® 802.11 で指定された符号化率 3/4 の LDPC 符号を構成するために、プロトタイプ行列とブロック サイズのパラメーターを初期化します。関数 ldpcQuasiCyclicMatrix を使用して、パリティチェック行列を作成します。

P = [
    16 17 22 24  9  3 14 -1  4  2  7 -1 26 -1  2 -1 21 -1  1  0 -1 -1 -1 -1
    25 12 12  3  3 26  6 21 -1 15 22 -1 15 -1  4 -1 -1 16 -1  0  0 -1 -1 -1
    25 18 26 16 22 23  9 -1  0 -1  4 -1  4 -1  8 23 11 -1 -1 -1  0  0 -1 -1
     9  7  0  1 17 -1 -1  7  3 -1  3 23 -1 16 -1 -1 21 -1  0 -1 -1  0  0 -1
    24  5 26  7  1 -1 -1 15 24 15 -1  8 -1 13 -1 13 -1 11 -1 -1 -1 -1  0  0
     2  2 19 14 24  1 15 19 -1 21 -1  2 -1 24 -1  3 -1  2  1 -1 -1 -1 -1  0
    ];
blockSize = 27;
pcmatrix = ldpcQuasiCyclicMatrix(blockSize,P);

LDPC 符号化器と LDPC 復号化器の構成オブジェクトを作成し、それらのプロパティを表示します。

cfgLDPCEnc = ldpcEncoderConfig(pcmatrix)
cfgLDPCEnc = 
  ldpcEncoderConfig with properties:

     ParityCheckMatrix: [162×648 logical]

   Read-only properties:
           BlockLength: 648
    NumInformationBits: 486
    NumParityCheckBits: 162
              CodeRate: 0.7500

cfgLDPCDec = ldpcDecoderConfig(pcmatrix)
cfgLDPCDec = 
  ldpcDecoderConfig with properties:

     ParityCheckMatrix: [162×648 logical]
             Algorithm: 'bp'

   Read-only properties:
           BlockLength: 648
    NumInformationBits: 486
    NumParityCheckBits: 162
              CodeRate: 0.7500

LDPC 符号化され、M-QAM 変調されたビット ストリームを AWGN チャネル経由で送信します。信号を復調し、受信コードワードを復号化してから、ビット エラーをカウントします。for ループを使用し、送信データの LDPC 前方誤り訂正 (FEC) 符号化がある場合とない場合について、複数の SNR 設定を処理します。

M = 64;
maxnumiter = 10;
snr = [0.5 1 1.5 2];
numframes = 20000;

for ii = 1:length(snr)
    data = randi([0 1],cfgLDPCEnc.NumInformationBits,numframes,'int8');

    % Transmit and receive with LDPC coding
    encodedData = ldpcEncode(data,cfgLDPCEnc);
    modSignal = qammod(encodedData,M,InputType='bit');
    [rxsig, noisevar] = awgn(modSignal,snr(ii));
    llrOut = qamdemod(rxsig,M, ...
        OutputType='approxllr', ... % Or use 'llr' for exact but slower LLR calculation
        NoiseVariance=noisevar);
    rxbits = ldpcDecode(llrOut,cfgLDPCDec,maxnumiter);
    fprintf(['SNR = %2.1f\n   Coded: Error rate = %1.6f, ' ...
        'Number of errors = %d\n'], ...
        snr(ii),nnz(data~=rxbits)/numel(data),nnz(data~=rxbits));

    % Transmit and receive with no LDPC coding
    noCoding = qammod(data,M,InputType='bit');
    rxNoCoding = awgn(noCoding,snr(ii));
    rxBitsNoCoding = qamdemod(rxNoCoding,M,OutputType='bit');

    fprintf(['Noncoded: Error rate = %1.6f, ' ...
        'Number of errors = %d\n\n'], ...
        nnz(data~=rxBitsNoCoding)/numel(data),nnz(data~=rxBitsNoCoding))
end
SNR = 0.5
   Coded: Error rate = 0.000441, Number of errors = 4282
Noncoded: Error rate = 0.039045, Number of errors = 379515
SNR = 1.0
   Coded: Error rate = 0.000062, Number of errors = 604
Noncoded: Error rate = 0.032813, Number of errors = 318941
SNR = 1.5
   Coded: Error rate = 0.000003, Number of errors = 27
Noncoded: Error rate = 0.027001, Number of errors = 262450
SNR = 2.0
   Coded: Error rate = 0.000000, Number of errors = 0
Noncoded: Error rate = 0.021778, Number of errors = 211686

入力引数

すべて折りたたむ

情報ビット。行列として指定します。informationbits の行数は、入力 encodercfgNumInformationBits プロパティの値と等しくなければなりません。

データ型: single | double | int8 | logical

LDPC 符号化器の構成。ldpcEncoderConfig オブジェクトとして指定します。

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

  • 'whole' — 情報ビットとパリティチェック ビットを含む LDPC コードワード全体を出力します。関数が出力する行数は、入力 encodercfgBlockLength プロパティの値と同じになります。

  • 'parity' — パリティチェック ビットのみを出力します。関数が出力する行数は、入力 encodercfgNumParityCheckBits プロパティの値と同じになります。

出力引数

すべて折りたたむ

符号化されたコードワード。行列として返されます。符号化操作について、関数は入力 informationbits の各列を個別に符号化します。この関数は、informationbits の非ゼロ値を 1 として扱います。符号化は、部分行列 [1:K,:] の元の情報ビットと部分行列 ((1:K + 1):end,:) のパリティチェック ビットが入力された組織的なコードワード行列を計算します。K は、入力 encodercfgNumInformationBits プロパティと等しくなります。

  • 出力形式が 'whole' の場合、出力には、情報ビットとパリティチェック ビットを含む LDPC コードワード全体が含められます。関数が出力する行数は、入力 encodercfgBlockLength プロパティの値と同じになります。

  • 出力形式が 'parity' の場合、出力にはパリティチェック ビットのみが含められます。関数が出力する行数は、入力 encodercfgNumParityCheckBits プロパティと同じになります。

出力形式の設定については、OutputFormat 引数を参照してください。出力のデータ型は、入力 informationbits のデータ型と同じです。

参照

[1] IEEE® Std 802.11™-2020 (Revision of IEEE Std 802.11-2016). "Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications." IEEE Standard for Information technology — Telecommunications and information exchange between systems. Local and metropolitan area networks — Specific requirements.

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

拡張機能

すべて展開する

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2021b で導入

すべて展開する