Этот пример показывает различные шаги обработки, участвующие в мультиплексировании данных и управления, для формирования кодового слова, сопоставленного с физическим общим каналом восходящей линии связи (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 мультиплексируются для формирования кодового слова с этапами, описанными в разделе 6.2.7 TS 38.212 [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. Закодированные биты части 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: Сопоставьте закодированные 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, отличные от RE DM-RS, в символах 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.
Сконфигурируйте 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
В целях рисунка количество бит HARQ-ACK в этом примере устанавливается равным 1. Чтобы получить информацию о количестве закодированных бит каждого типа, используйте nrULSCHInfo
функция. Для заданной конфигурации PUSCH, целевой скорости кода и значений полезной нагрузки количество кодированных битов HARQ-ACK составляет 2, количество кодированных битов CSI 1 и CSI 2 и количество кодированных битов 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, необходимых для передачи CSI части 1. Для передачи CSI части 1 требовалось 19 RE. Поскольку для передачи доступно только 12 RE, каждая RE занята в этом случае для части 1 CSI в символе 0 OFDM. Для передачи остальных символов CSI части 1, отображение переходит к следующему символу OFDM, не используемому для DM-RS (то есть символу OFDM 1). В символе 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 (то есть символу OFDM 1). В символе OFDM 1 для передачи UCI доступно 5 RE, а для передачи CSI части 2 требуется 19 RE. Этот сценарий приводит к отображению 5 RE с частью 2 CSI, а затем к продолжению с тем же правилом отображения, что и в части 1 CSI для следующих символов OFDM, отличных от DM-RS. За исключением закодированной части 1 CSI, закодированная часть 2 CSI и данные UL-SCH могут сопоставляться с зарезервированными местоположениями HARQ-ACK. Этот рисунок показывает отображение CSI части 2. Зарезервированные местоположения 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)
Для той же настройки строения, упомянутой в случае 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)
Измените различные параметры, влияющие на распределение времени или частоты PUSCH и количество бит полезной нагрузки каждого типа UCI, чтобы изменить позиции RE типов UCI.
Включите PT-RS для изменения битовой емкости типов UCI в кодовом слове.
Включите внутрипозиционное скачкообразное изменение частоты, чтобы наблюдать отображение различных типов UCI в каждом скачке.
Этот пример показывает, как сгенерировать битовые мощности соответствующих типов UCI и выполнить мультиплексирование, чтобы сгенерировать кодовое слово, сопоставленное с PUSCH. Пример подсвечивает различные шаги, участвующие в мультиплексировании, когда количество бит HARQ-ACK меньше или равно 2 и больше 2.
3GPP TS 38.212. "NR; Мультиплексирование и канальное кодирование (Release 15). Группа технических спецификаций Радиосеть доступ.
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