Этот пример показывает, как создать физический нисходящий общий канал (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 сопоставляется с элементами ресурса, путем выделения блоков физических ресурсов (PRB). Требуется вектор-столбец, содержащая индексы назначенных PDSCH PRB. В этом примере примите полное распределение; все ресурсные блоки выделяются PDSCH. Задайте это полное выделение ресурсов подкадров с помощью вектора-столбца.
prbs = (0:enb.NDLRB-1).';
Распределение, заданное в prbs
является нулевым. В этом случае предположим, что оба пазов в подкадре имеют одно и то же распределение ресурсов. Чтобы иметь различные распределения для каждого паза, задайте матрицу с двумя столбцами, где каждый столбец относится к каждому пазу в подкадре.
Сгенерируйте индексы 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 RB, вычисленный с использованием предыдущего уравнения, является A = 152. Это значение, при котором ошибка между желаемой частотой кода и фактической частотой кода минимизируется.
Размер полезной нагрузки, , должен быть одним из конкретных наборов для определенного количества ресурсных блоков, приведенных в TS 36.213, таблица 7.1.7.2.1 1 или 7.1.7.2.2 1 (в разделе 7.1.7.2). Эти таблицы представлены lteTBS
функция. В этом примере размер полезной нагрузки для 6 RB, который минимизирует ошибку между желаемой скоростью кода и фактической скоростью кода, является . Это значение было выбрано из таблицы 7.1.7.2.2 1. Поэтому размер полезной нагрузки, transportBlkSize
, равен 152.
В качестве альтернативы можно определить подходящий размер полезной нагрузки и закодированный размер транспортного блока из таблиц в TS 36.101, приложение A.3.3 и A.3.4, озаглавленных «Эталонные каналы измерения для требований к эффективности PDSCH». Несмотря на преимущество простого чтения значений из таблиц, полосы пропускания канала и распределения PDSCH ограничены доступными RMC. Например, можно использовать Таблицу A.3.3.2.2-1, озаглавленную «Четыре порта антенны Фиксированного Опорного Канала».
Чтобы сгенерировать PDSCH для 1.4MHz полосы пропускания канала, передачи с четырьмя антеннами с модуляцией 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;
lteCodeBlockDesegment
| lteCodeBlockSegment
| lteCRCDecode
| lteCRCEncode
| lteDLDeprecode
| lteDLPrecode
| lteDLResourceGrid
| lteDLSCH
| lteDLSCHDecode
| lteDLSCHInfo
| lteLayerDemap
| lteLayerMap
| ltePDSCH
| ltePDSCHIndices
| ltePDSCHPRBS
| lteRateMatchTurbo
| lteRateRecoverTurbo
| lteTurboDecode
| lteTurboEncode