주요 콘텐츠

ldpcEncoderConfig

LPDC 인코더 구성 만들기

R2021b 이후

설명

ldpcEncoderConfig 객체는 ldpcEncode 함수의 구성 객체입니다. 이 객체는 저밀도 패리티 검사(LDPC) 행렬과 읽기 전용 속성을 지정하여 구성된 행렬에 대한 정보를 제공합니다.

생성

설명

encodercfg = ldpcEncoderConfig는 WLAN 802.11™ 표준[1]의 레이트 5/6 LDPC 코드를 지정하는 LDPC 인코더 구성 객체를 만듭니다.

encodercfg = ldpcEncoderConfig(H)ParityCheckMatrix 속성을 H로 설정하여 출력 객체를 구성합니다.

예제

encodercfg = ldpcEncoderConfig(decodercfg)는 입력 ldpcDecoderConfig 구성 객체 decodercfg를 기반으로 속성을 설정합니다.

객체를 입력값으로 하여 ldpcEncode 함수가 호출되면 객체 설정의 유효성 검사가 실행됩니다.

속성

모두 확장

패리티 검사 행렬로, 희소 형식의 논리형 (NKN 행렬로 지정됩니다. 여기서 N > K > 0입니다. 패리티 검사 행렬의 마지막 NK개 행은 차수가 2인 갈루아 체에서 가역적이어야 합니다. N은 LDPC 코드워드 블록 길이입니다. K는 LDPC 코드워드의 정보 비트 수입니다. 디폴트 값은 WLAN 802.11 표준[1]에 지정된 대로 블록 길이가 648인 레이트 5/6 LDPC 코드의 패리티 검사 행렬입니다. 구체적으로 설명하자면, 디폴트 값은 이 코드의 ldpcQuasiCyclicMatrix 함수에서 출력하는 희소 형식의 논리형 108×648 행렬 H입니다.

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

데이터형: logical

읽기 전용 속성입니다.

LDPC 코드워드의 블록 길이(N)로, 양의 스칼라로 지정됩니다. N은 패리티 검사 행렬의 열 개수와 같습니다.

데이터형: double

읽기 전용 속성입니다.

LDPC 코드워드의 정보 비트 수(K)로, 양의 스칼라로 지정됩니다. K는 패리티 검사 행렬의 열 개수에서 패리티 검사 행렬의 행 개수를 뺀 값과 같습니다.

데이터형: double

읽기 전용 속성입니다.

LDPC 코드워드의 패리티 검사 비트 수(NK)로, 양의 스칼라로 지정됩니다. NK는 패리티 검사 행렬의 행 개수와 같습니다.

데이터형: double

읽기 전용 속성입니다.

LDPC 코드의 코드율로, NumInformationBits/BlockLength와 같은 양의 스칼라로 지정됩니다.

데이터형: double

LPDC 인코더 구성 객체로, 구조체로 반환됩니다.

데이터형: struct

예제

모두 축소

프로토타입 행렬과 블록 크기의 파라미터를 초기화하여 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

참고 문헌

[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.

확장 기능

모두 확장

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2021b에 개발됨