주요 콘텐츠

ldpcEncode

이진 LDPC 코드 인코딩

R2021b 이후

설명

Y = ldpcEncode(informationbits,encodercfg)는 LDPC 인코더 구성 객체 encodercfg로 지정된 LDPC 행렬을 사용하여 입력 메시지 informationbits를 인코딩합니다. 출력 LPDC 코드워드에는 정보 비트와 그 뒤에 이어서 패리티 검사 비트가 포함됩니다. LDPC 코드는 희소 형식의 패리티 검사 행렬과 긴 길이의 블록을 사용하는 선형 오류 제어 코드로, Shannon 한계에 근접한 성능을 달성할 수 있습니다.

예제

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 인코더 구성 객체와 디코더 구성 객체를 만들고 그 속성을 표시합니다.

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

AWGN 채널을 통해 LDPC로 인코딩되고 M-QAM으로 변조된 비트 스트림을 전송합니다. 신호를 복조하고, 수신된 코드워드를 디코딩한 다음 비트 오류를 계산합니다. 전송된 데이터의 LDPC 순방향 오류 정정(FEC) 코딩을 포함한 경우와 포함하지 않은 경우에 대해 for 루프를 사용하여 여러 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

LPDC 인코더 구성으로, ldpcEncoderConfig 객체로 지정됩니다.

출력 형식으로, 다음 값 중 하나로 지정됩니다.

  • 'whole' — 정보 비트와 패리티 검사 비트가 함께 포함된 전체 LDPC 코드워드를 출력합니다. 함수가 출력하는 행 개수는 입력값 encodercfgBlockLength 속성의 값과 같습니다.

  • 'parity' — 패리티 검사 비트만 출력합니다. 함수가 출력하는 행 개수는 입력값 encodercfgNumParityCheckBits 속성의 값과 같습니다.

출력 인수

모두 축소

인코딩된 코드워드로, 행렬로 반환됩니다. 인코딩 연산 시 함수는 입력값 informationbits의 각 열을 개별적으로 인코딩합니다. 이 함수는 informationbits에서 0이 아닌 값을 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에 개발됨

모두 확장