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

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

Введение

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

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

Этот пример симулирует энкодер BCH, энкодер LDPC, interleaver, модулятор, а также их дубликаты в приемнике, согласно стандарту 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 к истине, чтобы вывести количество итераций, выполняемых для каждой кодовой комбинации.

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 как внутренние и внешние коды, соответственно. Закодированные биты проходят через interleaver. Модулятор сопоставляет чередованные биты с символами от предопределенного созвездия. Модулируемые символы проходят через канал AWGN. Демодулятор использует аппроксимированный алгоритм логарифмической правдоподобности, чтобы получить мягкие битные оценки. Декодер LDPC декодирует устраненные чередование мягкие битные значения и генерирует трудные решения. Декодер BCH работает над этими трудными решениями создать итоговую оценку принятого кадра.

Вторая часть цикла for собирает измерения эффективности, такие как частота ошибок по битам и график рассеивания. Это также оценивает полученное значение ОСШ.

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 выход и пакетный коэффициент ошибок комплексной системы вместе с измеренным ОСШ во входе приемника. В то время как демодулятор вывел, представляет коэффициент ошибок больше чем 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 биты для нескольких значений ОСШ. Поскольку эта симуляция занимает много времени в этом примере, который мы только обеспечиваем результату симуляции, сохраненной в 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. EN 302 307 V1.1.1 Стандарта ETSI: Цифровое телевидение (DVB); структура структурирования Второго поколения, кодирование канала и системы модуляции для Широковещательной передачи, Interactive Services, Сбора Новостей и других широкополосных спутниковых приложений (DVB-S2), Европейский институт стандартизации электросвязи, Вальбонн, Франция, 2005-03.

  2. Р. Г. Галлэджер, Имеющие малую плотность Коды с проверкой четности, IEEE® Transactions на Теории информации, Издании 8, № 1, январь 1962, стр 21-28.

  3. В. Э. Райан, введение в коды LDPC, в Кодировании и Обработке сигналов для Магнитных Систем Записи (Отравляют Vasic, редактора), Нажатие CRC, 2004.