Мультиплексирование NR UCI на PUSCH

Этот пример показывает различные шаги обработки, вовлеченные в данные и мультиплексирование управления, чтобы сформировать кодовую комбинацию, сопоставленную с физическим восходящим каналом совместно использованный канал (PUSCH) использующий функций 5G Toolbox™.

Введение

Сообщения восходящей управляющей информации (UCI) состоят из гибридного автоматического повторного подтверждения запроса (HARQ-ACK), информация о состоянии канала (CSI) и планирование запроса (SR). Эти сообщения UCI закодированы и переданы через физический восходящий канал управления (PUCCH) или мультиплексируются на PUSCH. Настройка создания отчетов CSI может быть апериодической (использование PUSCH), периодической (использование PUCCH) или полуперсистентной (использование PUCCH или DCI-активированного PUSCH). Отчет CSI включает две части. Часть 1 CSI имеет фиксированный размер полезной нагрузки и используется, чтобы идентифицировать количество информационных битов в части 2 CSI. Часть 1 CSI должна быть передана полностью перед передачей части 2 CSI. HARQ-ACK (если таковые имеются) и CSI (если таковые имеются) закодирован и мультиплексирован с или без закодированных данных UL-SCH, и затем передан на PUSCH.

Данные и мультиплексирование управления

Закодированные данные, закодированный HARQ-ACK, закодировали часть 1 CSI и закодировали часть 2 CSI, мультиплексируются, чтобы сформировать кодовую комбинацию с шагами, обрисованными в общих чертах в Разделе TS 38.212 6.2.7 [1].

Информация UCI передается только в символах OFDM, которые не использованы для опорного сигнала демодуляции (DM-RS) передача. В любом символе OFDM, используемом для передачи UCI для типа UCI, отображение которого тип UCI зависит от количества элементов ресурса (REs), доступный для передачи UCI и остающегося REs, требуемого для этого тип UCI. Если количество оставления REs, требуемого для этого, тип UCI в символе OFDM больше половины доступных REs для передачи UCI, отображения типа UCI, непрерывно. В противном случае отображение равномерно распределено через доступный REs в символе OFDM, чтобы достигнуть усиления разнообразия. Количество закодированных битов, которые заняты в RE для UCI или передачи данных, равно продукту порядка модуляции и количеству слоев.

Закодированные биты HARQ-ACK помещаются от символа OFDM после первых последовательных символов DM-RS OFDM. Закодированная часть 1 CSI или часть, 2 бита помещаются в запуск символ OFDM, который не использован для DM-RS в разделяемом выделении символа канала. Операция мультиплексирования зависит от количества битов HARQ-ACK. Когда количество битов HARQ-ACK меньше чем или равно 2, закодированные биты HARQ-ACK проколоты. В противном случае закодированные биты HARQ-ACK являются соответствующими уровню.

Мультиплексирование включает эти шаги обработки.

  • Шаг 1: Когда количество битов HARQ-ACK будет меньше чем или равно 2, найдите зарезервированные местоположения HARQ-ACK.

  • Шаг 2: Когда количество битов HARQ-ACK будет больше 2, сопоставьте закодированные биты HARQ-ACK (если таковые имеются).

  • Шаг 3: Сопоставьте закодированную часть 1 CSI и часть CSI 2 бита (если таковые имеются).

  • Шаг 4: Сопоставьте закодированные биты UL-SCH (если таковые имеются).

  • Шаг 5: Когда количество битов HARQ-ACK будет меньше чем или равно 2, сопоставьте закодированные биты HARQ-ACK (если таковые имеются).

  • Шаг 6: Сформируйте кодовую комбинацию.

Этот пример показывает шаги 1 - 6 для двух отдельных случаев для PUSCH, с одним блоком ресурса, занимающим все символы OFDM в пазе, единственном слое, pi/2-BPSK схема модуляции и символы DM-RS, занимающие символы OFDM 2, 7, и 11 (на основе 0). REs кроме DM-RS REs в символах DM-RS OFDM используются для передачи данных. Для первого случая количество битов HARQ-ACK меньше чем или равно 2. Для второго случая количество битов HARQ-ACK больше 2. Этот рисунок показывает сетку только с местоположениями символа DM-RS. Эта сетка заполняется с закодированными типами UL-SCH, HARQ-ACK, часть 1 CSI и часть 2 CSI, согласно операции мультиплексирования для каждого случая. Транспортный размер блока установлен в 24, и целевой уровень кода установлен в 314/1024. Номер битов полезной нагрузки каждой части CSI определяется к 10, и все связанные бета факторы установлены в 1.

