ldpcQuasiCyclicMatrix

Матрица проверки четности квазициклического кода LDPC

    Описание

    пример

    H = ldpcQuasiCyclicMatrix(blocksize,P) возвращает матрицу проверки четности H для квазициклического кода LDPC на основе входного размера блока, blocksize, и прототипная матрица, P.

    Примеры

    свернуть все

    Создайте матрицу проверки четности квазициклического кода 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 = 6x12 sparse logical array
       (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 = 6x12 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
    
    

    Инициализируйте параметры для прототипной матрицы и размера блока, чтобы сконфигурировать уровень 3/4 LDPC код, заданный в IEEE 802.11. Создайте матрицу проверки четности при помощи 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: [162x648 logical]
    
       Read-only properties:
               BlockLength: 648
        NumInformationBits: 486
        NumParityCheckBits: 162
                  CodeRate: 0.7500
    
    
    infoBits = rand(cfgLDPCEnc.NumInformationBits,1) < 0.5;
    codeword = ldpcEncode(infoBits, cfgLDPCEnc);

    Инициализируйте параметры для прототипной матрицы и размера блока, чтобы сконфигурировать уровень 3/4 LDPC код, заданный в IEEE 802.11. Создайте матрицу проверки четности при помощи 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: [162x648 logical]
    
       Read-only properties:
               BlockLength: 648
        NumInformationBits: 486
        NumParityCheckBits: 162
                  CodeRate: 0.7500
    
    
    cfgLDPCDec = ldpcDecoderConfig(pcmatrix)
    cfgLDPCDec = 
      ldpcDecoderConfig with properties:
    
         ParityCheckMatrix: [162x648 logical]
                 Algorithm: 'bp'
    
       Read-only properties:
               BlockLength: 648
        NumInformationBits: 486
        NumParityCheckBits: 162
                  CodeRate: 0.7500
    
    

    Передайте LDPC-закодированный, модулируемый QPSK поток битов через канал AWGN. Демодулируйте сигнал, декодируйте полученные кодовые комбинации, и затем считайте битовые ошибки. Используйте вложил for циклы, чтобы обработать несколько настроек SNR и систем координат с и без кодирования прямого исправления ошибок (FEC) LDPC передаваемых данных.

    M = 4;
    maxnumiter = 10;
    snr = [20 6 3];
    numframes = 10;
    qpskmod = comm.PSKModulator(M,'BitInput',true);
    qpskmod2 = comm.PSKModulator(M);
    
    ber = comm.ErrorRate;
    ber2 = comm.ErrorRate;
    
    for ii = 1:length(snr)
        qpskdemod = comm.PSKDemodulator(M,'BitOutput',true, ...
            'DecisionMethod','Approximate log-likelihood ratio', ...
            'Variance',1/10^(snr(ii)/10));
        qpskdemod2 = comm.PSKDemodulator(M);
        for counter = 1:numframes
            data = randi([0 1],cfgLDPCEnc.NumInformationBits,1,'int8');
            % Transmit and receive with LDPC coding
            encodedData = ldpcEncode(data,cfgLDPCEnc);
            modSignal = qpskmod(encodedData);
            receivedSignal = awgn(modSignal,snr(ii));
            demodSignal = qpskdemod(receivedSignal);
            receivedBits = ldpcDecode(demodSignal,cfgLDPCDec,maxnumiter);
            errStats = ber(data,receivedBits);
            % Transmit and receive with no LDPC coding
            noCoding = qpskmod2(data);
            rxNoCoding = awgn(noCoding,snr(ii));
            rxBitsNoCoding = qpskdemod2(rxNoCoding);
            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))
    end
    SNR = 20
       Coded: Error rate = 0.00, Number of errors = 0
    
    Noncoded: Error rate = 0.00, Number of errors = 0
    
    SNR =  6
       Coded: Error rate = 0.00, Number of errors = 0
    
    Noncoded: Error rate = 0.02, Number of errors = 196
    
    SNR =  3
       Coded: Error rate = 0.02, Number of errors = 353
    
    Noncoded: Error rate = 0.07, Number of errors = 976
    

    Входные параметры

    свернуть все

    Размер блока квазициклического кода LDPC в виде положительной скалярной величины.

    Типы данных: double

    Прототипная матрица в виде матрицы. Количество столбцов в P должен быть больше количества строк в P. Все значения в P должен быть -1, 0, или положительные целые числа меньше, чем вход blocksize. Значение -1 производит blocksize с нулевым знаком- blocksize субматрица. Другие значения указывают что количество столбцов blocksize- blocksize диагональная матрица должна циклически быть смещена направо. Каждая субматрица является или нулевой матрицей или циклически переключенной версией диагональной матрицы.

    Типы данных: double

    Выходные аргументы

    свернуть все

    Матрица проверки четности, возвращенная как разреженная логическая матрица. Функция расширяет каждый элемент входа P к blocksize- blocksize субматрица в H.

    Типы данных: логический

    Расширенные возможности

    Генерация кода C/C++
    Генерация кода C и C++ с помощью MATLAB® Coder™.

    Смотрите также

    Функции

    Объекты

    Введенный в R2021b