exponenta event banner

DVB-S.2 Связь, включая кодирование LDPC

В этом примере показано применение кодов контроля четности низкой плотности (LDPC) в стандарте цифрового видеовещания второго поколения (DVB-S.2), который развернут DIRECTV в США. В примере используются объекты системы связи для моделирования цепи передатчик-приемник, которая включает в себя кодирование и декодирование LDPC.

Введение

Стандарт ETSI (Европейский институт телекоммуникационных стандартов) EN 302 307 для вещания, интерактивных услуг, сбора новостей и других широкополосных спутниковых приложений (DVB-S.2) [1] использует современную схему кодирования для увеличения пропускной способности канала. Конкатенация кодов LDPC (проверка четности с низкой плотностью) и BCH является основой этой схемы кодирования. Коды LDPC, изобретенные Галлагером в его основной докторской диссертации в 1960 году, могут достичь чрезвычайно низких коэффициентов ошибок вблизи пропускной способности канала, используя алгоритм итеративного декодирования с низкой сложностью [2]. Внешние коды BCH используются для исправления спорадических ошибок, сделанных декодером LDPC.

Канальные коды для DVB-S.2 обеспечивают значительное увеличение пропускной способности по сравнению с DVB-S при тех же условиях передачи. В зависимости от режима передачи DVB-S.2 обеспечивает работу без квазиошибок (частота пакетных ошибок ниже 10 ^ -7) на уровне от 0,7 дБ до 1 дБ от предела Шеннона.

Этот пример моделирует кодер BCH, кодер LDPC, перемежитель, модулятор, а также их аналоги в приемнике в соответствии со стандартом DVB-S.2. Пример собирает частоту ошибок на выходах демодулятора, декодера LDPC и декодера BCH, определяет распределение количества итераций, выполняемых декодером LDPC, и показывает совокупность принятых символов. Для получения дополнительной информации относительно структуры системы, упрощения и предположения, видят Связь DVB-S.2, Включая LDPC, Кодирующий в примере Simulink.

Инициализация

Сценарий configureDVBS2Demo.m инициализирует некоторые параметры моделирования и генерирует структуру dvb. Поля этой структуры являются параметрами текущей системы DVB-S.2. Он также создает системные объекты, составляющие DVB-S.2 систему.

subsystemType = '16APSK 2/3'; % Constellation and LDPC code rate
EsNodB        = 9;            % Energy per symbol to noise PSD ratio in dB
numFrames     = 20;           % Number of frames to simulate

% Initialize
configureDVBS2Demo

% Display system parameters
dvb
dvb = 

  struct with fields:

                  CodeRate: '2/3'
                    EsNodB: 9
            ModulationType: '16APSK'
         NumBytesPerPacket: 188
          NumBitsPerPacket: 1504
         BCHCodewordLength: 43200
          BCHMessageLength: 43040
          BCHGeneratorPoly: [1x161 double]
          BCHPrimitivePoly: [1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1]
      NumPacketsPerBBFrame: 28
    NumInfoBitsPerCodeword: 42112
                 BitPeriod: 2.3746e-05
        LDPCCodewordLength: 64800
     LDPCParityCheckMatrix: [21600x64800 logical]
         LDPCNumIterations: 50
           InterleaveOrder: [64800x1 double]
             Constellation: [16x1 double]
             SymbolMapping: [12 14 15 13 4 0 8 10 2 6 7 3 11 9 1 5]
               PhaseOffset: [0.7854 0.2618]
             BitsPerSymbol: 4
           ModulationOrder: 16
             SequenceIndex: 2
        NumSymsPerCodeword: 16200
                  NoiseVar: 0.1259
               NoiseVarEst: 0.3227
            RecDelayPreBCH: 43040

В примере используются эти системные объекты и функции.

Объекты моделирования:

enc            - BCH encoder
dec            - BCH decoder
LDPCEnc        - LDPC encoder
LDPCDec        - LDPC decoder
intrlvr        - Block interleaver
deintrlvr      - Block deinterleaver
pskModulator   - PSK modulator
pskDemodulator - PSK demodulator
chan           - AWGN channel

Объекты измерения производительности:

PER       - Packet error rate calculator
BERLDPC   - LDPC decoder output error rate calculator
BERMod    - Demodulator output error rate calculator
constDiag - Scatter plot of channel output
meanCalc  - Average of the noise variance

