Цифровое телевидение - кабель (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. Это использует коммуникацию. AWGNChannel.

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

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

Для просмотра документации необходимо авторизоваться на сайте