Нисходящая обработка управления и процедуры

Этот пример описывает слепое поисковое декодирование физического нисходящего канала управления (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

Пропускная способность бита для образца 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);

Кодировка DCI

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);

Генерация и отображение символов PDCCH

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-модуляция

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;

Слепое декодирование PDCCH и DCI

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 Параметр конфигурации. Для поиска по нескольким наборам пространства поиска потребуется другой внешний цикл по всем заданным наборам.

Выбранные ссылки

  1. 3GPP TS 38.211. "NR; Физические каналы и модуляция (Release 15). Группа технических спецификаций Радиосеть доступ.

  2. 3GPP TS 38.212. "NR; Мультиплексирование и канальное кодирование (Release 15). Группа технических спецификаций Радиосеть доступ.

  3. 3GPP TS 38.213. "NR; Процедуры физического уровня для контроля (Release 15). Группа технических спецификаций Радиосеть доступ.

См. также

Функции