Функции моделирования:

dvbsapskmod   - DVBSAPSK modulator
dvbsapskdemod - DVBSAPSK demodulator

Кодер и декодер LDPC

Создайте системные объекты LDPC-кодера и декодера и установите матрицу контроля четности в соответствии с разделом 5.3.1 стандарта DVB-S.2 [1]. Вы устанавливаете IterationTerminationCondition свойство для 'Parity check satisfied' для прекращения итераций декодера, когда все проверки четности выполнены, что уменьшает время декодирования. Установите MaximumIterationCount для 50, чтобы ограничить число итераций моделирования. Установите NumIterationsOutputPort true для вывода количества итераций, выполненных для каждого кодового слова.

encldpc = comm.LDPCEncoder(dvb.LDPCParityCheckMatrix);

decldpc = comm.LDPCDecoder(dvb.LDPCParityCheckMatrix, ...
    'IterationTerminationCondition','Parity check satisfied', ...
    'MaximumIterationCount',dvb.LDPCNumIterations, ...
    'NumIterationsOutputPort',true);

Цикл обработки потока

Этот раздел кода вызывает цикл обработки для системы DVB-S.2. Основной контур обрабатывает данные покадрово, где системный параметр dvb.NumPacketsPerBBFrame определяет количество пакетов данных на кадр BB. Первая часть цикла for моделирует систему. Имитатор кодирует каждый кадр, используя кодеры BCH и LDPC в качестве внутреннего и внешнего кодов соответственно. Кодированные биты проходят через перемежитель. Модулятор отображает перемеженные биты в символы из предопределенной совокупности. Модулированные символы проходят через канал AWGN. Демодулятор использует аппроксимационный алгоритм логарифмического правдоподобия для получения оценок мягких битов. Декодер LDPC декодирует обращенно перемеженные значения мягких битов и генерирует жесткие решения. Декодер ВСН работает над этими трудными решениями, чтобы создать окончательную оценку принятого кадра.

Вторая часть цикла для собирает измерения рабочих характеристик, такие как частота битовых ошибок и график рассеяния. Он также оценивает полученное значение SNR.

bbFrameTx  = false(encbch.MessageLength,1);
numIterVec = zeros(numFrames,1);
falseVec   = false(dvb.NumPacketsPerBBFrame,1);

