Этот пример описывает декодирование слепого поиска физического канала управления нисходящей линии связи (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 = 0; % 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 = []; % Use carrier.NCellID instead pdcch.AggregationLevel = 4; % Number of CCEs in PDCCH (1,2,4,8,16) pdcch.AllocatedCandidate = 1; % 1-based scalar
В этом примере предполагается обработка одного слота с использованием одной части полосы пропускания с одной передачей PDCCH для соответствующего набора CORESET и пространства поиска.
Для получения дополнительной информации о поколении формы волны с несколькими физическими каналами посмотрите 5G НОМЕР Векторного примера Поколения Формы волны Передачи информации из космоса.
Битовая емкость для экземпляра PDCCH определяется на основе количества элементов канала управления (CCE), сконфигурированных для PDCCH. CCE состоит из шести групп элементов ресурса (REG), где 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-модулированные символы. Скремблирование учитывает пользовательские параметры.
if isempty(pdcch.DMRSScramblingID) nID = carrier.NCellID; else nID = pdcch.DMRSScramblingID; end sym = nrPDCCH(dciCW,nID,pdcch.RNTI);
Символы PDCCH затем отображаются на элементы ресурсов, соответствующие выделенному кандидату в пределах сетки OFDM. Сетка ресурсов также содержит символы PDSCH и PBCH и другие элементы опорного сигнала. Для простоты этот пример только дополнительно отображает символы PDCCH DM-RS в сетку.
carrierGrid = nrResourceGrid(carrier); carrierGrid(ind) = sym; % PDCCH symbols carrierGrid(dmrsInd) = dmrs; % PDCCH DM-RS
Для сетки ресурсов, охватывающей всю часть полосы пропускания и один слот, на этом рисунке показаны некоторые параметры CORESET, набора пространства поиска и экземпляра PDCCH для выбранной примерной конфигурации.

OFDM модулирует сетку несущих. Укажите отсутствие окон для обработки на основе слотов.
[wave,winfo] = nrOFDMModulate(carrier,carrierGrid,'Windowing',0);
Передают сформированный сигнал по каналу с замиранием TDL с профилем задержки А и разбросом задержки 30 нс.
channel = nrTDLChannel; channel.DelayProfile = 'TDL-A'; channel.DelaySpread = 30e-9; channel.NumTransmitAntennas = 1; channel.NumReceiveAntennas = 1; channel.SampleRate = winfo.SampleRate; 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))); rxWaveN = rxWave + noise;
UE не имеет информации о подробной структуре канала управления. Следовательно, UE декодирует принятые символы PDCCH вслепую, отслеживая набор кандидатов PDCCH для каждого интервала времени, используя RNTI UE для идентификации правильного кандидата (или экземпляра).
Мониторинг кандидата подразумевает попытку декодирования набора элементов ресурса, соответствующих кандидату, путем проверки, является ли возвращенная контрольная сумма нулевой для известного RNTI (UE). Используйте nrPDCCHSpace определение всех кандидатов, определенных пространством поиска, установленным в терминах индексов элемента ресурса PDCCH, соответствующих символов и индексов DM-RS.
Для каждого кандидата восстановление переднего плана включает
оценка смещения синхронизации на основе символов DM-RS с использованием функции nrTimingEstimate,
Демодуляция OFDM с использованием функции nrOFDMDemodulate,
оценка канала на основе символов 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(carrier,rxWaveN,cDMRSInd,cDMRS); if offset > maxChDelay offset = 0; end rxWaveS = rxWaveN(1+offset:end,:); % OFDM demodulate the carrier rxCarrGrid = nrOFDMDemodulate(carrier,rxWaveS); % Channel estimate [hest,nVar] = nrChannelEstimate(carrier,rxCarrGrid,cDMRSInd,cDMRS); [rxSym,pdcchHest] = nrExtractResources(cSymIdx,rxCarrGrid,hest); % Equalization [pdcchEq,csi] = nrEqualizeMMSE(rxSym,pdcchHest,nVar); % Demodulate rxCW = nrPDCCHDecode(pdcchEq,nID,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 ТС 38.211. "НР; Физические каналы и модуляция (выпуск 15). "Проект партнерства 3-го поколения; Техническая спецификация на сеть радиодоступа группы.
3GPP TS 38.212. "НР; мультиплексирование и канальное кодирование (выпуск 15). "Проект партнерства 3-го поколения; Техническая спецификация на сеть радиодоступа группы.
3GPP ТС 38.213. "НР; Процедуры физического уровня для контроля (выпуск 15). "Проект партнерства 3-го поколения; Техническая спецификация на сеть радиодоступа группы.