В этом примере показано, как создать физический нисходящий канал совместно использованный канал (PDSCH). Это также демонстрирует, как сгенерировать транспортный блок, выполнить нисходящий канал совместно использованный канал (DL-SCH), кодирующий, чтобы создать кодовую комбинацию, выполнить физическое кодирование канала, чтобы создать физический канал и сопоставить комплексные символы с сеткой ресурса.
Задайте настройки всей ячейки как поля в структуре enb
. Многие функции, используемые в этом примере, требуют подмножества этих настроек.
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. Каждая кодовая комбинация может модулироваться с различной схемой. Используйте массив ячеек, чтобы указать на схему модуляции каждой кодовой комбинации.
Определите, как PDSCH сопоставлен с элементами ресурса путем выделения физических блоков ресурса (PRBs). Вектор-столбец, содержащий индексы выделенного PRBs PDSCH, требуется. В этом примере примите полное выделение; все блоки ресурса выделяются PDSCH. Задайте это полное распределение ресурсов подкадра с помощью вектор-столбца.
prbs = (0:enb.NDLRB-1).';
Выделение задано в prbs
основано на нуле. В этом случае примите, что оба паза в подкадре совместно используют то же распределение ресурсов. Чтобы иметь различные выделения для каждого паза, задайте матрицу 2D столбца, где каждый столбец относится к каждому пазу в подкадре.
Сгенерируйте индексы 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, Приложения A.3.3 и A.3.4. Если вы знаете закодированный транспортный размер блока, вычисляете полезную нагрузку DL-SCH, использующую правила в TS 36.101, Приложение A.2.1.2, названное, "Определение размера полезной нагрузки", с целевым уровнем кода, , равный , и количество битов на подкадр, данный codedTrBlkSize
. Определите размер полезной нагрузки, , таким образом, что получившийся уровень кодирования максимально близок к желаемому уровню кодирования, , для данного закодированного транспортного размера блока, , как показано в следующем уравнении.
В этом примере вычислил размер полезной нагрузки для 6 RBS, использование предыдущего уравнения является A=152. Это - значение, в котором минимизирована ошибка между желаемым уровнем кода и фактическим уровнем кода.
Размер полезной нагрузки, , должен быть один из определенного набора для определенного количества блоков ресурса, данных в TS 36.213, Таблица 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, Приложения A.3.3 и A.3.4, названного "Ссылочные Каналы Измерения для требований к производительности PDSCH". Несмотря на преимущество просто способности считать значения из таблиц, пропускная способность канала и выделения PDSCH ограничиваются доступным RMCs. Например, можно использовать Таблицу A.3.3.2.2-1, названную "Зафиксированный Ссылочный Канал четыре порта антенны".
Чтобы сгенерировать PDSCH для пропускной способности канала на 1.4 МГц, передача с четырьмя антеннами с модуляцией QPSK и уровень кодирования, используют подсвеченные строки, названные "информационная Полезная нагрузка Бита", чтобы найти размер полезной нагрузки DL-SCH для каждого подкадра, и "Бинарные Биты Канала", найти закодированный транспортный размер блока для каждого подкадра.
Задайте транспортный блок информационных битов, с помощью размера полезной нагрузки, transportBlkSize
, вычисленный на последнем шаге.
dlschTransportBlk = round(rand(1,152));
Создайте полезную нагрузку PDSCH. Чтобы закодировать транспортные биты блока в одну кодовую комбинацию, вызовите lteDLSCH
функция для настроек всей ячейки и настройки передачи канала. Этот процесс включает вычисление CRC, сегментацию блока кода и вставку CRC, турбокодирование, соответствие уровня и конкатенацию блока кода.
codeword = lteDLSCH(enb,pdsch,codedTrBlkSize,dlschTransportBlk);
Сгенерируйте символы комплекса PDSCH путем вызова ltePDSCH
функция для заданных настроек всей ячейки, настройки передачи канала и кодовой комбинации. Эта функция применяет скремблирование, модуляцию, отображение слоя и предварительное кодирование операций с закодированным транспортным блоком.
pdschSymbols = ltePDSCH(enb,pdsch,codeword);
Получившаяся матрица, pdschSymbols
, имеет четыре столбца. Каждый столбец содержит комплексные символы, чтобы сопоставить с каждым портом антенны.
Сгенерируйте сетку ресурса подкадра путем вызова 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