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