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

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

Введение

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

Цель этого примера состоит в том, чтобы:

  • Моделируйте основные фрагменты возможного проекта передачи/приема (работающего в 64-QAM режиме с MPEG-2 Transport Packet data)

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

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

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

  • Иллюстрируйте создание тестовой обвязки, которые могут поддерживать переменное количество тестовых запусков. В этом случае мы используем эту поддержку для поддержки одного режима, где задан только один EbNo, и наблюдаем спектры и рассеянные графики. Мы также поддерживаем режим, в котором задано несколько 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 на true in порядка, чтобы создать сгенерированный код.

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

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

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-loop вокруг тестируемой системы, чтобы обработать фиксированное количество супер систем координат. Кроме того, можно использовать цикл while-loop, чтобы управлять длиной симуляции на основе количества моделируемых ошибок и переданных бит. Мы сделали последнее, нацелив количество ошибок на 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. Он применяет квадратный корень фильтр приподнятого косинуса с 8-кратной избыточной дискретизацией к потоку данных после модуляции. Код для этого компонента содержится в DVBCTransmitter.m

Канал

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

Обработка основной полосы частот приемника

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

Расчеты

Этот компонент сравнивает принятые декодированные биты и сравнивает биты с переданными битами в порядок для вычисления частоты битовой ошибки. Код для этого компонента содержится в 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. ETSI Standard EN 300 429 V1.2.1: цифровое видеовещание (DVB); Структура системы координат, канальное кодирование и модуляция для кабельных систем, Европейский институт телекоммуникационных стандартов, Вальбонна, Франция, 1998 год.

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