Сконфигурируйте сетку ресурса поставщика услуг и PUSCH

Сконфигурируйте nrCarrierConfig объект создать сетку ресурса поставщика услуг на 15 кГц с одним блоком ресурса. Сконфигурируйте nrPUSCHConfig объект получить соответствующие местоположения DM-RS как показано на предыдущем рисунке. Кроме того, сконфигурируйте параметры UCI (BetaOffsetACK, BetaOffsetCSI1, BetaOffsetCSI2, и UCIScaling). Свойство BetaOffsetACK определяет количество ресурсов для мультиплексирования HARQ-ACK в PUSCH. Свойства BetaOffsetCSI1 и BetaOffsetCSI2 определите количество ресурсов для мультиплексирования отчетов CSI в PUSCH. Свойство UCIScaling ограничивает количество REs, присвоенного UCI на PUSCH.

% Set the carrier configuration
carrier = nrCarrierConfig;
carrier.SubcarrierSpacing = 15;   % Subcarrier spacing in kHz (15, 30, 60, 120, 240)
carrier.CyclicPrefix = 'normal';  % Cyclic prefix ('normal' or 'extended')
carrier.NSizeGrid = 1;            % Number of resource blocks in carrier resource grid (1...275)

% Set the PUSCH configuration
pusch = nrPUSCHConfig;
pusch.Modulation = 'pi/2-BPSK';     % Modulation scheme ('pi/2-BPSK', 'QPSK', '16QAM', '64QAM', or '256QAM')
pusch.NumLayers = 1;                % Number of layers (1, 2, 3, or 4)
pusch.SymbolAllocation = [0 14];    % OFDM symbol allocation [S L]
pusch.PRBSet = 0;                   % Vector of PRB allocated with values in the range [0, 274]
pusch.MappingType = 'A';            % Mapping type ('A' or 'B')
pusch.FrequencyHopping = 'neither'; % Frequency hopping configuration ('neither', 'interSlot', or 'intraSlot')
pusch.SecondHopStartPRB = 0;        % Second hop start PRB in the range [0, 274], ensure the combination with PRBSet does not exceed 274
pusch.TransformPrecoding = 0;       % Transform precoding (0 or 1)

% Set the UCI parameters
pusch.BetaOffsetACK = 1;  % Beta offset for HARQ-ACK
pusch.BetaOffsetCSI1 = 1; % Beta offset for CSI part 1
pusch.BetaOffsetCSI2 = 1; % Beta offset for CSI part 2
pusch.UCIScaling = 1;     % UCI scaling factor

% Set the DM-RS parameters
pusch.DMRS.DMRSConfigurationType = 1;   % DM-RS configuration type (1 or 2)
pusch.DMRS.DMRSTypeAPosition = 2;       % DM-RS type A position (2 or 3)
pusch.DMRS.DMRSLength = 1;              % DM-RS length (1 or 2)
pusch.DMRS.DMRSAdditionalPosition = 2;  % Number of DM-RS additional positions (0, 1, 2, or 3)
pusch.DMRS.NumCDMGroupsWithoutData = 1; % Number of CDM groups without data (1, 2, or 3)

% Set the PT-RS parameters
pusch.EnablePTRS = 0;            % Disable or Enable PT-RS (0 or 1)
pusch.PTRS.FrequencyDensity = 2; % PT-RS frequency density (2 or 4)
pusch.PTRS.TimeDensity = 1;      % PT-RS time density (1, 2, or 4)
pusch.PTRS.REOffset = '00';      % PT-RS resource element offset ('00', '01', '10', or '11')
pusch.PTRS.NumPTRSSamples = 2;   % Number of PT-RS samples (2 or 4)
pusch.PTRS.NumPTRSGroups = 2;    % Number of PT-RS groups (2, 4, or 8)

% Set the target code rate, transport block size, payload lengths of CSI part 1 and CSI part 2
tcr = 314/1024; % Target code rate in the range (0, 1)
tbs = 24;       % Transport block size
ocsi1 = 10;     % Number of CSI part 1 bits
ocsi2 = 10;     % Number of CSI part 2 bits

