Этот пример показывает, как создать физический нисходящий канал совместно использованный канал (PDSCH). Это демонстрирует, как сгенерировать транспортный блок, выполнить нисходящий канал совместно использованный канал (DL-SCH), кодирующий, чтобы создать кодовую комбинацию, выполнить физическое кодирование канала, чтобы создать физический канал и сопоставить комплексные символы с сеткой ресурса.
Настройте настройки всей ячейки. Создайте структуру и задайте настройки всей ячейки как ее поля.
enb.NDLRB = 9; enb.CyclicPrefix = 'Normal'; enb.PHICHDuration = 'Normal'; enb.CFI = 3; enb.Ng = 'Sixth'; enb.CellRefP = 4; enb.NCellID = 1; enb.NSubframe = 0; enb.DuplexMode = 'FDD';
Многие функции, используемые в этом примере, требуют подмножества предыдущих заданных настроек.
Сконфигурируйте PDSCH. В дополнение к настройкам всей ячейки, заданным в enb
, необходимо задать другие параметры, связанные с модуляцией и настройкой передачи канала, pdsch
, такие как радиосеть временный идентификатор (RNTI), чтобы сгенерировать PDSCH.
pdsch.NTxAnts = 4; pdsch.NLayers = 4; pdsch.TxScheme = 'TxDiversity'; pdsch.Modulation = {'QPSK'}; pdsch.RV = 0; pdsch.RNTI = 1;
В этом примере вы используете одну кодовую комбинацию, чтобы сформировать символы PDSCH. Однако в LTE, до двух кодовых комбинаций могут быть объединены, чтобы сформировать PDSCH. Каждая кодовая комбинация может модулироваться с различной схемой. Вы используете массив ячеек, чтобы указать на схему модуляции каждой кодовой комбинации.
Выделите физические блоки ресурса (PRBs). Это выделение требуется, чтобы определять, с которыми элементами ресурса сопоставлен PDSCH. Вектор-столбец, содержащий индексы выделенного PRBs PDSCH, требуется. В этом примере примите полное выделение; все блоки ресурса выделяются PDSCH. Задайте это полное распределение ресурсов подкадра с помощью вектор-столбца.
prbs = (0:enb.NDLRB-1).';
Выделение, заданное в prbs
, на основе 0. В этом случае примите, что оба слота в подкадре совместно используют то же распределение ресурсов. Чтобы иметь различные выделения для каждого слота, задайте две матрицы столбца, где каждый столбец относится к каждому слоту в подкадре.
Сгенерируйте индексы PDSCH. Для этого вызовите функциональный ltePDSCHIndices
. Обеспечьте структуру настроек всей ячейки, enb
, настройку передачи канала, pdsch
, и физическое выделение блока ресурса, prbs
, как входные параметры.
[pdschIndices,pdschIndInfo] = ltePDSCHIndices(enb,pdsch,prbs,{'1based'});
Первый вывод, pdschIndices
, задает индексы PDSCH. Второй вывод, pdschIndInfo
, предоставляет дополнительную информацию, связанную со способностью PDSCH.
Определите полезную нагрузку DL-SCH, и закодировал транспортный размер блока. Эти элементы требуются для создания полезной нагрузки PDSCH из-за фрагмента соответствия уровня транспортного блочного кодирования DL-SCH. Существуют следующие два метода определения закодированного транспортного размера блока и размера полезной нагрузки DL-SCH.
Используя индексный вывод информации PDSCH, как показано в этом примере
Используя ссылочный канал измерения (RMC) транспортируют размеры блока как руководство
Закодированный транспортный размер блока является одним из полей индексного вывода информации PDSCH, pdschIndInfo
.
codedTrBlkSize = pdschIndInfo.G;
В этом примере codedTrBlkSize
480. Также вы могли считать закодированный транспортный размер блока для данной схемы модуляции, выделения PRB и количества антенн из таблиц RMC в TS 36.101 [1], Приложения A.3.3 и A.3.4. Если вы знаете закодированный транспортный размер блока, вычисляете полезную нагрузку DL-SCH, использующую правила в TS 36.101 [1], Приложение A.2.1.2, названное, "Определение размера полезной нагрузки", с целевым уровнем кода, , равный , и количество битов на подкадр, данный codedTrBlkSize
. Определите размер полезной нагрузки, , таким образом, что получившийся уровень кодирования максимально близок к желаемому уровню кодирования, , для данного закодированного транспортного размера блока, , как показано в следующем уравнении.
В этом примере вычислил размер полезной нагрузки для 6 RBS, использование предыдущего уравнения является A=152. Это - значение, в котором минимизирована ошибка между желаемым уровнем кода и фактическим уровнем кода.
Размер полезной нагрузки, , должен быть один из определенного набора для определенного количества блоков ресурса, данных в TS 36.213 [2], Таблица 7.1.7.2.1 1 или 7.1.7.2.2 1 (в Разделе 7.1.7.2). Эти таблицы представлены функцией lteTBS
. В этом примере размер полезной нагрузки для 6 RBS, которые минимизируют ошибку между желаемым уровнем кода и фактическим уровнем кода, . Это значение было выбрано из таблицы 7.1.7.2.2 1. Поэтому размер полезной нагрузки, transportBlkSize
, равняется 152.
Также вы могли определить подходящий размер полезной нагрузки и закодировали транспортный размер блока из таблиц в TS 36.101 [1], Приложения A.3.3 и A.3.4, названного "Ссылочные Каналы Измерения для требований к производительности PDSCH". Несмотря на преимущество просто способности считать значения из таблиц, пропускная способность канала и выделения PDSCH ограничиваются доступным RMCs. Например, можно использовать Таблицу A.3.3.2.2-1, названную "Зафиксированный Ссылочный Канал четыре порта антенны".
Чтобы сгенерировать PDSCH для пропускной способности канала на 1.4 МГц, передача с 4 антеннами с модуляцией QPSK и уровень кодирования, используют подсвеченные строки, названные "информационная Полезная нагрузка Бита", чтобы найти размер полезной нагрузки DL-SCH для каждого подкадра, и "Бинарные Биты Канала", найти закодированный транспортный размер блока для каждого подкадра.
Задайте транспортный блок информационных битов, с помощью размера полезной нагрузки, transportBlkSize
, вычисленного на последнем шаге.
dlschTransportBlk = round(rand(1,152));
Создайте полезную нагрузку PDSCH. Чтобы закодировать транспортные биты блока в одну кодовую комбинацию, вызовите функциональный lteDLSCH
. Этот процесс включает вычисление CRC, сегментацию блока кода и вставку CRC, турбокодирование, соответствие уровня и конкатенацию блока кода. Используйте настройки всей ячейки, enb
, и параметры PDSCH, pdsch
, заданный на предыдущих шагах.
codeword = lteDLSCH(enb,pdsch,codedTrBlkSize,dlschTransportBlk);
Сгенерируйте символы комплекса PDSCH. Для этого вызовите функцию ltePDSCH
. Этот процесс применяет скремблирование, модуляцию, отображение слоя и предварительное кодирование операций к закодированному транспортному блоку. Используйте настройки всей ячейки, enb
, и параметры PDSCH, pdsch
, заданный на предыдущих шагах.
pdschSymbols = ltePDSCH(enb,pdsch,codeword);
Получившаяся матрица, pdschSymbols
, имеет 4 столбца. Каждый столбец содержит комплексные символы, чтобы сопоставить с каждым портом антенны.
Сгенерируйте сетку ресурса подкадра. Для этого вызовите функциональный lteDLResourceGrid
. Эта функция создает пустую сетку ресурса для одного подкадра.
subframe = lteDLResourceGrid(enb);
Сопоставьте символы PDSCH с сеткой ресурса, с помощью сгенерированных индексов.
subframe(pdschIndices) = pdschSymbols;
lteCRCDecode
| lteCRCEncode
| lteCodeBlockDesegment
| lteCodeBlockSegment
| lteDLDeprecode
| lteDLPrecode
| lteDLResourceGrid
| lteDLSCH
| lteDLSCHDecode
| lteDLSCHInfo
| lteLayerDemap
| lteLayerMap
| ltePDSCH
| ltePDSCHIndices
| ltePDSCHPRBS
| lteRateMatchTurbo
| lteRateRecoverTurbo
| lteTurboDecode
| lteTurboEncode