Этот пример показывает, как смоделировать область управления, используемую в подкадре нисходящего канала LTE и его структуре канала. Это демонстрирует, как вы создаете сообщение DCI, кодируете его, создаете PDCCH и сопоставляете его с сеткой ресурса.
Настройте настройки всей ячейки. Создайте структуру и задайте настройки всей ячейки как ее поля.
enb.NDLRB = 9; enb.CyclicPrefix = 'Normal'; enb.PHICHDuration = 'Normal'; enb.CFI = 3; enb.Ng = 'Sixth'; enb.CellRefP = 1; enb.NCellID = 1; enb.NSubframe = 0; enb.DuplexMode = 'FDD';
Многие функции, используемые в этом примере, требуют подмножества предыдущих заданных настроек.
Настройте структуру сообщения DCI.
dci.NDLRB = enb.NDLRB; dci.DCIFormat = 'Format1A'; dci.Allocation.RIV = 26; dci.DuplexMode = 'FDD'; dci.NTxAnts = 1;
Сообщение DCI содержит следующие параметры.
NDLRB
— количество нисходящих блоков ресурса (RBS)
DCIFormat
— Формат DCI, выбранный из обсужденных в Форматах сообщения DCI
Allocation.RIV
— значение индикации ресурса (RIV)
DuplexMode
— тип структуры кадра передачи, 'FDD'
для типа 1 структуры кадра или 'TDD'
для типа 2 структуры кадра
NTxAnts
— количество антенн передачи
RIV указывает на непрерывные выделения RB для UE. UE использует RIV, чтобы определить первый виртуальный RB и продолжительность непрерывного выделения RBS. В этом примере установка RIV 26 соответствует полному присвоению пропускной способности.
Сгенерируйте сообщение DCI. Для этого вызовите функцию lteDCI
. Можно сопоставить это сгенерированное сообщение с PDCCH.
[dciMessage,dciMessageBits] = lteDCI(enb,dci);
Функция lteDCI
возвращает структуру, dciMessage
, и вектор, содержащий биты сообщения DCI, dciMessageBits
. Оба выходных параметров содержат ту же информацию, но идеальны в различных целях. Выходная структура более читаема, в то время как сериализированное сообщение DCI является более подходящим форматом, чтобы отправить к этапу кодирования канала.
Настройте конфигурационную структуру PDCCH. Этапы кодирования канала требуют параметров, показанных в следующем списке.
количество нисходящих блоков ресурса (RBS)
Маска UE-specific (16-битное значение C-RNTI)
Формат PDCCH
pdcch.RNTI = 100; pdcch.PDCCHFormat = 0;
Канал кодирует биты сообщения DCI. Этот процесс состоит из сложения прикрепления CRC, сверточного кодирования и уровня, соответствующего согласно способности формата PDCCH.
codedDciBits = lteDCIEncode(pdcch,dciMessageBits);
Итоговый вектор, codedDciBits
, имеет 72 элемента.
Сгенерируйте биты PDCCH. Закодированные сообщения DCI затем присвоены CCEs, как обсуждено в Соответствии с PDCCHs к Позициям CCE. Способность области управления зависит от пропускной способности, CFI, количества портов антенны и групп HICH. Общее количество ресурсов, доступных для PDCCH, может быть вычислено с помощью функции ltePDCCHInfo
.
pdcchInfo = ltePDCCHInfo(enb);
Эта функция возвращает структуру, pdcchInfo
, который содержит ресурсы, доступные PDCCH в различных модулях (один на поле): биты, CCEs, REs и REGs.
Общее количество битов, доступных в области PDCCH, может быть найдено в поле pdcchInfo.MTot
. Это позволяет вектору быть созданным с соответствующим числом элементов.
pdcchBits = -1*ones(1,pdcchInfo.MTot);
Не все доступные биты в области PDCCH обязательно используются. Поэтому в соответствии с соглашением в продукте LTE Toolbox™, набор неиспользованные биты к −1. Поскольку все элементы были инициализированы в pdcchBits
к −1, это указывает, что первоначально все биты не использованы. Теперь элементы codedDciBits
могут быть сопоставлены с соответствующими местоположениями в pdcchBits
.
Вычислите индексы битов кандидата. Для этого вызовите функцию ltePDCCHSpace
. Только подмножество всех битов в pdcchBits
может использоваться, которые называются битами кандидата.
candidates = ltePDCCHSpace(enb,pdcch,{'bits','1based'});
Эта функция возвращает матрицу 2D столбца. Каждая строка содержит доступное местоположение кандидата для настроек всей ячейки, обеспеченных enb
и конфигурационной структурой PDCCH pdcch
. Первые и вторые столбцы содержат индексы первых и последних местоположений каждого кандидата. В этом примере индексы на основе 1 и относятся вдребезги. Следовательно, они могут использоваться к местоположениям доступа в pdcchBits
.
Используйте первого доступного кандидата, который сопоставит закодированные биты DCI.
pdcchBits (candidates(1,1):candidates(1,2)) = codedDciBits;
Векторный pdcchBits
имеет 736 элементов. 72 бита codedDciBits
сопоставлены с выбранным кандидатом в pdcchBits
. Поэтому из 736 элементов, 72 примет 0 и 1 значение, в то время как остальные остаются установленными в −1. Функция ltePDCCH
, который используется, чтобы сгенерировать модулируемые комплексом символы, интерпретирует эти местоположения как неиспользованные и только рассмотрит тех, которые содержат 1 с и 0s.
Используйте ltePDCCH
, чтобы сгенерировать символы комплекса PDCCH. Можно сгенерировать символы комплекса PDCCH от набора битов, используемых в pdcchBits
, значения не набор к −1. Функция выполняет необходимое скремблирование, модуляцию QPSK, отображение слоя и предварительное кодирование операций. С тех пор существует символ двух битов за QPSK, 368 символов сгенерированы. Занятые биты приводят к 36 ненулевым символам QPSK.
pdcchSymbols = ltePDCCH(enb, pdcchBits); size(pdcchSymbols)
ans = 1×2
368 1
size(find(pdcchSymbols))
ans = 1×2
36 1
Используйте ltePDCCHIndices
, чтобы сгенерировать PDCCH отображение индексов. Можно использовать эти индексы, чтобы сопоставить комплексные числа в pdcchSymbols
к сетке ресурса подкадра.
pdcchIndices = ltePDCCHIndices(enb,{'1based'});
size(pdcchIndices)
ans = 1×2
368 1
Эта функция возвращает вектор-столбец. Строки содержат индексы на основе 1 в линейной форме для отображения символов PDCCH к сетке ресурса подкадра.
Сопоставьте PDCCH с сеткой ресурса. Можно легко сопоставить комплексные символы PDCCH с сеткой ресурса для каждого порта антенны.
Используйте lteDLResourceGrid
, чтобы создать пустую сетку ресурса.
Сопоставьте pdcchSymbols
с индексными местоположениями pdcchIndices
сетки ресурса subframe
.
subframe = lteDLResourceGrid(enb); subframe(pdcchIndices) = pdcchSymbols;
lteCRCDecode
| lteCRCEncode
| lteConvolutionalDecode
| lteConvolutionalEncode
| lteDCI
| lteDCIEncode
| lteDLDeprecode
| lteDLPrecode
| lteLayerDemap
| lteLayerMap
| ltePDCCH
| ltePDCCHDecode
| ltePDCCHDeinterleave
| ltePDCCHIndices
| ltePDCCHInfo
| ltePDCCHInterleave
| ltePDCCHPRBS
| ltePDCCHSpace
| lteRateMatchConvolutional
| lteRateRecoverConvolutional
| lteSymbolDemodulate
| lteSymbolModulate