Моделируйте DL-SCH и PDSCH

Этот пример показывает, как создать физический нисходящий общий канал (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, под названием «Определение размера полезной нагрузки», с целевой скоростью кода, R, равный 1/3, и количество бит в каждом подкадре, заданное codedTrBlkSize. Определите размер полезной нагрузки, Aтаким образом, чтобы результирующая скорость кодирования была максимально близка к желаемой скорости кодирования, R, для заданного размера кодированного транспортного блока, Nch, как показано на следующем уравнении.

min|R-(A+24)/Nch|

В этом примере размер полезной нагрузки для 6 RB, вычисленный с использованием предыдущего уравнения, является A = 152. Это значение, при котором ошибка между желаемой частотой кода и фактической частотой кода минимизируется.

Размер полезной нагрузки, A, должен быть одним из конкретных наборов для определенного количества ресурсных блоков, приведенных в TS 36.213, таблица 7.1.7.2.1 1 или 7.1.7.2.2 1 (в разделе 7.1.7.2). Эти таблицы представлены lteTBS функция. В этом примере размер полезной нагрузки для 6 RB, который минимизирует ошибку между желаемой скоростью кода и фактической скоростью кода, является A=152. Это значение было выбрано из таблицы 7.1.7.2.2 1. Поэтому размер полезной нагрузки, transportBlkSize, равен 152.

Альтернативный метод: используйте RMCs, чтобы определить размеры транспортных блоков

В качестве альтернативы можно определить подходящий размер полезной нагрузки и закодированный размер транспортного блока из таблиц в TS 36.101, приложение A.3.3 и A.3.4, озаглавленных «Эталонные каналы измерения для требований к эффективности PDSCH». Несмотря на преимущество простого чтения значений из таблиц, полосы пропускания канала и распределения PDSCH ограничены доступными RMC. Например, можно использовать Таблицу A.3.3.2.2-1, озаглавленную «Четыре порта антенны Фиксированного Опорного Канала».

Чтобы сгенерировать PDSCH для 1.4MHz полосы пропускания канала, передачи с четырьмя антеннами с модуляцией QPSK и скоростью кодирования, используйте подсвеченные строки, названные «Полезная нагрузка информационного бита», чтобы найти размер полезной нагрузки DL-SCH для каждого субкадра и «Двоичные биты канала», чтобы

ParameterUnitValueReferenceChannelR.12FDDR.13FDDR.14FDDR.14-1FDDR.14-2FDDR.36FDDChannelbandwidthMHz1.41010101010Allocatedresourceblocks650506350AllocatedsubframesperRadioFrame999889ModulationQPSKQPSK16QAM16QAM16QAM64QAMTargetCodingRate1/31/31/21/21/21/2InformationBitPayloadForSub-Frames1,2,3,4,6,7,8,and9Bits408439212960154474418336ForSub-Frame5Bitsn/an/an/an/an/an/aForSub-Frame0Bits152326411448n/an/a18336NumberofCodeBlocksForSub-Frames1,2,3,4,6,7,8,and9113113ForSub-Frame5n/an/an/an/an/an/aForSub-Frame0112n/an/a3BinaryChannelBitsperSub-FrameForSub-Frames1,2,3,4,6,7,8,and9Bits124812800256003072153638400ForSub-Frame5Bitsn/an/an/an/an/an/aForSub-Frame0Bits4801203224064n/an/a36096Max.Throughputaveragedover1frameMbps0.3423.87611.5131.2350.59516.502UECategory112112

Задайте транспортный блок информационных бит, используя размер полезной нагрузки, 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;

См. также

| | | | | | | | | | | | | | | | | |

Похожие темы