Ссылка 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 на 'Проверку четности, которой удовлетворяют' останавливать итерации декодера, когда всем проверкам четности удовлетворяют, который уменьшает время декодирования. Установите свойство 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.