Reply To: Non-Orthogonal Multiple Access scenario Error

#13092
Gandolf
Participant

Good day Bashar.
It is the original NOMA.m file that comes with the 5G Link level zipped file. I however pasted the NOMA.m code here. Thank you.

% parameter file for the NOMA scenario from "Versatile Mobile Communications Simulation: The Vienna 5G Link Level Simulator"
%
% The setup is as follows: We have two cells (BSs) with 72 subcarriers each.
% The first cell supports two users only and therefore each one gets 36
% subcarriers, while the second cell supports MUST operation and therefore
% can have two groups of two superimposed users (in the power-domain). In 
% each group, one of the superimposed users has a much higher pathloss than 
% the other one (i.e., a cell edge user). The results are obtained over the
% transmit power of the BSs. This scenario then shows the gain/impact of the 
% MUST operation compared to the case when it is not enabled.

% What to expect: UE1, UE2 and will be performing unaffected (orthogonal). 
% UE3 and UE4 will suffer a performance loss at the low SNR regime due to 
% the extra interference from UE5 and UE6, respectively. Overall, cell 2 will 
% perform better since it can squeeze in UE5 and UE6 and therefore will have 
% a higher downlink throughput when the transmit power is sufficiently high.

%% Topology
% Specifiy all the nodes in ascending order with starting
% index of 1 (BS0 or UE0 is not allowed).
scStr.topology.nodes             = ['BS1,BS2,UE1,UE2,UE3,UE4,UE5,UE6'];         

% Primary (desired) links
scStr.topology.primaryLinks      = [ 'BS1:UE1,'...           
                                    'BS1:UE2,'... 
                                    'BS2:UE3,'... 
                                    'BS2:UE4,'... 
                                    'BS2:UE5,'... 
                                    'BS2:UE6'
                                    ];
                                            
% Links for Joint Tranmission and Detection (future work)                         
scStr.topology.jointTxRxLinks               = [''];  

% Interference Links   
scStr.topology.interferenceGeneration       = 'Automatic';
             
scStr.topology.attenuation                  = 300;                      % in dB, set a very high attenuation level to virtually decouple the two BS
scStr.topology.interferingLinks             = [];

%% General Simulation Parameters
% set link types to simulate
scStr.simulation.simulateDownlink           = true;                     % downlink
scStr.simulation.simulateUplink             = false;                    % uplink
scStr.simulation.simulateD2D                = false;                    % device to device links

% Plot options
scStr.simulation.plotResultsFor             = [1];
scStr.simulation.plotOverSNR                = false;
scStr.simulation.saveData                   = false; 

% Define a sweep parameter
scStr.simulation.sweepParam                 = {'simulation.txPowerBaseStation'};  % Define the parameter to sweep over. This can be almost any simulation parameter.
                                                                        % Most likely it will be the pathloss to obtain results over SNR.
                                                                        
scStr.simulation.sweepValue                 = linspace(-30,40,8);       % Define parameter values to sweep over, in dB. A good starting point for the pathloss is 150 to 110
scStr.simulation.applySweepingTo            = [1];

% Number of simulation frames
scStr.simulation.nFrames                    = 100;                      % Number of frames to simulate per sweep value, adjust to obtain sufficiently small confidence intervals.

%% Physical Transmission Parameters
scStr.simulation.centerFrequency            = 2.5e9;                    % center frequency

scStr.simulation.txPowerBaseStation         = [30];                     % per BS; base station total transmit power in dBm
scStr.simulation.txPowerUser                = [30];                     % per UE; user total transmit power in dBm

scStr.simulation.nAntennasBaseStation       = [2];                      % per BS; number of antennas at the base station
scStr.simulation.nAntennasUser              = [2];                      % per UE; number of antennas at the user
scStr.simulation.userVelocity               = [0];                      % per UE; velocity in m/s

% Links to UE1 and UE3 have pathloss of 80, UE2 and UE4 of 90, and UE5 and UE6 of 110 and 115, respectively (cell edge).
scStr.simulation.pathloss                   = [80,90,80,90,110,115];    % per Link, channel pathloss in dB, this is most likely swept over

% Nonlinearity model
scStr.simulation.downlinkNonlinearity       = false;                    % Apply Rapp nonlinear model to downlink channels: either true of false                                                          
scStr.simulation.amplifierOBO               = [1];                      % Amplifier output back-off, per BS, in dB
scStr.simulation.smoothnessFactor           = [3];                      % Smoothness factor for the Rapp model, per BS, >=0

