sonohi / monster Goto Github PK
View Code? Open in Web Editor NEWMONSTeR is a framework built around the LTE system toolbox available in Matlab
License: MIT License
MONSTeR is a framework built around the LTE system toolbox available in Matlab
License: MIT License
Two functions exist for computing path loss. One is accelerated using matrix operations. We should have 1, and it should be able to handle both matrix and scalar operations.
There seems to be no SINR for users clearly in high interference areas.
`%% SIMULATION PARAMETERS
clear all
Param.reset = 0;% Boolean used to reset the folder structure and reload everything
Param.rmResults = 0;% Boolean to clean the results folder
Param.logToFile = 0; % Boolean, if true all logs are re-directed to a file in /logs
% Boolean used to enable the drawing of plots and other cool stuff
Param.draw = 1;
% Booelan used to store the transmission data, that is each TB, codeword, waveform
Param.storeTxData = 0;
% Integer used to control the number of scheduling rounds (subframes) to simulate
Param.schRounds = 10;
Param.seed = 42;% Integer used for the simulation seed
Param.mobilitySeed = 19; % Integer for randomizing user positioning and trajectories
% Boolean to save a whole LTE frame for the macro eNodeB for testing
Param.saveFrame = 1;
%% Draw functions
Param.generateHeatMap = 0;% Boolean to control the generation of a heatmap of the pathloos in the scenario
Param.heatMapType = 'perStation';% String to control the type of heatmap
Param.heatMapRes = 10;% Heatmap resoultion in metres
%% Network
Param.numSubFramesMacro = 50;% Integer used to set the number of RBs for a macro eNodeB
Param.numSubFramesMicro = 25;% Integer used to set the number of RBs for a micro eNodeB
Param.numSubFramesPico = 6;% Integer used to set the number of RBs for a pico eNodeB
Param.numSubFramesUE = 25;% Integer used to set the number of RBs for the uplink
Param.numMacro = 1;% Integer used to specify the number of macro eNodeBs in the scenario (currently only 1)
Param.macroHeight = 35;% Double used to specify the height in metres of the macro eNodeBs
Param.numMicro = 7;% Integer used to specify the number of micro eNodeBs in the scenario (currently max 12 if hexagonal is chosen)
Param.microPos = 'hexagonal'; % Array of char to decide the positioning of the micro BS (uniform, random, clusterized, hexagonal)
Param.microUniformRadius = 500;% Double radius of distance from centre for microBS in metres
Param.microHeight = 25;% Double used to specify the height in metres of the micro eNodeBs
Param.numPico = 3;% Integer used to specify the number of pico eNodeBs in the scenario
Param.picoPos = 'uniform'; % Array of char to decide the positioning of the micro BS (uniform, random)
Param.picoUniformRadius = 500;% Double radius of distance from centre for picoBS in metres
Param.picoHeight = 5;% Double used to specify the height in metres of the pico eNodeBs
Param.numEnodeBs = Param.numMacro + Param.numMicro + Param.numPico;
Param.ueHeight = 1.5;% Double used to specify the height in metres of the UEs
Param.numUsers = 15;% Integer used for the number of UEs
Param.mobilityScenario = 'pedestrian';% Integer to choose the mobility scenario (pedestrian, vehicular, static, superman, straight)
Param.buildings = 'mobility/buildings.txt';% Path for loading the file with the buildings
Param.mobilityStep = 0.01;
Param.pucchFormat = 2;% PUCCH format (only 2 and 3 work)
Param.handoverTimer = 0.01;% X2 Handover timer in s (time needed from starting and handover to its completion)
%% Traffic
Param.primaryTrafficModel = 'webBrowsing'; % Primary traffic model ['fullBuffer', 'videoStreaming', 'webBrowsing']
Param.secondaryTrafficModel = 'videoStreaming'; % Secondary traffic model ['fullBuffer', 'videoStreaming', 'webBrowsing']
Param.trafficMix = 0.5; % Mix in the UEs between primary and secondary traffic models in %
Param.ueArrivalDistribution = 'Static'; % Arrival distribution for the UEs ['Poisson', 'Uniform', 'Static']
Param.poissonLambda = 5; % Mean of the Poisson process in ms
Param.uniformLower = 6; % Lower limit of the Uniform process in ms
Param.uniformUpper = 10; % Upper limit of the Uniform process in ms
Param.staticStart = 0; % Static start time in ms
%% Positioning (TR 36.872) - Only for "clusterized" microPos setting
Param.macroRadius = 250; % radius of the macro cell
Param.minUeDist = 20; % minimum distance between UEs and macro
Param.numClusters = 1; % number of clusters
Param.ueClusterRadius = 70; % radius of a cluster for UE placement
Param.microClusterRadius = 50; % radius of a cluster for micro placement
Param.minClusterDist = 105; % minimum distance between cluster center and macro
Param.interClusterDist = 100; % minimum distance between cluster centers
Param.microDist = 20; % minimum distance between micro cells
%% Physical layer
Param.ulFreq = 1747.5;% Double used for the uplink carrier frequency in MHz
Param.dlFreq = 1842.5;% Double used for the downlink carrier frequency in MHz
Param.prbSym = 160;% Integer used for the number of OFMD symbols in a RB
Param.ueNoiseFigure = 7;% Double used for the UE noise figure in dB
Param.eNBNoiseFigure = 7;% Double used for the BS noise figure in dB
Param.eNBGain = 0; %Antenna gain of the eNB.
Param.prbRe = 168;% Integer used for the number of RE in a RB
Param.PRACHInterval = 10; %Given as the number of subframes between each PRACH.
%% Channel configuration
Param.channel.modeDL = '3GPP38901';% String to control the channel mode in DL ['winner', 'eHATA', 'ITU1546', '3GPP38901']
Param.channel.modeUL = 'B2B';% String to control the channel mode in UL
Param.channel.region = 'Urban';% String to control the channel region
Param.channel.enableFading = true;
Param.channel.enableInterference = true;
Param.channel.enableShadowing = true; % Only capable for 3GPP38901
Param.channel.computeCoverage = false; %Only a visualization feature. Force the recomputation of the coverage, otherwise loaded from file if stored.
Param.channel.LOSMethod = '3GPP38901-probability'; % ['fresnel', '3GPP38901-probability']
% WINNER CONFIGURATION, only if 'winner is used'. See docs for the different varieties.
if strcmp(Param.channel.modeDL,'winner')
Param.channel.region = struct();
Param.channel.region.macroScenario = '11';
Param.channel.region.microScenario = '3';
Param.channel.region.picoScenario = '3';
elseif strcmp(Param.channel.modeDL, '3GPP38901')
Param.channel.region = struct();
Param.channel.region.macroScenario = 'UMa';
Param.channel.region.microScenario = 'UMi';
Param.channel.region.picoScenario = 'UMi';
end
%% SON parameters
Param.nboRadius = 100;% Double to set the maximum radius within which eNodeBs are considered as neighbours in metres
Param.tHyst = 0.001;% Double to set the hysteresis timer threshold in s
Param.tSwitch = 0.001;% Double to set the eNodeB switching on/off timer in s
Param.utilLoThr = 1;% Integer for the threshold for the low utilisation range (>= 1)
Param.utilHiThr = 100;% Integer for the threshold for the high utilisation range (<= 100)
Param.otaPowerScale = 1; % Value to scale the OTA power.
%% Scheduling
Param.scheduling = 'roundRobin';% String for the scheduling policy to use (currently only 'roundRobin')
Param.refreshAssociationTimer = 0.010;% Double to choose the interval in s to run refreshUsersAssociation
Param.icScheme = 'none';
Param.absMask = [1,0,1,0,0,0,0,0,0,0];
%%%%% SETUP STUFF - DON'T TOUCH UNLESS YOU KNOW WHAT YOU'RE DOING
%% HARQ & ARQ
Param.harq.rtxMax = 3;% Integer to choose the maximum number of HARQ retransmissions
Param.harq.rv = [1,3,2];% Integer array for the redundacy version values
Param.harq.proc = 8;% Integer to choose the number of parallerl HARQ processes
Param.harq.tout = Param.harq.proc/2 -1;
Param.rtxOn = 1;% Boolean used to enable retransmissions
Param.arq.bufferFlusTimer = 20;% Timer for flushing out of place TBs in the RLC buffer in seconds
Param.arq.maxBufferSize = 1024;% Maximum number of TBs that the RLC can store at the same time as integer
Param.arq.rtxMax = 1;% Integer to choose the maximum number of ARQ retransmissions
%% PHY
Param.maxTbSize = 97896;% Double used for the maximum size of a TB for storing in bits
Param.maxCwdSize = 10e5;% Double used for the maximum size of a codeword for storing in bits
%% Buildings
Param.buildings = load(Param.buildings);
Param.buildingHeight = [20,50];% Double interval used to specify the height interval in metres of the buildings
Param.area = [min(Param.buildings(:, 1)), min(Param.buildings(:, 2)), ...
max(Param.buildings(:, 3)), max(Param.buildings(:, 4))];
Param.buildings(:,5) = randi([Param.buildingHeight],[1 length(Param.buildings(:,1))]);
save('SimulationParameters.mat', 'Param');
`
Once a handover is completed, the UE should be allowed a configurable period of stasis.
During this period, the UE is not allowed to perform HO to other eNodeBs so that the "ping-pong" effect is minimised.
Constellation plots are normalized, so the numbers are not representative. Adding units could be considered.
Currently if more than 5 users are associated with the same station, the NULRB per user goes below 5, which makes the toolbox break (6 is minimum).
The bug happens when setting 1 eNodeB per type and setting the MacroEnb.radius to 500
Base class for plotting should be created. The structure of ENBsummaryPlot
and UEsummayPlot
can be utilized. functions/scripts to be refactorized includes:
I imagine a parent class that handles base functionalties, such as parent handles and such. Each plot type can then inherit this.
See issue #100
I'm unsure if this is actually a bug, or if the 3GPP 38.901 document assumes intra-cell interference coordination schemes. A thorough investigation of macro radiation patterns is to be conducted.
Expected:
Higher SINR than 14-16 dB in 1 site considering 3 cells with the sectorised antenna.
For areas larger than default 300x300 elevation algoritm does not produce the correct result.
For more than one type of eNBs (macro, micro, pico) the figure does not include all stations, just the last ones. The last ones can vary from 2 to 9, when changing the total numbers of stations between 2 and 16.
RSRP, RSRQ and RSSI measurements are only performed when a user is scheduled. They should be performed regardless for each user.
Hi guys,
FYI, on Ubuntu before running one should call addpath(genpath('./'))
, otherwise it does not recognize the correct path.
In the EvolvedNodeB class only reset function of scheduleDL can be found whereas both set and reset functions are present for the scheduleUL property
When simulating (15 UEs), the legends for the first 10 are repeated including the trajectories.
They should be saved as NaN.
See stack:
Index exceeds matrix dimensions.
Error in HarqTx/handleReply (line 134)
sqnBits = obj.processes(iProc).tb(4:13);
Error in enbDataDecoding (line 35)
[enb.Mac.HarqTxProcesses(harqIndex), state, sqn] =
enb.Mac.HarqTxProcesses(harqIndex).handleReply(...
Error in simulate (line 239)
[Stations, Users] = enbDataDecoding(Stations, Users, Param, simTime);
Error in main (line 111)
simulate(Param, simData, utilLo(iUtilLo), utilHi(iUtilHi));
the variable obj.processes.tb is empty for all processes.
Currently only B2B is possible.
Right now MetricRecorder record metrics every scheduling round. Maybe this is not always needed.
Currently, the recording of performance metrics in the toolbox is done using a couple of utilities that condense metrics for stations and users.
These should be replaced by a performance metric class that has methods to record performance metrics and encapsulates some of the key functionalities like dumping to file, etc.
Implementation of a basic backhaul network with EPC node and link simulation.
Possibly identified to be caused by the 'trajectory' property of users. It's of size 600000x2. Needs to be reduced to some reasonable resolution.
Add an additional field in the schedule structure to hold whether the scheduled operation is on new data or a RTX
Power applied per frame instead of per symbol. Should be computed per symbol.
Currently, it's only dependent on the configuration of the UE and the round, meaning such optional pilots as SRS are not considered.
With the introduction of pico type cells, the range and position of the station have a posibility to exceed into negative x and y values. This makes the WINNER layout break. Move the center of the micro cell and extend the building grid to ensure positive values in x,y positions.
Commit #9 fixes this for now. However the variable should not be empty in the first place since the user is checked to be scheduled.
The live plotting handles do not seem to show the correct information. Missing are plots of:
Run default config of monsterconfig with SimulationPlot.runtimePlot = 1
Environment
In the schedule function (line 16), the calculated available PRB are taken from the resource grid, which is unavailable as it is done later. This means that nothing is scheduled at all. The schedule function should be able to calculate the number of available PRBs based on round a configuration, making it independent from the resource grid.
It does seem out of place to have such an eNB specific function unintegrated within the eNB class.
In order to recreate issues the configuration is required (e.g. seed, number of stations, channel mode etc.). Implement the functionality to autogenerate an error trace-back log that prints the configuration if a crash is detected.
The following transmission metrics should be set to NaN when the user is not scheduled to transmit data.
Currently in very congested cases it could happen that certain UEs end up not being scheduled as the lower limit on the assigned UL PRBs is 6. A round robin can overcome this limitation
Implementation of a variable traffic model so that UEs can have different traffic arrival patterns, such as the Poisson arrival process.
It could be interesting if the traffic types could be mixed, such that some UEs follow the video streaming model while others follows the full buffer model.
ITU has a long list of regions, same goes for WINNER and eHATA. Need a mapping function that checks the correct is used.
Creates two functions of code for handling either, could be reduced to one function, see getScheduled in SonohiChannel
WINNER II integration is currently unstable due to the many limitation of parameters. This includes primarily:
Also missing documentation.
see MMobility.setParameters function.
Since a number of different bandwidths can be simulated (especially given the NB-IoT stuff), it would make sense to add atmospheric noise to the overall link budget calculations.
https://se.mathworks.com/help/phased/examples/modeling-the-propagation-of-rf-signals.html
The SINR value ranges are low given the channel conditions. A maximum of 16 dB SINR is observed when using the 3GPP 38.901 defined antenna propagation pattern.
It is expected that positions closer to the station are of higher SINR dB value. This is furthermore shown by plotting only one station. Additionally, the interference considered between stations seems excessive. This could indicate a radiation pattern with a wrongly defined cutoff.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.