exponenta event banner

Цифровое видеовещание - кабельное (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)

  • Проиллюстрировать использование ключевых объектов 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 compableIt значение true, чтобы создать созданный код.

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

В этом примере моделируется связь между оператором кабеля и абонентской приставкой клиента. Модель для этой связи содержится в функции с именем runDVBCSystemUnderTest. Контур обработки данных разделен на шесть основных частей. Объект System использовался для моделирования каждого из этих шести компонентов в этой связи. Эти объекты:

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-кратной избыточной выборкой. Код этого компонента содержится в DVBCTrmitter.m.

Канал

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

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

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