Этот пример показывает функциональность планирования слоя среднего управления доступом (MAC) стека New Radio (NR) 5G. Стратегия планирования присваивает физический восходящий канал совместно использованный канал (PUSCH) и физический нисходящий канал совместно использованный канал (PDSCH) ресурсы к набору оборудования статического пользователя (UEs), соединенный с gNB. Пример использует режим дуплекса деления частоты (FDD). Следовательно, восходящий канал (UL) и нисходящий канал (DL) передачи используют все пазы. Этот пример также показывает функциональность слоя управления линией радиосвязи (RLC) в неподтвержденном режиме (UM). Пример абстрагирует физический уровень и принимает основанный на вероятности подход при помощи принятых восходящих и нисходящих значений качественной характеристики канала (CQI) к пакетным отказам приема модели. Производительность стратегии планирования оценена в терминах достигнутой пропускной способности MAC и справедливости в разделении ресурсов.
В этом примере показано, как стратегия планирования (управляемый gNB) присваивает UL и ресурсы DL среди UEs. Пример рассматривает следующие операции в gNB и UEs, которые упрощают UL и передачи DL.
Планировщики (UL и DL) запускаются каждый p пазы, чтобы присвоить UL и ресурсы DL, где p является сконфигурированной периодичностью планировщика. В каждом запуске количество запланированных пазов равно периодичности запущенного планировщика, p.
Планировщик UL
Первый паз, среди p пазов, которые будут запланированы в запуске, является самым близким предстоящим пазом, который удовлетворяет возможности времени для подготовки PUSCH UEs. Например, рисунок показывает способ, которым планировщик выбирает пазы во время двух последовательных запусков. Это принимает периодичность планировщика (p) как 3 паза. Следовательно, планировщик выполняется после каждых 3 пазов и планирует ресурсы для 3 пазов. Возможность времени для подготовки PUSCH всего UEs принята как больше, чем 1 паз (14 символов), но меньше чем 2 паза (28 символов).
Запуск 1: Когда планировщик запустится в начале Паза-A, он планирует 3 паза, начинающие с Паза-C, потому что для Паза-A и Вставляют-B UEs, не получают достаточно времени для подготовки PUSCH (UEs получает время 0 символов в начале Паза-A и 14 символов в начале Паза-B). Для Паза-C UEs получают 28 символов для подготовки PUSCH, и это удовлетворяет возможности времени для подготовки PUSCH. Следовательно, Паз-C, D, и E планируются в этом запуске.
Запуск 2: Когда планировщик запустится в начале Паза-D, он планирует следующие 3 непрерывных паза, начинающие с Паза-F (Паз-F, G, и H).
Планировщик DL
Первый паз, среди p пазов, которые будут запланированы в запуске, является мгновенным следующим пазом.
Запуск 1: Когда планировщик запустится в начале Паза-A, он планирует 3 непрерывных паза Slot-B, C, и D.
Запуск 2: Когда планировщик запустится в начале Паза-D, он планирует 3 непрерывных паза Slot-E, F, и G.
Можно выбрать любую из реализованных стратегий планирования: пропорциональная ярмарка (PF), лучший CQI или циклический алгоритм (RR). Различные поддерживаемые входные параметры к планировщику UL перечислены наряду со стратегиями планирования, которые рассматривают их.
Требуемые пакеты управления приняты, чтобы быть отправленными из полосы без потребности ресурсов для передачи. Пакеты управления являются присвоением UL, присвоением DL, буферным отчетом о состоянии (BSR) и обратной связью PDSCH.
Сигнал ссылки демодуляции (DM-RS) не моделируется в этом примере. Два символа в пазе сохранены неиспользованными через частотный диапазон выделений ресурса.
Этот пример модели:
Находящийся на пазе UL и планирование DL. Гранулярность временного интервала присвоения UL и присвоения DL является одним пазом.
Выделение, состоящее из нескольких несмежных участков, ресурсов частотного диапазона в терминах ресурса блокирует группы (RBGs).
Конфигурируемый интервал поднесущей (15, 30, 60 кГц) приводящий к различной длительности паза.
Асинхронный адаптивный гибридный автоматический повторный запрос (HARQ) механизм в UL и DL.
Несколько логических каналов, чтобы поддержать другой вид приложений.
Логическое установление приоритетов канала (LCP), чтобы распределить полученное присвоение среди логических каналов на UE для UL и DL.
Для симуляции, набор следующие ключевые параметры конфигурации.
Время симуляции
Количество UEs
Расстояние UEs от gNB (влияет на UL и значения DL CQI для UEs),
UL и шаблоны трафика приложения DL
Логическая настройка канала и ее связанная настройка сущности RLC UM
Периодичность BSRs, отправленного UEs, чтобы сообщить gNB о незаконченной буферной сумме
Планирование стратегии: PF, Лучший CQI, RR
Время для подготовки PUSCH для UEs
Пропускная способность поставщика услуг (и UL и DL) в терминах количества блоков ресурса (RBS)
Интервал поднесущей: 15, 30, 60 (kHz)
Начальный UL и значения DL CQI для UEs и их механизма обновления
Отношение успешной вероятности приема с качеством канала
rng('default'); % Reset the random number generator simParameters = []; % Clear the simParameters variable simParameters.NumFramesSim = 100; % Simulation time in terms of number of 10 ms frames % Number of UEs in the simulation. UEs are assumed to have sequential radio % network temporary identifiers (RNTIs) from 1 to NumUEs. If you change the % number of UEs, ensure that the length of simParameters.UEDistance is equal to NumUEs simParameters.NumUEs = 4; simParameters.UEDistance = [100 250 700 750]; % Distance of UEs from gNB (in meters) % Set the channel bandwidth to 30 MHz and subcarrier spacing (SCS) to 15 % kHz as defined in 3GPP TS 38.104 Section 5.3.2. The complete UL and % DL bandwidth is assumed to be allotted for PUSCH and PDSCH. The % UL and DL carriers are assumed to have symmetric channel % bandwidth simParameters.NumRBs = 160; simParameters.SCS = 15; % Configure parameters to update UL channel quality at gNB and DL % channel quality at gNB and UE. Channel conditions are periodically % improved or deteriorated by CQIDelta every channelUpdatePeriodicity % seconds for all RBs of a UE. Whether channel conditions for a particular % UE improve or deteriorate is randomly determined % RBCQI = RBCQI +/- CQIDelta simParameters.ChannelUpdatePeriodicity = 0.2; % In sec simParameters.CQIDelta = 2; % Mapping between distance from gNB (first column in meters) and maximum % achievable UL CQI value (second column). For example, if a UE is 700 % meters away from the gNB, it can achieve a maximum CQI value of 10 as the % distance falls within the [501, 800] meters range, as per the mapping. % Set the distance in increasing order and the maximum achievable CQI value in % decreasing order simParameters.CQIvsDistance = [ 200 15; 500 12; 800 10; 1000 8; 1200 7]; % Expression to calculate reception success probability of a PUSCH and % PDSCH TBs based on the channel quality. 'x' represents the average CQI of % the RBs over which the PUSCH and PDSCH packets are received simParameters.CQISuccessProb = '.5 + (x/20)'; simParameters.BSRPeriodicity = 5; % In ms simParameters.EnableHARQ = true; % Flag to enable or disable HARQ. If disabled, there are no retransmissions simParameters.NumHARQ = 16; % Number of HARQ processes in UEs % Set the scheduler run periodicity in terms of number of slots. Value must % be less than the number of slots in a 10 ms frame simParameters.SchedulerPeriodicity = 4; simParameters.SchedulerStrategy = 'PF'; % Supported scheduling strategies: 'PF', 'RR' and 'BestCQI' % Moving average parameter within the range [0, 1] to calculate average % data rate for a UE in either UL and DL. This value is used in % the PF scheduling strategy. Parameter value closer to 1 implies more % weight on the instantaneous data rate. Parameter value closer to 0 % implies more weight on the past data rate % AverageDataRate = ((1 - MovingAvgDataRateWeight) * PastDataRate) + (MovingAvgDataRateWeight * InstantaneousDataRate) simParameters.MovingAvgDataRateWeight = 0.5; % gNB ensures that PUSCH assignment is received at UEs PUSCHPrepTime ahead % of the transmission time simParameters.PUSCHPrepTime = 200; % In microseconds % Maximum RBs allotted to a UE in a slot for the UL and DL % transmission (limit is applicable for new PUSCH and PDSCH assignments and % not for the retransmissions) simParameters.RBAllocationLimitUL = 100; % For PUSCH simParameters.RBAllocationLimitDL = 100; % For PDSCH
Загрузите логическую таблицу настройки канала, содержащую эти поля.
RNTI - Радиосеть временный идентификатор UE.
LCID - Логический идентификатор канала.
LCGID - Логический идентификатор группы канала.
SnFieldLength - Задает длину поля порядкового номера. Это берет или 6 или 12.
MaxTxBufferLength - Максимальный buffer size Tx (в байтах).
ReassemblyTime - Задает таймер повторной сборки (в мс).
EntityDir - Задает множество сущностей RLC направление. Это принимает значения 0, 1, или 2. Значения указывают на настройку сущности RLC в направлении DL, направлении UL, или и UL и направление DL соответственно.
Приоритет - Приоритет логического канала.
PBR - Приоритизированный битрейт (в кБайт/с).
BSD - Длительность размера блока (в мс).
load('NRFDDRLCChannelConfig.mat')
simParameters.RLCChannelConfig = RLCChannelConfig;
Загрузите таблицу конфигурации приложения, содержащую эти поля.
PacketInterval - Интервал между двумя последовательными пакетными поколениями (в мс).
PacketSize - Размер пакета (в байтах).
HostDevice - Задает устройство (UE или gNB), на котором приложение установлено с заданной настройкой. Устройство принимает значения 0, 1, или 2. Значения указывают, что приложение сконфигурировано на gNB стороне, стороне UE, или и UE и gNB соответственно.
RNTI - Радиосеть временный идентификатор UE.
LCID - Логический идентификатор канала.
load('NRFDDAppConfig.mat');
simParameters.AppConfig = AppConfig;
Логгирование и настройка визуализации
% The parameters CQIVisualization and RBVisualization control the display % of these visualizations: (i) CQI visualization of RBs (ii) RB assignment % visualization. By default, these plots are disabled. You can enable them % by setting to 'true' simParameters.CQIVisualization = false; simParameters.RBVisualization = false; % The output metrics plots are updated periodically NumMetricsSteps times within the % simulation duration simParameters.NumMetricsSteps = 20; % MAT-files to write the logs into. They are used for post simulation analysis and visualization simParameters.ParametersLogFile = 'simParameters'; % For logging the simulation parameters simParameters.SimulationLogFile = 'simulationLogs'; % For logging the simulation logs % Validate the simulation configuration hNRSchedulingFDDValidateConfig(simParameters);
На основе первичных параметров конфигурации вычислите выведенные параметры. Кроме того, подайте некоторый пример определенные константы.
simParameters.DuplexMode = 0; % FDD % Slot duration for the selected SCS and number of slots in a 10 ms frame slotDuration = 1/(simParameters.SCS/15); % In ms numSlotsFrame = 10/slotDuration; % Number of slots in a 10 ms frame numSlotsSim = simParameters.NumFramesSim * numSlotsFrame; % Number of slots in the simulation % Periodicity of channel update in terms of number of slots channelUpdatePeriodicitySlots = floor((simParameters.ChannelUpdatePeriodicity * 1000)/ ... slotDuration); % Calculate maximum achievable CQI value for the UEs based on their distance from % the gNB maxUECQIs = zeros(simParameters.NumUEs, 1); % To store the maximum achievable CQI value for UEs for ueIdx = 1:simParameters.NumUEs % Based on the distance of the UE from gNB, find matching row in % CQIvsDistance mapping matchingRowIdx = find(simParameters.CQIvsDistance(:, 1) > simParameters.UEDistance(ueIdx)); if isempty(matchingRowIdx) maxUECQIs(ueIdx) = simParameters.CQIvsDistance(end, 2); else maxUECQIs(ueIdx) = simParameters.CQIvsDistance(matchingRowIdx(1), 2); end end % Interval at which metrics visualization updates in terms of number of % slots. As one slot is the finest time-granularity of the simulation, make % sure that MetricsStepSize is an integer simParameters.MetricsStepSize = ceil(numSlotsSim / simParameters.NumMetricsSteps); if mod(numSlotsSim, simParameters.NumMetricsSteps) ~= 0 % Update the NumMetricsSteps parameter if NumSlotsSim is not % completely divisible by it simParameters.NumMetricsSteps = floor(numSlotsSim / simParameters.MetricsStepSize); end
Создайте gNB и объекты UE, инициализируйте информацию о качестве канала для UEs и настройте логический канал в gNB и UE. Классы помощника hNRGNB.m и hNRUE.m создают gNB и узел UE соответственно, содержа слой RLC и MAC. Для слоя МАКа hNRGNB.m использует класс помощника hNRGNBMAC.m, чтобы реализовать функциональность gNB MAC, и hNRUE.m использует hNRUEMAC.m, чтобы реализовать функциональность УИ МАКА. Планировщик реализован в hNRGNBMACScheduler.m. Для слоя RLC и hNRGNB.m и hNRUE.m используют hNRUMTransmitter.m, чтобы реализовать функциональность передатчика RLC и hNRUMReceiver.m, чтобы реализовать функциональность получателя RLC.
gNB = hNRGNB(simParameters); % Create gNB node scheduler = hNRGNBMACScheduler(simParameters); % Create scheduler addScheduler(gNB, scheduler); % Add scheduler to gNB % Create the set of UE nodes UEs = cell(simParameters.NumUEs, 1); for ueIdx=1:simParameters.NumUEs UEs{ueIdx} = hNRUE(simParameters, ueIdx); end % Define initial UL and DL channel quality as an N-by-P matrix, % where N is the number of UEs and P is the number of RBs in the carrier % bandwidth. The initial value of CQI for each RB, for each UE, is given % randomly and is limited by the maximum achievable CQI value corresponding % to the distance of the UE from gNB uplinkChannelQuality = zeros(simParameters.NumUEs, simParameters.NumRBs); % To store current UL CQI values on the RBs for different UEs downlinkChannelQuality = zeros(simParameters.NumUEs, simParameters.NumRBs); % To store current DL CQI values on the RBs for different UEs for ueIdx = 1:simParameters.NumUEs % Assign random CQI values for the RBs, limited by the maximum achievable CQI value uplinkChannelQuality(ueIdx, :) = randi([1 maxUECQIs(ueIdx)], 1, simParameters.NumRBs); % Update the UL CQI values at gNB updateChannelQualityStatus(gNB, uplinkChannelQuality(ueIdx, :), 1, ueIdx); % 1 for UL % Initially, DL and UL CQI values are assumed to be equal downlinkChannelQuality(ueIdx, :) = uplinkChannelQuality(ueIdx, :); % Update the DL CQI values at gNB and UE. The DL CQI values % help gNB in scheduling, and UE in packet error probability estimation updateChannelQualityStatus(gNB, downlinkChannelQuality(ueIdx, :), 0, ueIdx); % 0 for DL updateChannelQualityStatus(UEs{ueIdx}, downlinkChannelQuality(ueIdx, :)); end % Setup logical channels for lchInfoIdx = 1:size(simParameters.RLCChannelConfig, 1) rlcChannelConfigStruct = table2struct(simParameters.RLCChannelConfig(lchInfoIdx, :)); ueIdx = simParameters.RLCChannelConfig.RNTI(lchInfoIdx); % Setup the logical channel at gNB and UE gNB.configureLogicalChannel(ueIdx, rlcChannelConfigStruct); UEs{ueIdx}.configureLogicalChannel(ueIdx, rlcChannelConfigStruct); end % Initialize buffers to exchange packets between UEs and gNB hNRPacketExchangeBuffer(simParameters);
Симуляция является пазом запуска пазом. В каждом пазе выполняются эти операции:
Условия канала обновления: Обновите UL и значения DL CQI в RBS для каждого UE на основе периодичности обновления канала.
Сгенерируйте трафик приложения: Сгенерируйте DL и трафик UL согласно заданным конфигурациям приложения.
Запустите планировщик: Если планировщик собирается запуститься в этом пазе (на основе его сконфигурированной периодичности), предоставьте ресурсы UL UEs для передачи и присвойте ресурсы DL UEs для приема. В одном запущенном планировщике можно запланировать ресурсы нескольких предстоящих пазов UL и DL. Для каждого запланированного паза, присвоения RBS для повторных передач выполняются сначала, сопровождаются присвоениями для новых передач, если существует какой-либо покинутый RBS. UE ограничивается максимумом 1 PUSCH и 1 присвоения PDSCH на паз.
Управление Tx (gNB): Создайте и отправьте UL и присвоения DL на основе присвоений, сделанных планировщиком.
Управляйте Rx (UE): UEs получают свой соответствующий UL и присвоения DL. UEs обрабатывают присвоения и хранят информацию, которая будет использоваться в передаче PUSCH и приеме PDSCH.
Данные Tx (gNB): gNB отправляет пакеты PDSCH, придерживающиеся ранее присвоения DL для этого паза.
Данные Tx (UE): UEs отправляют пакеты УЛА МАКА, придерживающиеся присвоений UL, полученных в более ранних пазах (если любой для этого паза).
Управляйте Tx (UE): На основе сконфигурированной периодичности BSR UEs отправляют BSR, чтобы передать незаконченную буферную сумму. UEs также отправляют отклик PDSCH.
Данные Rx (UE): UEs получают пакет PDSCH, который, как запланировали, передаст в этом пазе. UEs хранят результат успешности или неуспешности приема и их дальнейшее использование это, чтобы отправить отклик PDSCH как положительное подтверждение (ACK) или отрицательное подтверждение (NACK). Синхронизация отправки отклика для PDSCH основана (k1) смещения паза обратной связи, полученный в присвоении PDSCH.
Данные Rx (gNB): gNB получает пакеты PUSCH от UEs, который, как запланировали, передаст в этом пазе. Если прием перестал работать, создайте контекст повторной передачи для конкретного UE, который используется в присвоениях для повторных передач, когда планировщик запускается затем.
Управление Rx (gNB): Получите BSR и обратную связь PDSCH.
Логгирование и Визуализация: выход операций в gNB и UEs используется в логгировании и визуализации.
% To store these UE metrics for each slot: throughput bytes % transmitted, goodput bytes transmitted, and pending buffer amount bytes. % The number of goodput bytes is calculated by excluding the % retransmissions from the total transmissions UESlotMetricsUL = zeros(simParameters.NumUEs, 3); UESlotMetricsDL = zeros(simParameters.NumUEs, 3); % To store the RLC statistics for each slot ueRLCStats = cell(simParameters.NumUEs, 1); gNBRLCStats = cell(simParameters.NumUEs, 1); % Create an object for MAC (UL & DL) scheduling information visualization and logging simSchedulingLogger = hNRSchedulingLogger(simParameters); % To store the logical channel information associated per UE lchInfo = repmat(struct('LCID',[],'EntityDir',[]), [simParameters.NumUEs 1]); for ueIdx = 1:simParameters.NumUEs lchInfo(ueIdx).LCID = simParameters.RLCChannelConfig.LCID(simParameters.AppConfig.RNTI == ueIdx); lchInfo(ueIdx).EntityDir = simParameters.RLCChannelConfig.EntityDir(simParameters.AppConfig.RNTI == ueIdx); end % Create an object for RLC visualization and logging simRLCLogger = hNRRLCLogger(simParameters, lchInfo); symbolNum = 0; % Run processing loop for slotNum = 1:numSlotsSim % Update the UL and DL channel quality periodically if mod(slotNum, channelUpdatePeriodicitySlots) == 0 for ueIdx = 1:simParameters.NumUEs uplinkCQIRBs = getChannelQualityStatus(gNB, 1, ueIdx); % Current UL CQI values downlinkCQIRBs = getChannelQualityStatus(gNB, 0, ueIdx); % Current DL CQI values % Update CQI values for RBs by randomly varying the current % values by CQIDelta, limited by the minimum and maximum % achievable CQI index value. You can customize the updating of % CQI values as necessary. updateType = [1 -1]; % Improvement/deterioration uplinkChannelQualityChange = updateType(randi(length(updateType))); downlinkChannelQualityChange = updateType(randi(length(updateType))); updatedCQIs = min(max(uplinkCQIRBs + simParameters.CQIDelta*uplinkChannelQualityChange, 1), maxUECQIs(ueIdx)); % Update the UL channel quality at gNB (1 for UL) updateChannelQualityStatus(gNB, updatedCQIs, 1, ueIdx); updatedCQIs = min(max(downlinkCQIRBs + simParameters.CQIDelta*downlinkChannelQualityChange, 1), maxUECQIs(ueIdx)); % Update the DL channel quality at gNB and UE (0 for DL) updateChannelQualityStatus(gNB, updatedCQIs, 0, ueIdx); updateChannelQualityStatus(UEs{ueIdx}, updatedCQIs); end end % Generate the UL and DL application traffic for ueIdx = 1:simParameters.NumUEs appConfigIndexList = find(simParameters.AppConfig.RNTI == ueIdx); % Receive data from upper layers based on application traffic % pattern for appIdx = 1:numel(appConfigIndexList) lcid = simParameters.AppConfig.LCID(appConfigIndexList(appIdx)); % Application packet interval in terms of number of slots packetIntervalSlots = simParameters.AppConfig.PacketInterval(appConfigIndexList(appIdx))/slotDuration; if mod(slotNum, packetIntervalSlots) == 0 packetSize = simParameters.AppConfig.PacketSize(appConfigIndexList(appIdx)); deviceType = simParameters.AppConfig.HostDevice(appConfigIndexList(appIdx)); % If the packet size is more than 9000 bytes, segment it % into multiples of 9000. In this case, the last segmented % packet need not be of 9000 bytes numRLCSDUs = ceil(packetSize / 9000); rlcSDU = randi([0 255], 9000, 1); for rlcSDUIdx = 1:numRLCSDUs if (rlcSDUIdx == numRLCSDUs) && (mod(packetSize, 9000) ~= 0) rlcSDU = randi([0 255], mod(packetSize, 9000), 1); end if (deviceType == 1) || (deviceType == 2) % Send UL application traffic to UE RLC layer receiveRLCSDU(UEs{ueIdx}, ueIdx, lcid , rlcSDU); end if (deviceType == 0) || (deviceType == 2) % Send DL application traffic to gNB RLC layer receiveRLCSDU(gNB, ueIdx, lcid , rlcSDU); end end end end end % Run the gNB scheduler. Check if the scheduler is set to run in this % slot. If yes, schedule the resources and send the corresponding % UL assignments and DL assignments to UEs [resourceAssignmentsUL, resourceAssignmentsDL] = runSchedulerFDD(gNB); % Check if UL/DL assignments are done if ~isempty(resourceAssignmentsUL) || ~isempty(resourceAssignmentsDL) % Construct and send UL assignments and DL assignments to UEs controlTx(gNB, resourceAssignmentsUL, resourceAssignmentsDL); end % Run the Rx operation at UEs for simultaneous reception of control % packets for ueIdx = 1:simParameters.NumUEs controlRx(UEs{ueIdx}); % Receive UL assignments and DL assignments, if any sent by gNB end % Send the PDSCH packets, if any scheduled dataTx(gNB); % Read throughput and goodput bytes sent for each UE [UESlotMetricsDL(:, 1), UESlotMetricsDL(:, 2)] = getCurrTTIBytes(gNB); UESlotMetricsDL(:, 3) = getBufferStatus(gNB); % Read pending buffer (in bytes) on gNB % Send the UL packets, if any scheduled for ueIdx = 1:simParameters.NumUEs % UE sends the PUSCH packet if it is a Tx slot (as conveyed by gNB in earlier received UL assignments) dataTx(UEs{ueIdx}); % Read throughput and goodput bytes transmitted for this UE in the current TTI (for logging purpose) [UESlotMetricsUL(ueIdx, 1), UESlotMetricsUL(ueIdx, 2)] = getCurrTTIBytes(UEs{ueIdx}); UESlotMetricsUL(ueIdx, 3) = getBufferStatus(UEs{ueIdx}); % Read pending buffer (in bytes) on UE % UE sends BSR packet and PDSCH ACK/NACK controlTx(UEs{ueIdx}); end rxResultUEsDL = cell(simParameters.NumUEs, 1); for ueIdx = 1:simParameters.NumUEs % Receive the PDSCH packets from gNB that are scheduled to % receive in this slot. Return the information of Rx % success/failure rxResultUEsDL{ueIdx} = dataRx(UEs{ueIdx}); end % Receive the PUSCH packets from UEs that are scheduled to receive in % this slot. Return the information of Rx success/failure rxResultUEsUL = dataRx(gNB); % Run the Rx operation at gNB for simultaneous reception of control % packets controlRx(gNB); % Receive BSR and PDSCH ACK/NACK HARQProcessStatusUL = zeros(simParameters.NumUEs, simParameters.NumHARQ); % To store last sent HARQ process NDI flag HARQProcessStatusDL = zeros(simParameters.NumUEs, simParameters.NumHARQ); % To store last sent HARQ process NDI flag % Get RLC statistics, HARQ process context, and channel quality % information for logging purpose for ueIdx = 1:simParameters.NumUEs ueRLCStats{ueIdx} = getRLCStatistics(UEs{ueIdx}, ueIdx); gNBRLCStats{ueIdx} = getRLCStatistics(gNB, ueIdx); % Read the last received NDI flags for UE HARQ processes (for % logging purpose) HARQProcessStatusUL(ueIdx, :) = getLastNDIFlagHarq(UEs{ueIdx}, 1); % 1 for UL HARQProcessStatusDL(ueIdx, :) = getLastNDIFlagHarq(UEs{ueIdx}, 0); % 0 for DL % Read the UL channel quality at gNB for each of the UEs (For % logging purpose) uplinkChannelQuality(ueIdx,:) = getChannelQualityStatus(gNB, 1, ueIdx); % 1 for UL % Read the DL channel quality at gNB for each of the UEs (For % logging purpose) downlinkChannelQuality(ueIdx,:) = getChannelQualityStatus(gNB, 0, ueIdx); % 0 for DL end logRLCStats(simRLCLogger, ueRLCStats, gNBRLCStats); % Update scheduling logs based on the current slot run of UEs and gNB. % Logs are updated in each slot, RB grid visualizations are updated % every frame, and metrics plots are updated every metricsStepSize % slots logScheduling(simSchedulingLogger, symbolNum + 1, resourceAssignmentsUL, UESlotMetricsUL, uplinkChannelQuality, HARQProcessStatusUL, rxResultUEsUL, 1); logScheduling(simSchedulingLogger, symbolNum + 1, resourceAssignmentsDL, UESlotMetricsDL, downlinkChannelQuality, HARQProcessStatusDL, rxResultUEsDL, 0); % RB assignment visualization (if enabled) if simParameters.RBVisualization if mod(slotNum, numSlotsFrame) == 0 plotRBGrids(simSchedulingLogger); end end % CQI grid visualization (if enabled) if simParameters.CQIVisualization if mod(slotNum, numSlotsFrame) == 0 plotCQIRBGrids(simSchedulingLogger); end end % Plot scheduler metrics and RLC metrics visualization at slot % boundary, if the update periodicity is reached if mod(slotNum, simParameters.MetricsStepSize) == 0 plotMetrics(simSchedulingLogger); plotMetrics(simRLCLogger); end % Advance timer ticks for gNB and UEs by the number of symbols per slot advanceTimer(gNB, 14); for ueIdx = 1:simParameters.NumUEs advanceTimer(UEs{ueIdx}, 14); end % Symbol number in the simulation symbolNum = symbolNum + 14; end
% Get MAC scheduling logs [dlTimeStepLogs, ulTimeStepLogs] = getSchedulingLogs(simSchedulingLogger); schedulingLogs = getGrantLogs(simSchedulingLogger); % Scheduling assignments log % Get RLC statistics logs rlcLogs = getRLCLogs(simRLCLogger);
Пять типов показанной визуализации во время выполнения:
Отображение значений CQI для UEs по пропускной способности PUSCH/PDSCH: Для получения дополнительной информации смотрите 'Качественную фигуру' Визуализации Канала в NR PUSCH FDD, Планируя пример.
Отображение присвоения сетки ресурса на UEs: 2D сетка частоты времени показывает распределение ресурсов UEs. Это обновляет каждые 10 мс (длина системы координат) и показывает выделение RB UEs в предыдущей системе координат. Для получения дополнительной информации смотрите 'фигуру' Выделения Сетки Ресурса в NR PUSCH FDD, Планируя пример.
Отображение метрических графиков УЛА МАКА: четыре графика, отображенные в 'Восходящей фигуре' показателей производительности Планировщика, представляют: пропускная способность UL (на UE и ячейку), полезная пропускная способность UL (на UE и ячейку), процент доли ресурса среди UEs (из общих ресурсов UL), чтобы передать справедливость планирования и ожидания буферное состояние UL UEs, чтобы показать, получают ли UEs достаточные ресурсы. Показатели производительности строят обновление для каждого metricsStepSize
пазы.
Отображение метрических графиков ДЛ МАКА: Как метрические графики UL, 'Нисходящие показатели производительности Планировщика' отображают соответствующие подграфики для направления DL. Показатели производительности строят обновление для каждого metricsStepSize
пазы.
Отображение метрических графиков RLC: 'рисунок' Визуализации Пропускной способности RLC показывает пропускную способность логического канала RLC для выбранного UE. Метрики RLC строят обновление для каждого metricsStepSize
пазы.
Параметры, используемые в симуляции и журналах симуляции, сохранены в MAT-файлах для анализа методом моделирования сообщения и визуализации. Параметры симуляции сохранены в MAT-файле с именем файла как значение параметра конфигурации simParameters.ParametersLogFile
. На журналы временного шага, планируя журналы присвоения и журналы RLC сохранены в MAT-файле simParameters.SimulationLogFile
. После симуляции откройте файл, чтобы загрузить timeStepLogs
, schedulingAssignmentLogs
, и rlcLogs
в рабочей области.
Журналы временного шага: таблица показывает запись в журнале шага шага расчета UL и DL. Каждая строка таблицы представляет паз.
Каждая строка содержит:
Система координат: Структурируйте номер.
Паз: Номер слота в системе координат.
Битовый массив Выделения RBG: N-by-P побитово отображают матрицу, где N является количеством UEs, и P является количеством RBGs. Если RBG присвоен конкретному UE, соответствующий бит установлен в 1. Например: [0 0 1 1 0 1 0 1 0 1 0 0 0; 1 1 0 0 0 0 0 0 0 0 1 0 0; 0 0 0 0 1 0 1 0 1 0 0 1 1; 0 0 0 0 0 0 0 0 0 0 0 0 0] подразумевает, что пропускная способность имеет 13 RBGs, и UE-1 присвоен индексы RBG: 2, 3, 5, 7, 9; UE-2 присвоен индексы RBG: 0, 1, 10; UE-3 присвоен индексы RBG: 4, 6, 8, 11, 12; и UE-4 не присвоен никакой RBG.
MCS: Вектор-строка из длины N, где N является количеством UEs. Каждое значение соответствует схеме модуляции и кодирования (MCS) индекс для передачи PUSCH/PDSCH. Например: [10 12 8 - 1] подразумевает, что только UE-1, UE-2 и UE-3 являются присвоенными ресурсами для этого паза, и они используют значения MCS 10, 12, и 8 соответственно.
Процесс HARQ: Вектор-строка из длины N, где N является количеством UEs. Значение является ID процесса HARQ, используемым UE в передаче PUSCH или используемым gNB в передаче PDSCH. Например: [0 3 6 - 1] подразумевает, что только UE-1, UE-2 и UE-3 являются присвоенными ресурсами для этого паза, и они используют ID процесса HARQ 0, 3, и 6 соответственно.
NDI: Вектор-строка из длины N, где N является количеством UEs. Значение является флаговым значением NDI в предоставлении на передачу PUSCH/PDSCH. Например: [0 0 1 - 1] подразумевает, что только UE-1, UE-2 и UE-3 являются присвоенными ресурсами для этого паза и флаговых значений NDI (чтобы решить, сделать ли новую передачу, или повторная передача) 0, 0, и 1 соответственно.
Тип Tx: тип Передачи (новая передача или повторная передача). Вектор-строка из длины N, где N является количеством UEs. Заданные значения являются или 'newTx', 'reTx', или 'noTx'. 'noTx' подразумевает, что UE не выделен ресурсы PUSCH/PDSCH. Например: ['newTx' 'newTx' 'reTx' 'noTx'] подразумевает, что только UE-1, UE-2 и UE-3 являются присвоенными ресурсами для этого паза. UE-1 и UE-2 передают новый пакет от заданного процесса HARQ, в то время как UE-3 только ретранслирует пакет в буфере заданного процесса HARQ.
CQI для UEs: матрица N-by-P, где N является количеством UEs и P, является количеством RBS в пропускной способности. Элемент матрицы A в положении (i, j) соответствует значению CQI для UE с RNTI i в RB j.
Состояние HARQ NDI: матрица N-by-P, где N является количеством UEs и P, является количеством процессов HARQ на UEs. Элементом матрицы A в положении (i, j) является последний полученный флаг NDI в UE i для DL или ID процесса UL HARQ j. В случае новой передачи должны переключиться это значение и флаг NDI в присвоении PUSCH/PDSCH. Например, в пазе 1 системы координат 5 описанных в предыдущем журнале, UE-1 использует ID HARQ '0', и последнее флаговое значение NDI для ID HARQ '0' в UE-1 равняется 1. Флаговое значение NDI переключается к '0' в присвоении PUSCH, чтобы указать на новую передачу.
Байты пропускной способности: Вектор-строка из длины N, где N является количеством UEs. Значения представляют байты MAC UL/DL, переданные и для UEs в этом пазе. Общие байты пропускной способности для передачи PUSCH/PDSCH показывают в строке, соответствующей первому пазу передачи.
Байты полезной пропускной способности: Вектор-строка из длины N, где N является количеством UEs. Значения представляют новые байты MAC передачи UL/DL, переданные и для UEs в этом пазе. Как пропускная способность, все байты полезной пропускной способности показывают в строке, соответствующей первому пазу передачи.
Буферное Состояние UEs: Вектор-строка из длины N, где N является количеством UEs. Значения представляют сумму направления UL, ожидающего буферы в UEs (или направления DL, ожидающего буферы для UEs в gNB)
Успех/Отказ Rx: Вектор-строка из длины N, где N является количеством UEs. Заданными значениями является или 'RxSuccess', 'RxFailure' или 'noRx'. 'noRx' не подразумевает DL (или UL) запланированный. Например: ['RxSuccess' 'RxSuccess' 'RxFailure' 'noRx'] подразумевает, что пакеты от UE-1 и UE-2 получены успешно, в то время как пакет от UE-3 не был или получен или был поврежден. UE-4 не был запланирован для этого паза.
Планирование журналов присвоения: информация всех присвоений планирования и связанный информация зарегистрирована этот файл. Таблица показывает демонстрационные записи в журнале.
Журналы RLC: Каждая строка в журналах RLC представляет паз и содержит:
Система координат: Структурируйте номер.
Паз: Номер слота в системе координат.
Статистика UE RLC: ячейка N-by-P, где N является продуктом количества UEs и количества логических каналов и P, является количеством собранных статистических данных. Каждая строка представляет статистику логического канала в UE.
статистика gNB RLC: ячейка N-by-P, где N является продуктом количества UEs и количества логических каналов и P, является количеством собранных статистических данных. Каждая строка представляет статистику логического канала UE в gNB.
Последняя строка содержит совокупную статистику RLC целой симуляции.
Таблица показывает демонстрационную запись в статистике UE RLC. Подобные журналы доступны в статистике gNB RLC.
Каждая строка таблицы представляет логический канал UE и содержит:
RNTI: Радиосеть временный идентификатор UE.
LCID: Логический идентификатор канала.
TxPDCPPDU: Количество PDUs, отправленного пакетным протоколом сходимости данных (PDCP) в слой RLC.
TxPDCPPDUBytes: Количество байтов, отправленных PDCP в слой RLC.
TxRLCSDUDiscarded: Количество RLC SDUs, отброшенного слоем RLC из-за переполнения буфера Tx.
TxRLCSDUDiscardedBytes: Количество отброшенных байтов слоем RLC из-за переполнения буфера Tx.
TxRLCPDU: Количество PDUs, отправленного RLC в слой MAC.
TxRLCPDUBytes: Количество байтов, отправленных RLC в слой MAC.
RxPDCPPDU: Количество PDUs получено PDCP от слоя RLC.
RxPDCPPDUBytes: Количество байтов получено PDCP от слоя RLC.
RxRLCPDU: Количество PDUs получено RLC от слоя MAC.
RxRLCPDUBytes: Количество байтов получено RLC от слоя MAC.
RxRLCPDUDuplicate: Количество дублирующегося PDUs получено RLC от слоя MAC.
RxRLCPDUDuplicateBytes: Количество дублирующихся байтов получено RLC от слоя MAC.
RxRLCPDUDropped: Количество полученного PDUs, исключенного RLC из слоя MAC.
RxRLCPDUDroppedBytes: Количество пропущенных байтов RLC получено от слоя MAC.
TimerReassemblyTimedOut: Число раз таймер повторной сборки истекло.
Можно запустить скрипт NRSchedulingFDDPostSimVisualization.m
получить визуализацию симуляции сообщения журналов. В скрипте симуляции сообщения вам предоставляют переменную isLogReplay, который предоставляет эти возможности визуализировать 'Выделение Сетки Ресурса' и 'Качественные фигуры' Визуализации Канала.
Установите isLogReplay на истину для воспроизведения журналов симуляции.
Установите isLogReplay на ложь анализировать детали конкретной системы координат. В окне 'Resource Grid Allocation', вход номер системы координат, чтобы визуализировать присвоение ресурса для целой системы координат. Номер системы координат, введенный здесь, управляет номером системы координат для 'Качественной Визуализации Канала', фигурируют также.
save(simParameters.ParametersLogFile, 'simParameters'); % Save simulation parameters in a MAT-file save(simParameters.SimulationLogFile, 'ulTimeStepLogs', ... 'dlTimeStepLogs', 'schedulingLogs', 'rlcLogs'); % Save simulation logs in a MAT-file
Можно изменить существующий UL и DL планирование функциональности, чтобы запланировать ресурсы паза. Планирование ресурсов UL паза реализовано в scheduleULResourcesSlot
функция hNRGNBMACScheduler.m. Заполните выход slotULGrants
из этой функции, с массивом допустимого UL планирование присвоений. slotULGrants может иметь одно присвоение на UE. Каждым элементом в этом массиве является предоставление PUSCH на UE. Структура предоставления PUSCH имеет эти поля:
RNTI
: RNTI присвоенного UE. Это поле не является частью фактического пакета предоставления, отправленного в UEs.
Type
: Является ли присвоение для новой передачи ('newTx') или повторной передачи ('reTx')). Это поле не является частью фактического пакета предоставления, отправленного в UEs, потому что поле NDI достаточно, чтобы передать ту информацию.
HARQIndex
: Выбрал ID процесса UL HARQ.
RBGAllocationBitmap
: Присвоение ресурса частотного диапазона. Битовый массив групп блока ресурса пропускной способности PUSCH. Значение 1 указывает, что RBG присвоен UE.
StartSymbol
: Начальный символ PUSCH предоставляет ресурсы. Сохраните в 0.
NumSymbols
: Количество символов в предоставлении PUSCH. Сохраните в 14.
SlotOffset
: Смещение паза присвоений PUSCH относительно текущего паза.
MCS
: Выбранная схема модуляции и кодирования.
NDI
: Новый флаг индикатора данных.
RV
: Версия сокращения.
Рисунок показывает ресурсы UL паза, распределяемого в четырех присвоениях PUSCH. Это также показывает содержимое первого предоставления.
Точно так же the scheduleDLResourcesSlot
функция hNRGNBMACScheduler.m реализует соответствующую функциональность DL. Присвоение PDSCH имеет одно дополнительное поле 'FeedbackSlotOffset'. Поле является смещением паза времени передачи ACK/NACK от паза приема PDSCH.
Setting выход для функций scheduleULResourcesSlot
и scheduleDLResourcesSlot
позволяет вам управлять присвоением всего RBGs паза целиком. Можно также управлять присвоением каждого RBG паза. Для ссылки вы видите, что существующее планирует стратегии, существующие в функциях помощника hNRSchedulingStrategyBestCQI.m, hNRSchedulingStrategyPF.m, и hNRSchedulingStrategyRR.m. Планирование функции стратегии называется однажды для каждого из остающихся RBGs, после того, как присвоения для повторных передач будут завершены. Функция берет структуру в качестве входа и возвращает выбранный UE, которому RBG присвоен наряду с соответствующим индексом MCS. Чтобы записать пользовательскую стратегию планирования, используйте информацию во входной структуре, чтобы установить выход. Входная структура содержит эти поля:
eligibleUEs
: RNTI имеющего право UEs, борющегося за RBG.
slotNum
: Номер слота в системе координат, которая будет запланирована.
RBGIndex
: RBG индексируют в slotNum
быть запланированным.
RBGSize
: Размер RBG в терминах количества RBS.
cqiRBG
: Качество канала RBG. Матрица N-by-P со значениями UL CQI для имеющего право UEs на различном RBS RBG. N является количеством имеющего право UEs, и P является RBGSize
.
pastDataRate
: Вектор-строка из длины N содержащий историческую достигнутую скорость передачи данных UEs. N является количеством имеющего право UEs.
bufferStatus
Вектор-строка из длины N содержащий ожидающий буферное состояние для UEs. N является количеством имеющего право UEs.
mcsRBG
: Матрица N-2, содержащая индекс MCS и соответствующий КПД (подходящий согласно значениям CQI на RBS RBG). N является количеством имеющего право UEs. КПД является битами/символом, учитывающими и схему модуляции и кодирующими уровень.
ttiDur
: Длительность TTI в мс.
UEs
: RNTI всего UEs.
lastSelectedUE
: RNTI UE, который был присвоен последнему, запланировал RBG.
Стратегия планирования может использовать подмножество предыдущих полей, чтобы принять решение. Чтобы реализовать пользовательскую стратегию планирования, создайте файл функции NewStrategy.m
и в настройке сценария, установленной параметр simParameters.SchedulerStrategy
к 'NewStrategy'
. Следуйте за шаблоном существующих стратегий функциональной подписи.
На основе выбранной стратегии планирования этот пример показывает присвоение UL и ресурсов DL к нескольким UEs gNB. Физический уровень абстрагирован в примере. Отображение визуализации во время выполнения сетки ресурса дает подробную информацию о RBS, выделенном каждому UE и ID процесса HARQ, присвоенному для передачи. UL и DL планирование производительности анализируются на основе графиков во время выполнения пропускной способности MAC, полезной пропускной способности MAC, справедливости доли ресурса и незаконченного буферного состояния на UEs. Более полный анализ методом моделирования сообщения при помощи сохраненных журналов дает подробное изображение операций, происходящих на на основание паза.
Пример использует эти функции помощника и классы:
hNRNodeBase.m: базовый класс узла NR
hNRGNB.m: функциональность узла gNB
hNRUE.m: функциональность узла UE
hNRMACBase.m: функциональность базового класса MAC NR
hNRGNBMAC.m: функциональность gNB MAC
hNRGNBMACScheduler.m: функциональность планировщика gNB MAC
hNRUEMAC.m: функциональность УИ МАКА
hNRMACBSR.m: Генерирует буферный отчет о состоянии
hNRMACBSRParser.m: Синтаксические анализы буферизуют отчет о состоянии
hNRMACSubPDU.m: Генерирует MAC subPDU
hNRMACPaddingSubPDU.m: Генерирует MAC subPDU с дополнением
hNRMACMultiplex.m: Генерирует PDU MAC
hNRMACPDUParser.m: PDU MAC Синтаксических анализов
hNewHARQProcesses.m: Создает новый процесс HARQ
hUpdateHARQProcess.m: Обновления процесс HARQ
hPDSCHTBS.m: Вычисляет транспортный размер блока PDSCH
hPUSCHTBS.m: Вычисляет транспортный размер блока PUSCH
hNRUplinkGrantFormat.m: UL предоставляют формат
hNRDownlinkGrantFormat.m: DL предоставляют формат
hNRSchedulingStrategyBestCQI.m: Реализации лучший CQI планирование стратегии
hNRSchedulingStrategyPF.m: Реализует пропорциональную справедливую стратегию планирования
hNRSchedulingStrategyRR.m: циклический алгоритм Реализаций планирование стратегии
hNRUMTransmitter.m: функциональность передатчика RLC UM
hNRUMReceiver.m: функциональность получателя RLC UM
hNRUMDataHeader.m: Генерирует заголовок PDU RLC UM
hNRUMDataPDUDecode.m: Декодирует PDU RLC
hNRUMDataPDUInfo.m: Создает информационный объект PDU RLC
hNRRLCBufferStatus.m: Генерирует буферный объект информации о статусе RLC
hNRPacketExchangeBuffer.m: пакет Реализаций обменивается буферами между UE и gNB
hNRSchedulingLogger.m: Реализации планируя информационную функциональность логгирования и визуализации
hNRRLCLogger.m: Реализации логгирование статистики RLC и функциональность визуализации
hNRSchedulingFDDValidateConfig.m: Подтверждает настройку симуляции
[1] 3GPP TS 38.104. “NR; передача радио Базовой станции (BS) и прием”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.
[2] 3GPP TS 38.214. “NR; процедуры Физического уровня для данных”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.
[3] 3GPP TS 38.321. “NR; спецификация протокола Среднего управления доступом (MAC)”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.
[4] 3GPP TS 38.322. “NR; спецификация протокола Управления линией радиосвязи (RLC)”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.
[5] 3GPP TS 38.331. “NR; спецификация протокола Радио-управления ресурсами (RRC)”. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.