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

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

Емкость в битах PDCCH

Емкость в битах для экземпляра 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);

Кодирование DCI

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 и отображение

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 и индексов.

Для каждого кандидата восстановление фронтенда включает

  • синхронизация оценки смещения на основе символов 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; Физические каналы и модуляция" Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

  2. 3GPP TS 38.212. "NR; Мультиплексирование и канал, кодирующий" Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

  3. 3GPP TS 38.213. "NR; процедуры Физического уровня для управления" Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

Смотрите также

Функции