Цифровое телевидение - кабель (DVB-C)

Этот пример показывает часть ETSI (Европейский институт стандартизации электросвязи) EN 300 429 стандарт для передачи кабельной системы цифровых телевизионных сигнал [1]. Пример использует систему связи objects™, чтобы симулировать Цифровое телевидение - Кабель (DVB-C) цепь приемника передатчика.

Введение

Стандарт DVB-C описывает передачу цифровых телевизионных сигнал по линиям кабеля с помощью MPEG-2 или семейства MPEG-4 цифрового аудио и видеопотоков. В этом примере мы моделируем фрагмент того стандарта. Поток данных передается с помощью кодов Тростника-Solomon и одного поставщика услуг модуляция QAM. Стандарт предписывает проект передатчика и устанавливает минимальные требования к производительности для приемника.

Цель этого примера к:

  • Смоделируйте основные фрагменты возможного, передают/получают проект (действующий в 64-QAM режиме с Транспортными Пакетными данными о MPEG-2)

  • Проиллюстрируйте использование Системных объектов ключа Communications Toolbox™ для DVB-C (или подобный) разработка системы

  • Проиллюстрируйте создание высокоуровневых Системных объектов, которые содержат другие Системные объекты для того, чтобы смоделировать большие компоненты системы под тестом

  • Сгенерируйте ошибочную статистику, которая поможет определить, удовлетворяет ли модель требованиям производительности системы

  • Проиллюстрируйте создание тестовой обвязки, которая может поддержать переменные количества тестовых прогонов. В этом случае мы используем ту поддержку, чтобы поддержать один режим, где только один EbNo задан, и мы наблюдаем спектры и scatterplots. Мы также поддерживаем режим, где несколько EbNo заданы, для того, чтобы сгенерировать кривую BER.

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

commdvbc_init.m скрипт инициализирует параметры симуляции и генерирует структуру, prmDVBC. Поля этой структуры являются параметрами системы DVB-C под рукой.

commdvbc_init
% The fields of this structure are the parameters of the DVB-C system at
% hand.
prmDVBC
prmDVBC = 

  struct with fields:

             bitsPerByte: 8
             bitsPerMTpl: 6
     MPEG2DatRateBitPerS: 9600000
     rawMPEG2DataPcktLen: 184
     MPEG2TrnsprtPcktLen: 188
    MPEG2TrnsprtFramePer: 1.5667e-04
     MPEG2PcktsPerSprFrm: 8
     MPEG2TrnsSuperFrame: 1504
      PRBSSeqPeriodBytes: 1503
       PRBSSeqPeriodBits: 12024
        RSCodewordLength: 204
       CableChanFrameLen: 272
      CableChanFrmPeriod: 1.5667e-04
      RCosineSampsPerSym: 8
       CableSymbolPeriod: 7.1998e-08
       RCosineFilterSpan: 16
     TxRxSymbolSampDelay: 288
     DeintrlvrAlignDelay: 192
        QAMSymbolMapping: [1x64 double]
     ConvIntlNumBranches: 12
       ConvIntlCellDepth: 17

Запустите систему под тестом

Основной цикл в системе под тестом обрабатывает пакет пакетом данных, где восемь пакетов формируют сверхкадр. Приведите в порядок useCodegen=true, чтобы использовать сгенерированный код вместо кода MATLAB®. Установите переменную MATLAB compileIt на истину для того, чтобы создать сгенерированный код.

Архитектура кода для системы под тестом

Этот пример демонстрирует ссылку от оператора кабельной связи до поля верхней части набора клиента. Модель для той ссылки содержится в функции с именем runDVBCSystemUnderTest. Цикл обработки данных разделен на шесть основных частей. Системный объект использовался, чтобы смоделировать каждый из тех шести компонентов в той ссылке. Те объекты:

1) DVBCSource: generates the bitstream
2) DVBCTransmitter: contains the transmitter (encoding, modulation, filtering, etc.)
3) comm.AWGNChannel: models the channel
4) DVBCReceiver: contains the receiver
5) DVBCBER: calculates error rates
6) DVBCScopes: optional object that provides visualization

Внутренний цикл runDVBCSystemUnderTest использует эти объекты:

Можно использовать цикл for вокруг системы под тестом, чтобы обработать постоянное число супер систем координат. В качестве альтернативы можно использовать цикл с условием продолжения, чтобы управлять продолжительностью симуляции на основе количества симулированных ошибок и переданных битов. Мы сделали последнего, предназначаясь для количества ошибок к 100, и максимальное количество передач к 1e6.

while (berEnd2End(2) < totalErrors) && (berEnd2End(3) < totalBits)
    txBytes = dvbcSource();                          % Source
    [txPckt, modTxPckt] = dvbcTX(txBytes);           % Transmitter
    chPckt = awgnChan(txPckt);                       % Channel
    [rxBytes, modRxPckt, rxPcakt] = dvbcRX(chPckt);  % Receiver
    [berEnd2End, berDemod] = ...
      dvbBER(txBytes,rxBytes,modTxPckt,modRxPckt);   % BER
    if useScopes
        runDVBCScopes(dvbcScope,txPckt,chPckt,rxPckt);
    end
end

Описания отдельных компонентов

Основная полоса MPEG-2 Физический Интерфейс - Источник данных

Этот раздел генерирует случайные данные и биты заголовка и добавляет байт синхронизации заголовка. Первый пакет каждого сверхкадра использует битное дополнение байта синхронизации заголовка. Код для этого компонента содержится в DVBCSource.m.