Случай 1: количество битов HARQ-ACK, меньше чем или равных 2

В целях рисунка номер битов HARQ-ACK определяется к 1 в этом примере. Чтобы получить информацию о количестве закодированных битов каждого типа, используйте nrULSCHInfo функция. Для заданной настройки PUSCH, целевого уровня кода и значений полезной нагрузки, количество закодированных битов HARQ-ACK равняется 2, количеству закодированной части 1 CSI и части CSI, 2 бита равняются 19 каждый, и количество закодированных битов UL-SCH равняется 94.

Шаг 1: Когда количество битов HARQ-ACK будет меньше чем или равно 2, найдите зарезервированные местоположения HARQ-ACK и отметьте их на сетке.

Количество зарезервированных местоположений HARQ-ACK достигается путем вычисления совпадающей с уровнем длины HARQ-ACK с количеством набора битов HARQ-ACK к 2. С заданной настройкой PUSCH, целевым уровнем кода и транспортным размером блока, количество зарезервированных местоположений HARQ-ACK равняется 4. HARQ-ACK сопоставлен с REs в символе OFDM, который доступен после первых последовательных символов DM-RS OFDM. Этот рисунок показывает местоположения зарезервированного HARQ-ACK.

Шаг 2: Когда количество битов HARQ-ACK будет больше 2, сопоставьте закодированные биты HARQ-ACK.

Поскольку количество битов HARQ-ACK меньше чем или равно 2 в этом случае, пропустите этот шаг.

Шаг 3: Сопоставьте закодированную часть 1 CSI и часть CSI 2 бита

Отображение CSI (часть 1 CSI, сопровождаемая частью 2 CSI), запускается сначала non-DMRS OFDM символ, доступный в выделении PUSCH. Для сконфигурированной настройки отображение начинает с символа OFDM 0 (на основе 0). Местоположения отображения определяются на основе количества доступного REs и количества REs, требуемого для передачи части 1 CSI. Передача части 1 CSI потребовала 19 REs. Поскольку только 12 REs доступны для передачи, каждый RE занят в этом случае для части 1 CSI в символе OFDM 0. Для передачи остающихся символов части 1 CSI отображение переходит к следующему символу OFDM, не используемому для DM-RS (то есть, символ OFDM 1). В символе OFDM 1, 12 REs доступны, но часть 1 CSI требует только 7 REs. Поскольку остающиеся REs, требуемые для части 1 CSI, являются больше чем половиной доступного REs для передачи UCI, часть 1 CSI сопоставлена с непрерывным REs. Этот рисунок показывает этот сценарий.

Если закодированная часть 1 CSI полностью сопоставлена, отображение закодированной части 2 CSI запускается. Отображение запускается сначала non-DMRS OFDM символ, который используется для передачи PUSCH (то есть, символ OFDM 0). В символе OFDM 0, никакие REs не доступны для передачи UCI, этот символ OFDM пропущен. В результате сопоставляя перемещения со следующим символом OFDM (то есть, символ OFDM 1). В символе OFDM 1, 5 REs доступны для передачи UCI, и 19 REs требуются для передачи части 2 CSI. Этот сценарий приводит к отображению 5 REs с частью 2 CSI и затем продолжать то же правило отображения как в части 1 CSI для следующих символов OFDM кроме DM-RS. Кроме закодированной части 1 CSI, закодированная часть 2 CSI и данные UL-SCH могут сопоставить с зарезервированными местоположениями HARQ-ACK. Этот рисунок показывает отображение части 2 CSI. Зарезервированные местоположения HARQ-ACK покрыты частью 2 CSI в символе OFDM 3. Кроме того, в символе OFDM 4, распределяется часть 2 CSI, потому что количество REs, требуемого для остающейся передачи части 2 CSI, меньше половины доступного REs для передачи UCI.

Шаг 4: Сопоставьте закодированные биты данных UL-SCH.

Этот рисунок показывает, как данные UL-SCH сопоставлены с остающимися местоположениями в сетке.

Шаг 5: Когда количество битов HARQ-ACK будет меньше чем или равно 2, сопоставьте закодированные биты HARQ-ACK.

