Этот пример описывает декодирование поиска вслепую физического нисходящего канала управления (PDCCH) для 5G Новая система Радиосвязи. Основываясь на примере, Моделируя Нисходящую Управляющую информацию, этот пример вводит концепции набора ресурсов управления (CORESET) и пространств поиска, их типовой спецификации и показывает, как экземпляр PDCCH сопоставлен с одним из нескольких кандидатов в пространстве поиска. Чтобы восстановить переданную управляющую информацию в получателе, пример выполняет поиск вслепую на множестве кандидатов.
Установите системные параметры, соответствующие поставщику услуг, CORESET, набору пространства поиска и экземпляру PDCCH соответственно.
rng(111); % Set RNG state for repeatability % Carrier configuration carrier = nrCarrierConfig; carrier.NCellID = 2; % Cell identity carrier.SubcarrierSpacing = 30; % Carrier/BWP Subcarrier spacing carrier.CyclicPrefix = 'normal'; % Cyclic prefix carrier.NSlot = 0; % Slot counter carrier.NFrame = 0; % Frame counter carrier.NStartGrid = 10; % Carrier offset carrier.NSizeGrid = 48; % Size of carrier in RB % CORESET configuration coreset = nrCORESETConfig; coreset.CORESETID = 1; % CORESET ID (0...11) coreset.FrequencyResources = ones(1,4); % 6 RB sized coreset.Duration = 1; % CORESET symbol duration (1,2,3) coreset.CCEREGMapping = 'interleaved'; % CORESET Mapping coreset.REGBundleSize = 2; % L (2,6) or (3,6) coreset.InterleaverSize = 2; % R (2,3,6) coreset.ShiftIndex = carrier.NCellID; % default to NCellID % Search space configuration ss = nrSearchSpaceConfig; ss.CORESETID = 1; % Associated CORESET ID (0...11) ss.SearchSpaceType = 'ue'; % 'ue', 'common' ss.StartSymbolWithinSlot = 1; % Starting symbol in slot ss.SlotPeriodAndOffset = [1 0]; % Search space period and offset ss.Duration = 1; % Search space duration in slots ss.NumCandidates = [4 2 1 0 0]; % For (1,2,4,8,16) levels respectively % PDCCH configuration pdcch = nrPDCCHConfig; pdcch.NStartBWP = 10; % BWP offset wrt CRB 0 pdcch.NSizeBWP = 48; % Size of BWP in resource blocks pdcch.CORESET = coreset; % Associated CORESET pdcch.SearchSpace = ss; % Associated SearchSpace pdcch.RNTI = 1; % C-RNTI pdcch.DMRSScramblingID = carrier.NCellID; % default to NCellID pdcch.AggregationLevel = 4; % Number of CCEs in PDCCH (1,2,4,8,16) pdcch.AllocatedCandidate = 1; % 1-based scalar
Этот пример принимает, что одна обработка паза, с помощью одной пропускной способности расстается с одной передачей PDCCH для связанного CORESET и набора пространства поиска.
Для получения дополнительной информации о генерации сигналов с несколькими физическими каналами смотрите 5G пример Генерации сигналов Поставщика услуг Нисходящего канала NR.
Емкость в битах для экземпляра PDCCH определяется на основе количества элементов канала управления (CCE), сконфигурированных для PDCCH. CCE состоит из шести групп элемента ресурса (REGs), где REG равняется одному блоку ресурса (RB) во время одного символа OFDM.
% Number of bits for PDCCH resources and actual indices
[ind,dmrs,dmrsInd] = nrPDCCHResources(carrier,pdcch);
E = 2*numel(ind);
nrDCIEncode
функция кодирует биты сообщения DCI на основе нисходящего формата. Кодирование DCI включает этапы прикрепления CRC, полярного кодирования и уровня, совпадающего с кодовой комбинацией к емкости в битах PDCCH E
.
K = 64; % Number of DCI message bits dciBits = randi([0 1],K,1,'int8'); dciCW = nrDCIEncode(dciBits,pdcch.RNTI,E);
nrPDCCH
функционируйте сопоставляет закодированные биты DCI на физический нисходящий канал управления (PDCCH). Функция возвращает скремблированные, модулируемые QPSK символы. Борющиеся счета на специфичные для пользователя параметры.
sym = nrPDCCH(dciCW,pdcch.DMRSScramblingID,pdcch.RNTI);
Символы PDCCH затем сопоставлены с элементами ресурса, соответствующими выделенному кандидату в сетке OFDM. Сетка также содержит PDSCH и символы PBCH и другие ссылочные элементы сигнала. Для простоты этот пример только дополнительно сопоставляет символы PDCCH DM-RS с сеткой.
numSCRB = 12; % Number of subcarriers in a RB carrierGrid = zeros(numSCRB*carrier.NSizeGrid,carrier.SymbolsPerSlot); carrierGrid(ind) = sym; % PDCCH symbols carrierGrid(dmrsInd) = dmrs; % PDCCH DM-RS
Для сетки ресурса, охватывающей целую часть пропускной способности и один паз, этот рисунок показывает некоторые CORESET, набор пространства поиска и параметры экземпляра PDCCH для выбранной настройки в качестве примера.
OFDM модулируют сетку поставщика услуг.
waveCfg.NDLRB = carrier.NSizeGrid; waveCfg.CyclicPrefix = carrier.CyclicPrefix; waveCfg.SubcarrierSpacing = carrier.SubcarrierSpacing; waveCfg.NSymbol = mod(carrier.NSlot,carrier.SlotsPerFrame)*carrier.SymbolsPerSlot; [wave,winfo] = hOFDMModulate(waveCfg,carrierGrid);
Передайте сгенерированную форму волны по TDL, исчезающему, канал с задержкой профилирует A и распространение задержки 30 нс.
channel = nrTDLChannel; channel.DelayProfile = 'TDL-A'; channel.DelaySpread = 30e-9; channel.NumTransmitAntennas = 1; channel.NumReceiveAntennas = 1; channel.SampleRate = winfo.SamplingRate; chInfo = info(channel); maxChDelay = ceil(max(chInfo.PathDelays*channel.SampleRate)) + ... chInfo.ChannelFilterDelay; txWave = [wave; zeros(maxChDelay, size(wave,2))]; rxWave = channel(txWave);
Добавьте белый Гауссов шум с заданным уровнем к полученному сигналу, учтя уровень кодирования, модуляцию QPSK и выборку уровня.
EbNo = 6; % in dB bps = 2; % bits per symbol, 2 for QPSK EsNo = EbNo + 10*log10(bps); snrdB = EsNo + 10*log10(K/E); noiseVar = 10.^(-snrdB/10); % assumes unit signal power N0 = sqrt(noiseVar)/sqrt(2*winfo.Nfft); noise = N0 * complex(randn(size(rxWave)),randn(size(rxWave))); rxWave = rxWave + noise;
UE не имеет информации о подробной структуре канала управления. Поэтому UE декодирует полученные символы PDCCH вслепую путем контроля группы кандидатов PDCCH на каждый паз с помощью RNTI UE, чтобы идентифицировать правильного кандидата (или экземпляр).
Контроль кандидата подразумевает попытку декодировать набор элементов ресурса, соответствующих кандидату путем проверки, является ли возвращенная контрольная сумма нулем для известного RNTI (UE). Используйте nrPDCCHSpace
функция, чтобы определить всех кандидатов, заданных набором пространства поиска в терминах индексов элемента ресурса PDCCH, соответствующих символов DM-RS и индексов.
Для каждого кандидата восстановление фронтенда включает
синхронизация оценки смещения на основе символов DM-RS с помощью функционального nrTimingEstimate
,
Демодуляция OFDM,
оценка канала на основе символов DM-RS с помощью функционального nrChannelEstimate
, и
Эквализация MMSE с помощью функционального nrEqualizeMMSE
дать к компенсируемому кандидату символы PDCCH.
Компенсируемые символы на кандидата демодулируются известными специфичными для пользователя параметрами и отклонением шума канала с помощью nrPDCCHDecode
функция.
Для экземпляра полученной кодовой комбинации PDCCH, nrDCIDecode
функция включает этапы восстановления уровня, полярного декодирования и декодирования CRC. Если выходное значение маски является нулем, PDCCH декодируется успешно, и UE может обработать сообщение DCI.
В этом примере получатель принимает знание формата DCI и размера полезной нагрузки DCI K
. На практике даже они разыскивались бы во внешнем цикле по всем поддерживаемым форматам с соответствующими битными длинами на формат.
listLen = 8; % polar decoding list length % Get all possible candidates [allInd,allDMRS,allDMRSInd] = nrPDCCHSpace(carrier,pdcch); % Loop over all supported aggregation levels decoded = false; for alIdx = 1:5 % Loop over all candidates at each aggregation level for cIdx = 1:pdcch.SearchSpace.NumCandidates(alIdx) % Get candidate cSymIdx = allInd{alIdx}(:,cIdx); cDMRS = allDMRS{alIdx}(:,cIdx); cDMRSInd = allDMRSInd{alIdx}(:,cIdx); % Timing estimate offset = nrTimingEstimate(rxWave,carrier.NSizeGrid, ... carrier.SubcarrierSpacing,carrier.NSlot,cDMRSInd,cDMRS, ... 'CyclicPrefix',carrier.CyclicPrefix); if offset > maxChDelay offset = 0; end rxWave = rxWave(1+offset:end,:); % OFDM demodulate the carrier rxCarrGrid = hOFDMDemodulate(waveCfg,rxWave); % Channel estimate [hest,nVar] = nrChannelEstimate(rxCarrGrid,cDMRSInd,cDMRS, ... 'CyclicPrefix',carrier.CyclicPrefix); [rxSym,pdcchHest] = nrExtractResources(cSymIdx,rxCarrGrid,hest); % Equalization [pdcchEq,csi] = nrEqualizeMMSE(rxSym,pdcchHest,nVar); % Demodulate rxCW = nrPDCCHDecode(pdcchEq,pdcch.DMRSScramblingID,pdcch.RNTI,nVar); % Apply CSI csiRep = repmat(csi.',2,1); scalRxCW = rxCW.*csiRep(:); % Decode [decDCIBits,errFlag] = nrDCIDecode(scalRxCW,K,listLen,pdcch.RNTI); if isequal(errFlag,0) disp(['Decoded candidate #' num2str(cIdx) ... ' at aggregation level ' num2str(2^(alIdx-1)) ... ' in slot']) decoded = true; if isequal(decDCIBits,dciBits) disp(' Recovered DCI bits with no errors'); else disp(' Recovered DCI bits with errors'); end break; end end % Dont loop over other aggregation levels if RNTI matched if decoded break; end end
Decoded candidate #1 at aggregation level 4 in slot Recovered DCI bits with no errors
Для выбранных системных параметров декодируемая информация совпадает с переданными информационными битами.
Пример, искавший по всем кандидатам в одном наборе пространства поиска, как задано ss
параметр конфигурации. Поиск по нескольким наборам пространства поиска потребовал бы другого внешнего цикла по всем заданным наборам.
Этот пример использует эти функции помощника:
3GPP TS 38.211. "NR; Физические каналы и модуляция (Релиз 15)". Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.
3GPP TS 38.212. "NR; Мультиплексирование и кодирование канала (Релиз 15)". Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.
3GPP TS 38.213. "NR; процедуры Физического уровня для управления (Релиз 15)". Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.