Основополосная обработка передатчика

Этот раздел рандомизирует данные с помощью псевдошумовой последовательности. Передатчик применяет кодирование RS и сверточное перемежение. Функция convertBytesToMTuplesDVBCDemo преобразует 8-битные байты в 6-битные фрагменты для 64-QAM модулятора. Это применяет фильтр приподнятого косинуса квадратного корня с 8x сверхдискретизировавший к потоку данных после модуляции. Код для этого компонента содержится в DVBCTransmitter.m.

Канал

Пример передает сигналы через канал AWGN. Это использует comm.AWGNChannel.

Основополосная обработка приемника

Этот раздел демодулирует полученные символы и преобразует 6-битные фрагменты в байты с помощью функции convertMTuplesToBytesDVBCDemo. Поскольку операция фильтрации вводит задержку, пример синхронизирует полученные байты с пакетным ребром с помощью Системного объекта задержки, hPacketSync. Обратите внимание на то, что задержка interleaver является кратной пакетному размеру, таким образом синхронизирование с пакетным ребром достаточно. Приемник устраняет чередование синхронизируемых с пакетом байтов и декодирует использование Системного объекта декодера RS. Поскольку пример использует один генератор псевдошумовой последовательности, он синхронизирует декодируемые данные с ребром сверхкадра перед дерандомизацией. Пример показывает переданный и полученный спектр сигнала канала. Наконец, это сравнивает переданные биты и полученные биты, а также вход модулятора и демодулятор выход, чтобы получить частоты ошибок по битам. Код для этого компонента содержится в DVBCReceiver.m.

Расчеты BER

Этот компонент сравнивает полученные, декодируемые биты и сравнивает тех с переданными битами для того, чтобы вычислить немного коэффициента ошибок. Код для этого компонента содержится в DVBCBER.m.

Визуализация

Дополнительное инструментирование обеспечивает визуализацию. Код для этого компонента содержится в DVBCScopes.m.

Выполнение системы под тестом

Мы первый показ система под тестом с одним EbNo и визуализацией, включенной для того, чтобы проверить, что это работает правильно.

totalErrors = 100;
totalBits = 1e6;
EbNo = 16.5;
useScopes = true;
useCodegen = false;
compileIt = false;
if compileIt
    % Make EbNo input var-size row vector (max length = 100)
    codegen runDVBCSystemUnderTest -report -args {coder.Constant(useScopes),coder.Constant(prmDVBC), coder.Constant(num), 1, coder.typeof(EbNo,[1 100],[false true]), 1, 1}
end
if useCodegen
    % Constant inputs do not appear in call to generated code version
    [berEnd2End, berDemod] = runDVBCSystemUnderTest_mex(useScopes, prmDVBC, num, sigPower, EbNo, totalErrors, totalBits);
else
    [berEnd2End, berDemod] = runDVBCSystemUnderTest(useScopes, prmDVBC, num, sigPower, EbNo, totalErrors, totalBits);
end

Кривые BER

Затем мы повторно выполняем систему под тестом с вектором из EbNo и визуализация, выключенная, чтобы сгенерировать кривую BER.

Метод шага объектов измерения коэффициента ошибок, berEnd2End и berDemod, выводит вектор 3 на 1, содержащий обновления измеренного значения BER, количество ошибок и общее количество битных передач. Отобразите BER при выходе демодулятора вместе со сквозным BER.

EbNo = 11.5:0.5:14.5;
useScopes = false;
useCodegen = false;
compileIt = false;
if compileIt
    % Make EbNo input var-size row vector (max length = 100)
    codegen runDVBCSystemUnderTest -report -args {coder.Constant(useScopes),coder.Constant(prmDVBC), coder.Constant(num), 1, coder.typeof(EbNo,[1 100],[false true]), 1, 1}
end
if useCodegen
    % Constant inputs do not appear in call to generated code version
    [berEnd2End, berDemod] = runDVBCSystemUnderTest_mex(useScopes, prmDVBC, num, sigPower, EbNo, totalErrors, totalBits)
else
    [berEnd2End, berDemod] = runDVBCSystemUnderTest(useScopes, prmDVBC, num, sigPower, EbNo, totalErrors, totalBits)
end
%
plotDVBCResults(EbNo, berEnd2End, berDemod);
berEnd2End =

    0.0193
    0.0139
    0.0075
    0.0038
    0.0006
    0.0001
    0.0000


berDemod =

    0.0174
    0.0133
    0.0083
    0.0066
    0.0041
    0.0028
    0.0018

Сводные данные

Этот пример использовал несколько Системных объектов, чтобы симулировать часть системы связи DVB-C по каналу AWGN. Это показало, как смоделировать несколько частей системы DVB-C, таких как рандомизация, кодирование и перемежение. Пример также использовал Системные объекты задержки, чтобы синхронизировать передатчик и приемник. Производительность системы была измерена с помощью кривых BER, полученных с объектами системы измерения коэффициента ошибок.

Приложение

Этот пример использует следующий скрипт и функцию помощника:

Выбранная библиография

  1. EN 300 429 V1.2.1 Стандарта ETSI: Цифровое телевидение (DVB); Структурируя структуру, кодирование канала и модуляцию для кабельных систем, Европейского института стандартизации электросвязи, Вальбонн, Франция, 1998.