NR Interference Modeling with Toroidal Wrap-Around
This example shows how to model a 19-site cluster with toroidal wrap-around, as described in ITU-R M.2101-0. This example uses the system-level channel model specified in 3GPP TR 38.901. The wrap-around provides uniform interference at the cluster edge. All the cells in the cluster operate in the same frequency band with the serving 5G base station node (gNB) at the center of the cell. You can enable or disable the wrap-around to observe that with wrap-around, the performance metrics of an edge cell become similar to the center cell.
Introduction
This example models:
A 19-site cluster with three cells/site, giving a total of 57 cells. A site is represented by 3 colocated gNBs with directional antennas covering 120 degrees area (that is, 3 sectors per site).
Co-channel intercell interference with wrap-around modeling for removing edge effects.
System-level channel model based on 3GPP TR 38.901.
Downlink shared channel (DL-SCH) data transmission and reception.
DL channel quality measurement by user equipment (UE) nodes, based on the CSI-RS received from the gNB.
Uplink shared channel (UL-SCH) data transmission and reception.
UL channel quality measurement by gNBs, based on the SRS received from the UE nodes.
This example assumes that nodes send the control packets (buffer status report (BSR), DL assignment, UL grants, PDSCH feedback, and CSI report) out of band, eliminating the requirement for transmission resources and ensuring error-free reception.
Toroidal Wrap-around Modeling
To simulate the behavior of a cellular network without introducing edge effects, this example models an infinite cellular network by using toroidal wrap-around. The entire network region relevant for simulations is a cluster of 19 sites (shown bold in this figure). The left-hand figure shows the network region of 19 sites without wrap-around. Site 0 of the central cluster, shown in red, is uniformly surrounded and experiences interference from all sides. A cell in an edge site like site 15 experiences less interference. In the right-hand figure, the wrap-around repeats the original cluster six times to uniformly surround the central cluster.
The wrap-around model treats the signal or interference from any UE node to a cell as if that the UE node is in the original cell cluster and the gNB in any of the seven clusters specified in ITU-R M.2101-0. The distances used to compute the path loss from a transmitter node at to a receiver node at is the minimum of these seven distances.
Distance between and
Distance between and , where is the distance between two adjacent gNBs (inter-site distance)
Distance between and
Distance between and
Distance between and
Distance between and
Distance between and
These equations are derived from the equations in ITU-R M.2101-0 Attachment 2 to Annex 1. In 3GPP TR 38.901 and in the figure above, the rings of 6 and 12 sites around the central site are orientated differently from the orientations in ITU-R M.2101-0, so modified equations are required.
If you disable wrap-around, then the distance between nodes is the Euclidean distance.
Scenario Configuration
Check if the Communications Toolbox Wireless Network Simulation Library support package is installed. If the support package is not installed, MATLAB® returns an error with a link to download and install the support package.
wirelessnetworkSupportPackageCheck
Create a wireless network simulator.
rng('default'); % Reset the random number generator numFrameSimulation = 1; % Simulation time in terms of number of 10 ms frames networkSimulator = wirelessNetworkSimulator.init();
Create cell sites, sectors, and UE nodes in each cell for the urban macro (UMa) scenario.
numCellSites = 19; % Number of cell sites isd = 500; % Inter-site distance in meters numSectors = 3; % Number of sectors for each cell site numUEs = 2; % Number of UEs to drop per cell % Toroidal wrap-around supports 3 cell sites with 3 sectors, or 7 or 19 cell sites with 1 or 3 sectors. wrapping = true; % Enable toroidal wrap-around modeling of cells. Set it to false to disable toroidal wrap-around % Create the scenario builder scenario = h38901Scenario(Scenario="UMa",FullBufferTraffic="on",NumCellSites=numCellSites,InterSiteDistance=isd,NumSectors=numSectors,NumUEs=numUEs,Wrapping=wrapping); % Build the scenario, adding the gNB and UE nodes to the simulator configureSimulator(scenario,networkSimulator);
Create the system-level channel model for the scenario, and connect it to the simulator. Connect the gNB and UE nodes to the channel.
% Create the channel model channel = h38901Channel(Scenario="UMa"); % Connect the channel model to the simulator addChannelModel(networkSimulator,@channel.channelFunction); % Connect the gNB and UE nodes to the channel connectNodes(channel,networkSimulator);
Logging and Visualization Configuration
Set the enableTraces
to true
to log the traces. If the enableTraces
is set to false
, then the simulation does not log traces. However, setting enableTraces
to false
can speed up the simulation.
enableTraces = true;
Set up scheduling logger and phy logger for the cells of interest.
% Select the cells (that is, the sites and sectors) that require collection of traces and metrics. siteOfInterest = [0 15]; sectorOfInterest = [2 2]; numCellsOfInterest = length(siteOfInterest); if enableTraces simSchedulingLogger = cell(numCellsOfInterest,1); simPhyLogger = cell(numCellsOfInterest,1); for cellIdx = 1:numCellsOfInterest % Obtain the gNB and UE nodes for the cell of interest from the scenario object [gNB,UEs] = getNodesForCell(scenario,siteOfInterest,sectorOfInterest,cellIdx); % Create an object to log scheduler traces simSchedulingLogger{cellIdx} = helperNRSchedulingLogger(numFrameSimulation,gNB,UEs); % Create an object to log PHY traces simPhyLogger{cellIdx} = helperNRPhyLogger(numFrameSimulation,gNB,UEs); end end
The example updates the metrics plots periodically. Specify the number of updates during the simulation.
numMetricsSteps = 5;
Set up metric visualizers.
metricsVisualizer = cell(numCellsOfInterest,1); for cellIdx = 1:numCellsOfInterest % Obtain the gNB and UEs for the cell of interest from the scenario object [gNB,UEs] = getNodesForCell(scenario,siteOfInterest,sectorOfInterest,cellIdx); % Create visualization object for the MAC and PHY metrics metricsVisualizer{cellIdx} = helperNRMetricsVisualizer(gNB,UEs,NumMetricsSteps=numMetricsSteps,PlotSchedulerMetrics=true,PlotPhyMetrics=true,CellOfInterest=siteOfInterest(cellIdx)); end
Write the logs to MAT-files. You can use these logs for post-simulation analysis.
simulationLogFile = "simulationLogs";
Simulation
Run the simulation for the specified numFrameSimulation
frames.
% Calculate the simulation duration (in seconds) simulationTime = numFrameSimulation * 1e-2; % Run the simulation run(networkSimulator,simulationTime);
Simulation Visualization
For the cells of interest, run time visualizations show various performance indicators at multiple time steps during the simulation. For a detailed description, see the NR Cell Performance Evaluation with MIMO example.
At the end of the simulation, compare the achieved values for system performance indicators with theoretical peak values (considering zero overheads). Performance indicators displayed are achieved data rate (UL and DL), achieved spectral efficiency (UL and DL), and block error rate (BLER) observed for UEs (UL and DL). The calculated peak values are in accordance with 3GPP TR 37.910.
Note that to get meaningful results, the simulation has to be run for a longer duration and for a larger number of UE nodes per cell.
for cellIdx = 1:numCellsOfInterest fprintf('\n\nMetrics for site %d, sector %d :\n\n',siteOfInterest(cellIdx),sectorOfInterest(cellIdx)); displayPerformanceIndicators(metricsVisualizer{cellIdx}); end
Metrics for site 0, sector 2 :
Peak UL throughput: 54.64 Mbps. Achieved cell UL throughput: 0.81 Mbps Achieved UL throughput for each UE: [0.4 0.4] Peak UL spectral efficiency: 2.73 bits/s/Hz. Achieved UL spectral efficiency for cell: 0.04 bits/s/Hz Block error rate for each UE in the UL direction: [0 0] Peak DL throughput: 75.37 Mbps. Achieved cell DL throughput: 13.01 Mbps Achieved DL throughput for each UE: [0 13.01] Peak DL spectral efficiency: 3.77 bits/s/Hz. Achieved DL spectral efficiency for cell: 0.65 bits/s/Hz Block error rate for each UE in the DL direction: [1 0]
Metrics for site 15, sector 2 :
Peak UL throughput: 54.64 Mbps. Achieved cell UL throughput: 0.00 Mbps Achieved UL throughput for each UE: [0 0] Peak UL spectral efficiency: 2.73 bits/s/Hz. Achieved UL spectral efficiency for cell: 0.00 bits/s/Hz Block error rate for each UE in the UL direction: [1 1] Peak DL throughput: 75.37 Mbps. Achieved cell DL throughput: 13.11 Mbps Achieved DL throughput for each UE: [0 13.11] Peak DL spectral efficiency: 3.77 bits/s/Hz. Achieved DL spectral efficiency for cell: 0.66 bits/s/Hz Block error rate for each UE in the DL direction: [1 0]
Simulation Logs
Save the simulation logs related to cells of interest into a MAT file. For a description of the simulation logs format, see the NR Cell Performance Evaluation with MIMO example.
if enableTraces simulationLogs = cell(numCellsOfInterest,1); for cellIdx = 1:numCellsOfInterest % Obtain the gNB for the cell of interest from the scenario object gNB = getNodesForCell(scenario,siteOfInterest,sectorOfInterest,cellIdx); if gNB.DuplexMode == "FDD" logInfo = struct('DLTimeStepLogs',[],'ULTimeStepLogs',[],... 'SchedulingAssignmentLogs',[],'PhyReceptionLogs',[]); [logInfo.DLTimeStepLogs,logInfo.ULTimeStepLogs] = getSchedulingLogs(simSchedulingLogger{cellIdx}); else % TDD logInfo = struct('TimeStepLogs',[],'SchedulingAssignmentLogs',[],'PhyReceptionLogs',[]); logInfo.TimeStepLogs = getSchedulingLogs(simSchedulingLogger{cellIdx}); end % Obtain the scheduling assignments log logInfo.SchedulingAssignmentLogs = getGrantLogs(simSchedulingLogger{cellIdx}); % Obtain the phy reception logs logInfo.PhyReceptionLogs = getReceptionLogs(simPhyLogger{cellIdx}); simulationLogs{cellIdx} = logInfo; end % Save simulation logs in a MAT-file save(simulationLogFile,'simulationLogs'); end
Local Functions
function [gNB,UEs] = getNodesForCell(scenario,siteOfInterest,sectorOfInterest,cellIdx) siteIdx = siteOfInterest(cellIdx) + 1; sectorIdx = sectorOfInterest(cellIdx) + 1; numCellSites = numel(scenario.CellSites); if (siteIdx > numCellSites) warning('The cell site of interest (%d) does not exist, using the last cell site (%d).',siteIdx-1,numCellSites-1); siteIdx = numCellSites; end numSectors = numel(scenario.CellSites(siteIdx).Sectors); if (sectorIdx > numSectors) warning('For cell site %d, the sector of interest (%d) does not exist, using the last sector (%d).',siteIdx-1,sectorIdx-1,numSectors-1); sectorIdx = numSectors; end gNB = scenario.CellSites(siteIdx).Sectors(sectorIdx).BS; UEs = scenario.CellSites(siteIdx).Sectors(sectorIdx).UEs; end
References
[1] 3GPP TS 38.104. “NR; Base Station (BS) radio transmission and reception.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
[2] 3GPP TS 38.214. “NR; Physical layer procedures for data.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
[3] 3GPP TS 38.321. “NR; Medium Access Control (MAC) protocol specification.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
[4] 3GPP TS 38.322. “NR; Radio Link Control (RLC) protocol specification.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
[5] 3GPP TS 38.323. “NR; Packet Data Convergence Protocol (PDCP) specification.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
[6] 3GPP TS 38.331. “NR; Radio Resource Control (RRC) protocol specification.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.
[7] 3GPP TR 37.910. “Study on self evaluation towards IMT-2020 submission.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.