exponenta event banner

Мультиплексирование 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 зависит от количества элементов ресурсов (RE), доступных для передачи UCI, и остальных RE, необходимых для этого типа UCI. Если количество оставшихся RE, необходимых для этого типа UCI в символе OFDM, больше половины доступных RE для передачи UCI, отображение типа UCI является смежным. В противном случае отображение равномерно распределяется по доступным RE в символе OFDM для достижения усиления разнесения. Количество кодированных битов, которые заняты в RE для UCI или передачи данных, равно произведению порядка модуляции и количества уровней.

Кодированные биты HARQ-ACK помещаются из символа OFDM после первых последовательных символов OFDM DM-RS. Кодированные биты CSI-части 1 или части 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: Отображение кодированных битов CSI части 1 и 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). RE, отличные от DM-RS RE в символах OFDM DM-RS, используются для передачи данных. В первом случае количество битов HARQ-ACK меньше или равно 2. Во втором случае количество битов HARQ-ACK больше 2. На этом рисунке показана сетка только с расположениями символов DM-RS. Эта сетка заполняется кодированными типами UL-SCH, HARQ-ACK, CSI часть 1 и CSI часть 2 в соответствии с операцией мультиплексирования для каждого случая. Размер транспортного блока устанавливается равным 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 ограничивает количество RE, назначенных 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 и части 2 CSI равно 19, и количество кодированных битов UL-SCH равно 94.

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

Количество зарезервированных местоположений HARQ-ACK достигается путем вычисления длины согласования скорости HARQ-ACK с количеством битов HARQ-ACK, установленных в 2. При указанной конфигурации PUSCH, целевой скорости передачи кода и размере транспортного блока количество зарезервированных местоположений HARQ-ACK равно 4. HARQ-ACK отображается на RE в символе OFDM, который доступен после первых последовательных символов OFDM DM-RS. На этом рисунке показаны местоположения зарезервированного HARQ-ACK.

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

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

Шаг 3: Отображение кодированных битов CSI части 1 и CSI части 2

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

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

Используйте 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)

Figure contains an axes. The axes with title Grid Containing Locations of Different Types contains 6 objects of type image, line. These objects represent UL-SCH, DM-RS, HARQ-ACK, CSI Part 1, CSI Part 2.

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

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

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

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

Шаг 2: Отображение кодированных битов HARQ-ACK.

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

Шаг 3: Отображение кодированной части CSI 1 и кодированной части 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)

Figure contains an axes. The axes with title Grid Containing Locations of Different Types contains 6 objects of type image, line. These objects represent UL-SCH, DM-RS, HARQ-ACK, CSI Part 1, CSI Part 2.

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

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

Разрешить PT-RS изменять разрядность типов UCI в кодовом слове.

Активизация скачкообразной перестройки частоты внутри слота для наблюдения за отображением различных типов UCI в каждом прыжке.

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

Ссылки

  1. 3GPP TS 38.212. "НР; мультиплексирование и канальное кодирование (выпуск 15). "Проект партнерства 3-го поколения; Техническая спецификация на сеть радиодоступа группы.

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

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

См. также

Функции

Объекты

Связанные темы