GithubHelp home page GithubHelp logo

sonohi / monster Goto Github PK

View Code? Open in Web Editor NEW
23.0 10.0 9.0 161.01 MB

MONSTeR is a framework built around the LTE system toolbox available in Matlab

License: MIT License

MATLAB 99.49% Objective-C 0.12% Jupyter Notebook 0.39%
lte matlab toolbox simulation

monster's People

Contributors

abdullahsaei avatar artuso0matteo avatar fedech avatar jakthra avatar ma-unumed avatar monstermarkus avatar mychele avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

monster's Issues

Merge computePathLoss functions

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.

Interferrence calculations

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');
`

Handover stasis after successful handover

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.

Lower bound on NULRB

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).

Refactorize plotting functions to classes

Base class for plotting should be created. The structure of ENBsummaryPlot and UEsummayPlot can be utilized. functions/scripts to be refactorized includes:

  • createLayoutPlot
  • createPHYplot
  • plotConstDiagramDL
  • plotcoverage
  • plotlinks
  • plotSpectrums

I imagine a parent class that handles base functionalties, such as parent handles and such. Each plot type can then inherit this.

Interference bug detected

The interference module causes irregularities in the demodulated constellation diagrams - not sure if this makes sense or it is a bug. Need to do a bit of digging in the interference method (possibily even a refactorization given changes to the channel model integration)
image

Ubuntu path not found

Hi guys,
FYI, on Ubuntu before running one should call addpath(genpath('./')), otherwise it does not recognize the correct path.

Harq index out of bounds

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.

Performance metrics class

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.

Basic backhaul

Implementation of a basic backhaul network with EPC node and link simulation.

Memory issue with many users

Possibly identified to be caused by the 'trajectory' property of users. It's of size 600000x2. Needs to be reduced to some reasonable resolution.

Move macro center position and extend grid for mobility

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.

Live plotting is broken

The live plotting handles do not seem to show the correct information. Missing are plots of:

  • constellations (rx and tx)
  • ue specific parameters
  • enb specific parameters

Run default config of monsterconfig with SimulationPlot.runtimePlot = 1

Environment

  • OS: Windows 10
  • Matlab Version 2018b

Using resource grid to determine number of available PRB in schedule

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.

Autogenerate error trace-back log

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.

Implement round robin scheduler in UL

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 variable traffic model

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.

WINNER II unstability

WINNER II integration is currently unstable due to the many limitation of parameters. This includes primarily:

  • BuildingFootprints and general layout must (for some reason) be positive.
  • Different requirements to the defined scenarios which are not checked by the offered implementation, documentation is ambiguous on this.
  • problem with 3d model of antenna arrays, only 2d distances are considered.

SINR scaling issues with 3GPP antenna array

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.

SINR example 2
SINR example

  • OS: Windows
  • Matlab Version 2018b

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.