Этот пример показывает различные шаги обработки, вовлеченные в данные и мультиплексирование управления, чтобы сформировать кодовую комбинацию, сопоставленную с физическим восходящим каналом совместно использованный канал (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.
Сконфигурируйте 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
В целях рисунка номер битов 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)
Для той же настройки настройки, упомянутой в случае, если 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.
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