Биты HARQ-ACK сопоставлены в зарезервированных местоположениях HARQ-ACK в распределенном шаблоне. Этот рисунок указывает на отображение HARQ-ACK с сеткой. HARQ-ACK прокалывает часть 2 CSI, которая заняла зарезервированные местоположения HARQ-ACK.

Шаг 6: Сформируйте кодовую комбинацию путем чтения частоты битов сначала, и время затем приближаются в каждом RE кроме DM-RS REs.

Используйте nrULSCHMultiplex функция, чтобы получить кодовую комбинацию, выполняя шаги 1 - 6.

% Set the payload size of the HARQ-ACK to a value less than or equal to 2
oack = 1; % Number of HARQ-ACK bits

% Get the UL-SCH coding information
info = nrULSCHInfo(pusch,tcr,tbs,oack,ocsi1,ocsi2);

% Set random coded UL-SCH, HARQ-ACK, CSI part 1, and CSI part 2 bits
culsch = randi([0 1],info.GULSCH,1);
cack = randi([0 1],info.GACK,1);
ccsi1 = randi([0 1],info.GCSI1,1);
ccsi2 = randi([0 1],info.GCSI2,1);

% Get the codeword and locations of each type (data and UCI)
[cw,indInfo] = nrULSCHMultiplex(pusch,tcr,tbs,culsch,cack,ccsi1,ccsi2);

% Create and plot the output grid for the first layer with predefined symbol
% values for the different types
createAndPlotGrid(carrier,pusch,cw,indInfo)

Случай 2: количество битов HARQ-ACK, больше, чем 2

Для той же настройки настройки, упомянутой в случае, если 1, измените количество битов HARQ-ACK от 1 до 3. Для этой настройки количество закодированных битов HARQ-ACK равняется 6, количеству закодированной части 1 CSI и части, 2 бита равняются 19 каждый, и количество закодированных битов UL-SCH равняется 106.

Шаг 1: Когда количество битов HARQ-ACK будет меньше чем или равно 2, найдите зарезервированные местоположения HARQ-ACK и отметьте их на сетке.

Поскольку количество битов HARQ-ACK больше 2 в этом случае, пропустите этот шаг.

Шаг 2: Сопоставьте закодированные биты HARQ-ACK.

HARQ-ACK сопоставлен с REs в символе OFDM, который доступен после первых последовательных символов DM-RS OFDM. Количество REs, требуемого для HARQ-ACK, равняется 6. Поскольку это значение не больше половины количества REs, доступного для передачи UCI, отображение HARQ-ACK распределяется как показано в этом рисунке.

Шаг 3: Сопоставьте закодированную часть 1 CSI и закодированную часть CSI 2 бита, подобные, чтобы случиться 1.

Шаг 4: Сопоставьте закодированные биты данных UL-SCH, подобные, чтобы случиться 1.

Шаг 5: Когда количество битов HARQ-ACK будет меньше чем или равно 2, сопоставьте закодированные биты HARQ-ACK.

Поскольку количество битов HARQ-ACK больше 2 в этом случае, пропустите этот шаг.

Шаг 6: Сформируйте кодовую комбинацию.

% Set the payload size of the HARQ-ACK bits to a value greater than 2
oack = 3; % Number of HARQ-ACK bits

% Get the UL-SCH coding information
info = nrULSCHInfo(pusch,tcr,tbs,oack,ocsi1,ocsi2);

% Set random coded UL-SCH, HARQ-ACK, CSI part 1, and CSI part 2 bits
culsch = randi([0 1],info.GULSCH,1);
cack = randi([0 1],info.GACK,1);
ccsi1 = randi([0 1],info.GCSI1,1);
ccsi2 = randi([0 1],info.GCSI2,1);

% Get the codeword and locations of each type (data and UCI)
[cw,indInfo] = nrULSCHMultiplex(pusch,tcr,tbs,culsch,cack,ccsi1,ccsi2);

% Create and plot the output grid for the first layer with predefined symbol
% values for the different types
createAndPlotGrid(carrier,pusch,cw,indInfo)

Дальнейшее исследование

Измените различные параметры, влияющие на время или выделение частоты PUSCH и количество битов полезной нагрузки каждого типа UCI, чтобы варьироваться положения RE типов UCI.

