Этот пример показывает, как моделировать область управления, используемую в подкадре нисходящей линии связи LTE, и его структуру канала. Он демонстрирует, как создается сообщение DCI, кодируется, создается PDCCH и сопоставляется с сеткой ресурсов.
Укажите параметры для всей ячейки в качестве полей в структуре enb. Многие функции, используемые в этом примере, требуют подмножества этих настроек.
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 - количество блоков ресурсов нисходящей линии связи (RB)
DCIFormat - формат DCI, выбранный из тех, которые обсуждаются в форматах сообщений DCI
Allocation.RIV - значение индикации ресурса (RIV)
DuplexMode - тип структуры кадра передачи, 'FDD' для типа структуры фрейма 1 или 'TDD' для каркасной структуры типа 2
NTxAnts - количество передающих антенн
RIV указывает смежные распределения RB для UE. UE использует RIV для определения первого виртуального RB и длины непрерывного выделения RB. В этом примере установка RIV 26 соответствует назначению полной полосы пропускания.
Создание сообщения DCI путем вызова lteDCI функция. Это сгенерированное сообщение можно сопоставить с PDCCH.
[dciMessage,dciMessageBits] = lteDCI(enb,dci);
lteDCI функция возвращает структуру, dciMessageи вектор, содержащий биты сообщения DCI, dciMessageBits. Оба выхода содержат одинаковую информацию, но лучше всего подходят для разных целей. Структура вывода является более читаемой, в то время как сериализованное сообщение DCI находится в более подходящем формате для передачи на этап канального кодирования.
Настройте структуру конфигурации PDCCH. Этапы канального кодирования требуют следующих параметров:
количество блоков ресурсов нисходящей линии связи (RB)
Пользовательская маска (16-битное значение C-RNTI)
Формат PDCCH
pdcch.RNTI = 100; pdcch.PDCCHFormat = 0;
Канал кодирует биты сообщения DCI. Этот процесс состоит из добавления вложения CRC, сверточного кодирования и согласования скорости в соответствии с пропускной способностью формата PDCCH.
codedDciBits = lteDCIEncode(pdcch,dciMessageBits);
Результирующий вектор, codedDciBits, имеет 72 элемента.
Создание битов PDCCH. Кодированные сообщения DCI затем назначаются CCE, как описано в разделе Согласование PDCCH с позициями CCE. Пропускная способность области управления зависит от полосы пропускания, CFI, количества антенных портов и групп HICH. Можно вычислить общее количество ресурсов, доступных для PDCCH, используя ltePDCCHInfo функция.
pdcchInfo = ltePDCCHInfo(enb);
Эта функция возвращает структуру, pdcchInfo, который содержит ресурсы, доступные для PDCCH в различных единицах (по одному на поле): битах, CCE, RE и REG.
Общее количество битов, доступных в области 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'});Эта функция возвращает матрицу из двух столбцов. Каждая строка содержит доступное местоположение кандидата для настроек для всей соты, предоставляемых 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 и 0.
Для генерации символов PDCCH используйте ltePDCCH функция. Можно генерировать комплексные символы 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
Для генерации индексов отображения PDCCH используйте ltePDCCHIndices функция. Эти индексы можно использовать для отображения комплексных значений в 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;
lteConvolutionalDecode | lteConvolutionalEncode | lteCRCDecode | lteCRCEncode | lteDCI | lteDCIEncode | lteDLDeprecode | lteDLPrecode | lteLayerDemap | lteLayerMap | ltePDCCH | ltePDCCHDecode | ltePDCCHDeinterleave | ltePDCCHIndices | ltePDCCHInfo | ltePDCCHInterleave | ltePDCCHPRBS | ltePDCCHSpace | lteRateMatchConvolutional | lteRateRecoverConvolutional | lteSymbolDemodulate | lteSymbolModulate