В этом примере показано, как построить физический общий канал нисходящей линии связи (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). Требуется вектор столбца, содержащий индексы выделенных PRB PDSCH. В этом примере следует принять полное распределение; все блоки ресурсов назначаются 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. Определите размер полезной нагрузки А , чтобы результирующая скорость кодирования была как можно ближе к требуемой скорости кодирования для данного размера кодированного транспортного блока , как показано в следующем уравнении.
/Nch |
В этом примере размер полезной нагрузки для 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, который минимизирует ошибку между требуемой скоростью кодирования и фактической скоростью кодирования, составляет 152. Это значение было выбрано из таблицы 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