Dear VCCS team,
I am doing a simulation of a simple system that consists of 2 pico base stations, 3 pedestrian and 3 vehicular users all with predefined positions. For the first scenario, I am analyzing system without NOMA pairing and that gives me expected performance as given on the following photo. Throughput for user 5 is 1.37 Mbps and for user 6 is 4.07 Mbps.
In the second scenario I am using NOMA pairing by deltadB=3 dB which makes one NOMA pair in the simulation: 5th and 6th user. When I get performance results I see that BLER for these users is very high which results in throughput being 0 Mbps for both users in NOMA pair. Is there some reasoning behind this behaviour? The results are given in the following photo:
I tested similar scenario with using just one pico base station and I get the results that I expect: when using NOMA getting higher throughput for cell center users and lower throughput for cell edge users in regards to the same scenario without NOMA.
Here is my scenario file:
> function params = HetNet(params)
>
> %% General Configuration
> % time config
> params.time.slotsPerChunk = 10;
> params.time.feedbackDelay = 1; % small feedback delay
>
> % set NOMA parameters
> params.noma.interferenceFactorSic = 1; % no error propagation
> params.noma.deltaPairdB = 3;
> params.noma.mustIdx = parameters.setting.MUSTIdx.Idx01;
> % perform NOMA transmssion even if far user CQI is low - this will increase th number of failed transmissions
> params.noma.abortLowCqi = false;
>
> % disable HARQ - not compatible with NOMA
> params.useHARQ = false;
>
> % define the region of interest & boundary region
> params.regionOfInterest.xSpan = 300;
> params.regionOfInterest.ySpan = 300;
>
> % set carrier frequency and bandwidth
> params.carrierDL.centerFrequencyGHz = 1.805; % in GHz
> params.transmissionParameters.DL.bandwidthHz = 10e6; % in Hz
>
> % associate users to cell with strongest receive power - favor femto cell association
> params.cellAssociationStrategy = parameters.setting.CellAssociationStrategy.maxReceivePower;
> params.pathlossModelContainer.cellAssociationBiasdB = [0, 0, 0];
>
> % weighted round robin scheduler - scheduling weights are set at the user
> params.schedulerParameters.type = parameters.setting.SchedulerType.roundRobin;
>
> % additional object that should be saved into simulation results
> params.save.losMap = true;
> params.save.isIndoor = true;
>
> %% pathloss model container
> indoor = parameters.setting.Indoor.indoor;
> outdoor = parameters.setting.Indoor.outdoor;
> LOS = parameters.setting.Los.LOS;
> NLOS = parameters.setting.Los.NLOS;
>
> % pico base station models
> pico = parameters.setting.BaseStationType.pico;
> params.pathlossModelContainer.modelMap{pico, indoor, LOS} = parameters.pathlossParameters.FreeSpace;
> params.pathlossModelContainer.modelMap{pico, indoor, NLOS} = parameters.pathlossParameters.FreeSpace;
> params.pathlossModelContainer.modelMap{pico, outdoor, LOS} = parameters.pathlossParameters.FreeSpace;
> params.pathlossModelContainer.modelMap{pico, outdoor, NLOS} = parameters.pathlossParameters.FreeSpace;
>
>
> %% Configuration of the Network Elements
> % pico base stations along a straight street
> posPico = [-100,100;...
> 0,0];
> streetPicoBS = parameters.basestation.PredefinedPositions();
> streetPicoBS.positions = posPico;
> streetPicoBS.antenna = parameters.basestation.antennas.Omnidirectional;
> streetPicoBS.antenna.nTX = 1;
> streetPicoBS.antenna.height = 5;
> streetPicoBS.antenna.baseStationType = parameters.setting.BaseStationType.pico;
> streetPicoBS.antenna.transmitPower = 35;
> params.baseStationParameters('pico') = streetPicoBS;
>
>
> % pedestrian users
> % % poissonPedestrians = parameters.user.Poisson2D();
> posPed = [-50,50, 100;...
> 100,-100, -20;...
> 1,2,3];
> poissonPedestrians = parameters.user.PredefinedPositions();
> poissonPedestrians.positions = posPed;
> % poissonPedestrians.nElements = 4; % number of users placed
> poissonPedestrians.nRX = 1;
> poissonPedestrians.speed = 0; % static user
> poissonPedestrians.userMovement.type = parameters.setting.UserMovementType.ConstPosition;
> poissonPedestrians.schedulingWeight = 10; % assign 10 resource blocks when scheduled
> poissonPedestrians.indoorDecision = parameters.indoorDecision.Random(0.5);
> poissonPedestrians.losDecision = parameters.losDecision.UrbanMacro5G;
> poissonPedestrians.channelModel = parameters.setting.ChannelModel.PedA;
> params.userParameters('poissonUserPedestrian') = poissonPedestrians;
>
> % car user distributed through a Poisson point process
> posVeh = [-100, 20,0;...
> -100, 50,0;...
> 1, 2, 3];
> poissonCars = parameters.user.PredefinedPositions();
> poissonCars.positions = posVeh;
> % poissonCars = parameters.user.Poisson2D();
> % poissonCars.nElements = 4;
> poissonCars.nRX = 1;
> poissonCars.speed = 50;
> poissonCars.userMovement.type = parameters.setting.UserMovementType.RandConstDirection;
> poissonCars.schedulingWeight = 20; % assign 20 resource blocks when scheduled
> poissonCars.indoorDecision = parameters.indoorDecision.Static(parameters.setting.Indoor.outdoor);
> poissonCars.losDecision = parameters.losDecision.UrbanMacro5G;
> poissonCars.channelModel = parameters.setting.ChannelModel.VehB;
> params.userParameters('poissonUserCar') = poissonCars;
>
> end
Thank you in advance for your help.
Best,
Džana