Позвольте PT-RS варьироваться емкости в битах типов UCI в кодовой комбинации.

Позвольте частоте внутрипаза, скачкообразно двигающейся наблюдать отображение различных типов UCI в каждом транзитном участке.

В этом примере показано, как сгенерировать емкости в битах соответствующих типов UCI и выполнить мультиплексирование, чтобы сгенерировать кодовую комбинацию, сопоставленную с PUSCH. Пример подсвечивает различные шаги, вовлеченные в мультиплексирование, когда количество битов HARQ-ACK меньше чем или равно 2 и больше, чем 2.

Ссылки

  1. 3GPP TS 38.212. "NR; Мультиплексирование и кодирование канала (Релиз 15)". Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.

Локальная функция

function createAndPlotGrid(carrier,pusch,cw,indInfo)

    % Initialize the grid
    qm = strcmpi(pusch.Modulation,{'pi/2-BPSK','QPSK','16QAM','64QAM','256QAM'})*[1 2 4 6 8]';
    gridOFDM = complex(zeros([carrier.NSizeGrid*12 carrier.SymbolsPerSlot double(pusch.NumLayers)*qm]));

    % Specify predefined values for each entity to get the desired visualization
    chpLevel = struct;
    chpLevel.PUSCH = 0.6;
    chpLevel.DMRS = 1.1;
    chpLevel.ACK = 0.4;
    chpLevel.CSI1 = 1.5;
    chpLevel.CSI2 = 2;

    % Assign the codeword with predefined values
    cw1 = zeros(size(cw));
    cw1(indInfo.ULSCHIndices) = chpLevel.PUSCH;
    cw1(indInfo.ACKIndices) = chpLevel.ACK ;
    cw1(indInfo.CSI1Indices) = chpLevel.CSI1 ;
    cw1(indInfo.CSI2Indices) = chpLevel.CSI2 ;

    % Legend labels for the plot
    labelStr = {'UL-SCH','DM-RS','HARQ-ACK','CSI Part 1','CSI Part 2'};

    % Get the PUSCH and DM-RS indices
    puschIndices = nrPUSCHIndices(carrier,pusch);
    dmrsIndices = nrPUSCHDMRSIndices(carrier,pusch);

    % Get the PT-RS indices
    if pusch.EnablePTRS
        labelStr{end+1} = 'PT-RS';
        chpLevel.PTRS = 1.6;
        ptrsIndices = nrPUSCHPTRSIndices(carrier,pusch);
    end

    % Map the DM-RS, PT-RS, and PUSCH indices to the grid
    [~,puschExtInd] = nrExtractResources(puschIndices,gridOFDM);
    gridOFDM(dmrsIndices) = chpLevel.DMRS;
    if pusch.TransformPrecoding
        % DFT-s-OFDM
        titleStr = "Projections of Different Types Before Transform Precoding";
        cwLen = zeros(size(puschIndices,1),pusch.NumLayers*qm);
        if pusch.EnablePTRS
            cwLen(ptrsIndices) = chpLevel.PTRS;
        end
        cwLen(cwLen==0) = cw1;
        gridOFDM(reshape(puschExtInd',[],1)) = cwLen;
    else
        % CP-OFDM
        titleStr = "Grid Containing Locations of Different Types";
        if pusch.EnablePTRS
            gridOFDM(ptrsIndices) =  chpLevel.PTRS;
        end
        gridOFDM(reshape(puschExtInd',[],1)) = cw1;
    end

    % Plot the grid
    figure
    map = jet(64);
    cscaling = 30;
    im = image(1:size(gridOFDM,2),1:size(gridOFDM,1),cscaling*abs(gridOFDM(:,:,1)));
    colormap(im.Parent,map)

    % Add a legend to the image
    chpval = struct2cell(chpLevel);
    clevels = cscaling*[chpval{:}];
    N = length(clevels);
    L = line(ones(N),ones(N), 'LineWidth',8); % Generate lines
    % Index the color map and associate the selected colors with the lines
    set(L,{'color'},mat2cell(map(min(1+clevels,length(map)),:),ones(1,N),3)) % Set the colors according to the map
    % Create the legend
    legend(labelStr{:})
    axis xy
    ylabel('Subcarriers')
    xlabel('OFDM Symbols')
    title(titleStr)

end

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

Функции

Объекты

Похожие темы