%% Channel Parameters
scStr.channel.dopplerModel                  = 'Discrete-Jakes';        
scStr.channel.timeCorrelation               = false;
scStr.channel.spatialCorrelation            = 'none';            
scStr.channel.nPaths                        = 50;
scStr.channel.powerDelayProfile             = 'PedestrianA';
scStr.channel.K                             = 0;
scStr.channel.delta                         = 1;

%% Channel Estimation and Equalization Parameters
scStr.simulation.channelEstimationMethod    = 'Approximate-Perfect';
scStr.simulation.noisePowerEstimation       = false;                                                          
scStr.simulation.pilotPattern               = 'LTE Downlink';                                                        
scStr.simulation.equalizerType              = 'One-Tap';
scStr.simulation.receiverTypeMIMO           = 'MMSE';

%% MIMO Parameters
% Layer mapping
scStr.layerMapping.mode                     = '5G'; 
scStr.layerMapping.table.Uplink             = {1;2;[1,2]};
scStr.layerMapping.table.Downlink           = {1;2;[1,2]};  

% MIMO mode
scStr.modulation.transmissionMode           = 'CLSM';
scStr.modulation.delayDiversity             = 1;

%% Feedback Parameters
scStr.feedback.delay                        = 0;
scStr.feedback.averager.Type                = 'miesm';
scStr.modulation.cqiTable                   = 0; 

% for the custom transmission mode the following parameters are used to configure the feedback
scStr.feedback.enable                       = false;                    % this parameter is ignored, the feedback is automatically enabled for the CLSM transmission mode
scStr.feedback.pmi                          = false;
scStr.feedback.ri                           = false;
scStr.feedback.cqi                          = true; 
                                                                
scStr.modulation.nStreams                   = [2];                   % per Link; number of active spatial streams
scStr.modulation.mcs                        = [15];                     % parameter is unused
% Per link, precoder selection (used when feedback is disabled)
scStr.modulation.precodingMatrix{1}         = 1/sqrt(2)*ones(2,2);   % per Link; employed precoding matrix

%% Modulation Parameters
% waveform
scStr.modulation.waveform                   = {'OFDM'};
                                                                        
% parameters for FBMC
scStr.modulation.prototypeFilter            = 'PHYDYAS-OQAM';           % unused for OFDM
% Parameters for UFMC  
scStr.modulation.nSubcarriersPerSubband     = [12];                     % number of subcarriers per subband

% time and bandwidth setup (number of subcarriers, frame duration, CP
% length, sampling rate)
scStr.modulation.numerOfSubcarriers         = [72];                     % per BS; number of used subcarriers
scStr.modulation.subcarrierSpacing          = [15e3];                   % per BS; per base station in Hz
scStr.modulation.nSymbolsTotal              = [15];                     % per BS; total number of time-symbols per frame, the frame duration will be nSymbolsTotal/subcarrierSpacing
scStr.modulation.nGuardSymbols              = [1];                      % per BS; select how many of the total time-symbols will be used as guard symbols (cyclic prefix in OFDM)
scStr.modulation.samplingRate               = 'Automatic';              % sampling rate has to be the same for all nodes (across all base stations):
                                                                        % either numeric value for manual setting or 'Automatic'

%% Channel Coding Parameters
% All links are operating with the same coding parameters, enter it only once.
scStr.coding.code                           = {'Turbo'};                                                              
scStr.coding.decoding                       = {'MAX-Log-MAP'};                                                                     
scStr.coding.decodingIterations             = [8];

%% Schedule
% static schedule per base station

% BS1 does Orthogonal Multiple Access
scStr.schedule.fixedScheduleDL{1}           = ['UE1:36,UE2:36'];        % schedule for BS1 Downlink
scStr.schedule.fixedScheduleUL{1}           = [];                       % No uplink for BS1.

% BS2 does MUST operation
scStr.schedule.fixedScheduleDL{2}           = ['UE3:36,UE4:36,UE5:UE3,UE6:UE4'];    % schedule for BS2 Downlink
scStr.schedule.fixedScheduleUL{2}           = [];                                   % No uplink for BS2.

Kind regards.
Gandolf