for frameCnt=1:numFrames

    % Transmitter, channel, and receiver
    bbFrameTx(1:dvb.NumInfoBitsPerCodeword) = ...
        logical(randi([0 1],dvb.NumInfoBitsPerCodeword,1));

    bchEncOut = encbch(bbFrameTx);
    ldpcEncOut = encldpc(bchEncOut);
    % Block Interleaver
    intrlvrOut = intrlv(ldpcEncOut,dvb.InterleaveOrder);

    if dvb.ModulationOrder == 4 || dvb.ModulationOrder == 8
        modOut = pskModulator(intrlvrOut);
    else
        modOut = dvbsapskmod(intrlvrOut,dvb.ModulationOrder,'s2', ...
            dvb.CodeRate,'InputType','bit','UnitAveragePower',true);
    end

    chanOut = chan(modOut);

    if dvb.ModulationOrder == 4 || dvb.ModulationOrder == 8
        demodOut = pskDemodulator(chanOut);
    else
        demodOut = dvbsapskdemod(chanOut,dvb.ModulationOrder,'s2', ...
            dvb.CodeRate,'OutputType','approxllr','NoiseVar', ...
            dvb.NoiseVar,'UnitAveragePower',true);
    end

    % Block Deinterleaver
    deintrlvrOut = deintrlv(demodOut,dvb.InterleaveOrder);
    [ldpcDecOut, numIter] = decldpc(deintrlvrOut);
    bchDecOut = decbch(ldpcDecOut);
    bbFrameRx = bchDecOut(1:dvb.NumInfoBitsPerCodeword,1);

    % Error statistics
    comparedBits = xor(bbFrameRx,bbFrameTx(1:dvb.NumInfoBitsPerCodeword));
    packetErr    = any(reshape(comparedBits,dvb.NumBitsPerPacket, ...
        dvb.NumPacketsPerBBFrame));
    per = PER(falseVec,packetErr');
    berMod = BERMod(demodOut<0,intrlvrOut);
    berLDPC = BERLDPC(ldpcDecOut,bchEncOut);

    % LDPC decoder iterations
    numIterVec(frameCnt) = numIter;

    % Noise variance estimate
    noiseVar = meanCalc(var(chanOut - modOut));

    % Scatter plot
    constDiag(chanOut);
end

Выполнение объектов измерения частоты ошибок (hPER, hBERMod, и hBERLDPC), выводит вектор 3 на 1, содержащий обновления измеренного значения частоты ошибок, количества ошибок и общего количества передач (пакетов или битов). Отображение BER на выходе демодулятора, BER на выходе декодера LDPC и частоты ошибок пакетов сквозной системы вместе с измеренным SNR на входе приемника. В то время как выходной сигнал демодулятора представляет частоту ошибок более 10%, декодер LDPC способен исправлять все ошибки и предоставлять пакеты без ошибок.

fprintf('Measured SNR : %1.2f dB\n',10*log10(1/noiseVar))
fprintf('Modulator BER: %1.2e\n',berMod(1))
fprintf('LDPC BER     : %1.2e\n',berLDPC(1))
fprintf('PER          : %1.2e\n',per(1))
Measured SNR : 8.98 dB
Modulator BER: 8.25e-02
LDPC BER     : 0.00e+00
PER          : 0.00e+00

На рисунке показано распределение количества итераций, выполняемых декодером LDPC. Декодер смог декодировать все кадры без ошибки до достижения максимального числа итераций 50.

distFig = figure;
histogram(numIterVec,1:decldpc.MaximumIterationCount-1);
xlabel('Number of iterations'); ylabel('# occurrences'); grid on;
title('Distribution of number of LDPC decoder iterations')

Мы запустили цикл обработки потока для 32,4e6 бит для нескольких значений SNR. Поскольку это моделирование занимает много времени, в этом примере мы предоставляем только результат моделирования, сохраненный в MAT-файле.

load berResultsDVBS2Demo.mat cBER_16APSK snrdB_16APSK
berFig = figure;
semilogy(snrdB_16APSK,cBER_16APSK(1,:)); xlim([8 8.9]);
xlabel('SNR (dB)'); ylabel('BER'); grid on

Резюме

В этом примере использовались несколько объектов системы для моделирования части DVB-S.2 системы связи по каналу AWGN. Он показал, как моделировать несколько частей системы DVB-S.2, таких как кодирование LDPC. Производительность системы измерялась с использованием значений PER и BER, полученных с помощью системных объектов измерения частоты ошибок.

Дальнейшие исследования

Можно изменить части этого примера, чтобы поэкспериментировать с различными типами подсистем, используя различные значения для Es/No и максимальное количество итераций декодера LDPC. В этом примере поддерживаются следующие типы подсистем:

     'QPSK 1/4', 'QPSK 1/3', 'QPSK 2/5', 'QPSK 1/2', 'QPSK 3/5', 'QPSK
     2/3', 'QPSK 3/4', 'QPSK 4/5', 'QPSK 5/6', 'QPSK 8/9', 'QPSK 9/10'
     '8PSK 3/5', '8PSK 4/5', '8PSK 2/3', '8PSK 3/4', '8PSK 5/6', '8PSK
     8/9', '8PSK 9/10'
     '16APSK 2/3', '16APSK 3/4', '16APSK 4/5', '16APSK 5/6', '16APSK
     8/9', '16APSK 9/10'
     '32APSK 3/4', '32APSK 4/5', '32APSK 5/6', '32APSK 8/9', '32APSK
     9/10'

Приложение

В этом примере используются следующие сценарии и вспомогательная функция:

Избранная библиография

  1. Стандарт ETSI EN 302 307 V1.1.1: цифровое видеовещание (DVB); Структура кадров второго поколения, системы кодирования и модуляции каналов для вещания, интерактивных услуг, сбора новостей и других широкополосных спутниковых приложений (DVB-S2), Европейский институт телекоммуникационных стандартов, Вальбонн, Франция, 2005-03.

  2. Р. Г. Галлагер, коды проверки четности с низкой плотностью, IEEE ® Transactions on Information Theory, том 8, № 1, январь 1962, стр. 21-28.

  3. В. Э. Райан, Введение в коды LDPC, в кодировании и обработке сигналов для систем магнитной записи (Bane Vasic, ред.), CRC Press, 2004.