주요 콘텐츠

ldpcQuasiCyclicMatrix

준순환(quasi-cyclic) LDPC 코드의 패리티 검사 행렬

R2021b 이후

    설명

    H = ldpcQuasiCyclicMatrix(blocksize,P)는 입력 블록 크기 blocksize와 프로토타입 행렬 P를 기반으로 준순환 LDPC 코드에 대한 패리티 검사 행렬 H를 반환합니다.

    예제

    예제

    모두 축소

    준순환 LDPC 코드의 패리티 검사 행렬을 만듭니다. 블록 크기를 3으로 설정하고 프로토타입 행렬을 [0 -1 1 2; 2 1 -1 0]으로 설정합니다.

    blockSize = 3;
    p = [0 -1 1 2; 2 1 -1 0];
    pcmatrix = ldpcQuasiCyclicMatrix(blockSize,p)
    pcmatrix = 6×12 sparse logical array (18 nonzeros)
       (1,1)      1
       (5,1)      1
       (2,2)      1
       (6,2)      1
       (3,3)      1
       (4,3)      1
       (6,4)      1
       (4,5)      1
       (5,6)      1
       (3,7)      1
       (1,8)      1
       (2,9)      1
       (2,10)     1
       (4,10)     1
       (3,11)     1
       (5,11)     1
       (1,12)     1
       (6,12)     1
    
    

    결과로 생성되는 패리티 검사 행렬이 희소 형식의 논리형 행렬인지 확인합니다.

    issparse(pcmatrix) & islogical(pcmatrix)
    ans = logical
       1
    
    

    패리티 검사 행렬은 크기가 클 수 있으므로 비희소 행렬로 표시하는 것은 일반적으로 권장되지 않습니다. 이 예제의 패리티 검사 행렬은 6×12에 불과하므로 비희소 행렬로 표시합니다.

    full(pcmatrix)
    ans = 6×12 logical array
    
       1   0   0   0   0   0   0   1   0   0   0   1
       0   1   0   0   0   0   0   0   1   1   0   0
       0   0   1   0   0   0   1   0   0   0   1   0
       0   0   1   0   1   0   0   0   0   1   0   0
       1   0   0   0   0   1   0   0   0   0   1   0
       0   1   0   1   0   0   0   0   0   0   0   1
    
    

    프로토타입 행렬과 블록 크기의 파라미터를 초기화하여 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로 인코딩되고 QPSK로 변조된 비트 스트림을 전송합니다. 신호를 복조하고, 수신된 코드워드를 디코딩한 다음 비트 오류를 계산합니다. 전송된 데이터의 LDPC 순방향 오류 정정(FEC) 코딩을 포함한 경우와 포함하지 않은 경우에 대해 중첩 for 루프를 사용하여 여러 SNR 설정과 프레임을 처리합니다.

    M = 4;
    maxnumiter = 10;
    snr = [3 6 20];
    numframes = 10;
    
    ber = comm.ErrorRate;
    ber2 = comm.ErrorRate;
    
    for ii = 1:length(snr)
        for counter = 1:numframes
            data = randi([0 1],cfgLDPCEnc.NumInformationBits,1,'int8');
            % Transmit and receive with LDPC coding
            encodedData = ldpcEncode(data,cfgLDPCEnc);
            modSignal = pskmod(encodedData,M,InputType='bit');
            [rxsig, noisevar] = awgn(modSignal,snr(ii));
            demodSignal = pskdemod(rxsig,M, ...
                OutputType='approxllr', ...
                NoiseVariance=noisevar);
            rxbits = ldpcDecode(demodSignal,cfgLDPCDec,maxnumiter);
            errStats = ber(data,rxbits);
            % Transmit and receive with no LDPC coding
            noCoding = pskmod(data,M,InputType='bit');
            rxNoCoding = awgn(noCoding,snr(ii));
            rxBitsNoCoding = pskdemod(rxNoCoding,M,OutputType='bit');
            errStatsNoCoding = ber2(data,int8(rxBitsNoCoding));
        end
        fprintf(['SNR = %2d\n   Coded: Error rate = %1.2f, ' ...
            'Number of errors = %d\n'], ...
            snr(ii),errStats(1),errStats(2))
        fprintf(['Noncoded: Error rate = %1.2f, ' ...
            'Number of errors = %d\n'], ...
            errStatsNoCoding(1),errStatsNoCoding(2))
        reset(ber);
        reset(ber2);
    end
    SNR =  3
       Coded: Error rate = 0.07, Number of errors = 355
    
    Noncoded: Error rate = 0.08, Number of errors = 384
    
    SNR =  6
       Coded: Error rate = 0.00, Number of errors = 0
    
    Noncoded: Error rate = 0.02, Number of errors = 98
    
    SNR = 20
       Coded: Error rate = 0.00, Number of errors = 0
    
    Noncoded: Error rate = 0.00, Number of errors = 0
    

    입력 인수

    모두 축소

    준순환 LDPC 코드의 블록 크기로, 양의 스칼라로 지정됩니다.

    데이터형: double

    프로토타입 행렬로, 행렬로 지정됩니다. P의 열 개수는 P의 행 개수보다 커야 합니다. P의 모든 값은 -1, 0 또는 입력 blocksize보다 작은 양의 정수여야 합니다. 값이 -1이면 값이 0인 blocksize×blocksize 부분행렬이 생성됩니다. 다른 값은 blocksize×blocksize 대각 행렬의 열 개수가 순환적으로 오른쪽으로 이동해야 함을 나타냅니다. 각 부분행렬은 영행렬이거나 순환적으로 이동되는 대각 행렬입니다.

    데이터형: double

    출력 인수

    모두 축소

    패리티 검사 행렬로, 희소 형식의 논리형 행렬로 반환됩니다. 이 함수는 입력값 P의 각 요소를 Hblocksize×blocksize 부분행렬로 확장합니다.

    데이터형: logical

    확장 기능

    모두 확장

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

    버전 내역

    R2021b에 개발됨