Этот пример описывает слепое поисковое декодирование физического нисходящего канала управления (PDCCH) для 5G New Radio коммуникационной системы. Основываясь на руководстве Nownlink Control Information, этот пример представляет концепции набора ресурсов управления (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 NR Downlink Vector Генерации сигналов.
Пропускная способность бита для образца 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);
The 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);
The 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 каналу с замираниями с профилем задержки A и расширением задержки 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 и индексов.
Для каждого кандидата front-end recovery включает в себя
оценка смещения синхронизации на основе символов 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 TS 38.211. "NR; Физические каналы и модуляция (Release 15). Группа технических спецификаций Радиосеть доступ.
3GPP TS 38.212. "NR; Мультиплексирование и канальное кодирование (Release 15). Группа технических спецификаций Радиосеть доступ.
3GPP TS 38.213. "NR; Процедуры физического уровня для контроля (Release 15). Группа технических спецификаций Радиосеть доступ.