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