Vienna 5G LL Simulator – New Release 1.2

Viewing 15 posts - 1 through 15 (of 18 total)
  • Author
  • #13683
    Mariam Mussbah

    Dear Community,

    We are happy to announce a new release of the Vienna 5G Link Level Simulator, that is version 1.2.

    The simulator is provided for free under an academic non-commercial use license.

    To get the simulator, please consider the license agreement here and follow the instructions therein. In case you already have a license, please contact Zeyu Huang to get the latest release of the simulator. Companies – no matter whether profit-oriented or not – can purchase a license.

    The new features and improvements are listed in the changelog below. Please also consider the list of features and the documentation of the new version.

    For further information visit the Vienna 5G Simulator webpage

    Best regards,
    The Vienna Cellular Communications Simulators Team

    – support 1024QAM modulation with feedback
    – implementation of spatially and temporally correlated Spatial Channel Model
    – multi-user MIMO transmission modes with feedback
    – symbol domain orthogonal pilot symbols for multi-user MIMO channel estimation
    – TDD mode with feedback
    – support per-codeword feedback
    – support sum-throughput plotting


    how to get the newest release for 5G Link Level Simulator software ??

    Mariam Mussbah

    Dear YuanLiang,

    To get the simulator, please consider the license agreement here and follow the instructions therein. In case you already have a license, please contact me to get the latest release of the simulator.

    Best regards


    Dear Sir,
    I am using Matlab R2018b in running the version 1.2 of Vienna 5G link level simulator.
    I wish to clarify with you that whether I did correctly in getting the result of few Mbit/s in terms of downlink throughput speed because I am expecting speed of Gigabit/s in 5G.

    Mariam Mussbah

    Dear Louishao,

    The maximum achievable throughput is determined by the parameters in the scenario file. You can increase the maximum achievable throughput by choosing a higher modulation and coding scheme, increasing the number of sub-carriers and by increasing the number of streams.

    Best regards,


    Dear Sir,
    I am using Matlab R2018b in running the version 1.2 of Vienna 5G link level simulator.
    May I ask what parameters in the ‘massiveMIMO’.m file should I change if I wish to use a
    1024-QAM modulation and coding scheme in order to get a higher throughput value?

    Thank You.

    Mariam Mussbah

    Dear Louishao,

    To use 1024-QAM modulation you have to set scStr.modulation.cqiTable = 2 and scStr.modulation.mcs = 15.

    Best regards,


    Dear Sir,
    I am using Vienna 5G LLS. I see that before OFDM modulation, there is a normalization factor that is multiplied with the modulated data (in function WaveformObject.Modulation). What is the reason behind this handling?

    Narayanan. R

    Mariam Mussbah

    Dear Narayanan,

    The data is multiplied by the normalization factor so that the power equals one.


    Roaa Ali

    Dear Mariam,
    I use vienna 5G LL Simulator 1.2
    when increase number of users in cell NOMA for 34 user in implement appear error
    Error in Modulation.OFDM/SetDependentParameters (line 84)
    obj.Implementation.NormalizationFactor = sqrt( obj.PHY.SamplingRate^2 / obj.PHY.SubcarrierSpacing^2 / obj.Nr.Subcarriers); %
    Normalization factor so that power = 1
    Error in Modulation.Modulator (line 47)
    obj.WaveformObject = Modulation.OFDM(varargin{8}, varargin{9}, varargin{10}, varargin{11}, varargin{12}, varargin{13}, varargin{14}, varargin{15});

    Bashar Tahir

    Dear Roaa,

    Can you please post your scenario file? Otherwise, we cannot reproduce the error you are getting.
    Please post it in a new thread/topic.


    Roaa Ali

    Dear Bashar,
    thank you for your response
    %% Topology
    % Specifiy all the nodes in ascending order with starting
    % index of 1 (BS0 or UE0 is not allowed).
    scStr.topology.nodes = [‘BS1,UE1,UE2,UE3,UE4,UE5,UE6,UE7,UE8,UE9,UE10,UE11,UE12,UE13,UE14,UE15,UE16,UE17,UE18,UE19,UE20,UE21,UE22,UE23,UE24,UE25,UE26,UE27,UE28,UE29,UE30,UE31,UE32,UE33,UE34’];

    % Primary (desired) links
    scStr.topology.primaryLinks = [‘BS1:UE1,’…

    % 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

    scStr.simulation.frameStructure = ‘FDD’; % ‘TDD’ or ‘FDD’

    % Plot options
    scStr.simulation.plotResultsFor = [1];
    scStr.simulation.plotOverSNR = false;
    scStr.simulation.plotPAPR = 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(0, 55, 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 = 20; % 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.codebook = ‘5G’; % LTE or 5G
    scStr.simulation.nAntennasBaseStation = [2]; % per BS; number of antennas at the base station
    scStr.simulation.antennaConfiguration = {[1,1],[1,1]}; % per BS: if the 5G codebook is selected, each vector represents the number of horizontal and vertical antennas[N1,N2]
    % Supported configurations (N1,N2):
    % 4 Ports: (2,1)
    % 8 Ports: (2,2), (4,1)
    % 12 Ports: (3,2),(6,1)
    % 16 Ports: (4,2), (8,1)
    % 24 Ports: (4,3), (6,2),(12,1)
    % 32 Ports: (4,4), (8,2), (16,1)
    scStr.simulation.nAntennasUser = [2]; % per UE; number of antennas at the user
    scStr.simulation.userVelocity = [0.83, 0.83, 0.83,0.83,0.83, 0.83, 0.83,0.83,0.83 0.83, 0.83,0.83,0.83, 0.83, 0.83,0.83,0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83,0.83,0.83, 0.83,0.83,0.83,0.83,0.83]; % 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 = [-25,-20,-15,-10,-5,0,5,10,20,30,40,50,60,70,80,90,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195]; % per Link, channel pathloss in dB, this is most likely swept over

    % Nonlinearity model
    scStr.simulation.nonlinearity = false; % Apply Rapp’s PA nonlinear model: Rapp, C. “Effects of HPA-nonlinearity on a 4-DPSK/OFDM-signal for a digital sound broadcasting signal.”
    scStr.simulation.amplifierOBO = [1]; % Amplifier output back-off, per Link, in dB
    scStr.simulation.smoothnessFactor = [3]; % Smoothness factor for the Rapp model, per Link, >=0

    %% Channel Parameters =false; % for a 3D channel, this parameter has to be set to ture = ‘Jakes’; = 10; = false; = ‘none’; = 50; = ‘PedestrianA’; = 0; = 1;

    %% Channel Estimation and Equalization Parameters
    scStr.simulation.channelEstimationMethod = ‘Approximate-Perfect’;
    scStr.simulation.noisePowerEstimation = false;
    scStr.simulation.pilotPatternDownlink = ‘Diamond’; % pilot symbol allocation pattern for Downlink links
    scStr.simulation.pilotPatternUplink = ‘LTE Uplink’; % pilot symbol allocation pattern for Uplink links
    scStr.simulation.pilotSpacingFrequency = 6; % pilot spacing in frequency domain (may be fractions of subcarriers)
    scStr.simulation.pilotSpacingTime = 3.5; % pilot spacing in time domain (may be fraction of symbols)
    scStr.simulation.pilotSequenceLength = 12; % length of orthogonal pilot symbol sequence
    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.schedule.multiuserMode.Downlink = {‘MUST’}; % per BS. Right now ‘MUST’, ‘ZF-MUMIMO’, ‘BD-MUMIMO’ and ‘MRT-MUMIMO’ are supported
    scStr.schedule.multiuserMode.Uplink = {‘none’};
    scStr.modulation.delayDiversity = 1;

    %% Feedback Parameters = 0; = ‘miesm’;
    scStr.modulation.cqiTable = 0;

    % for the custom transmission mode the following parameters are used to configure the feedback = true; % this parameter is ignored, the feedback is automatically enabled for the CLSM transmission mode = true; = false; = 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)*eye(2,2); % per Link; employed precoding matrix

    % MUST power allocation
    scStr.modulation.MUSTIdx = [2]; % per BS; the power allocation index of the 3GPP MUST mode = {0, 1, 2, 3}.

    %% Modulation Parameters
    % waveform
    scStr.modulation.waveform = {‘OFDM’};
    scStr.modulation.spreadingTransformDownlink = ‘none’;
    scStr.modulation.spreadingTransformUplink = ‘none’;
    % 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.numberOfSubcarriers = [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’ obj.PilotMatrix = zeros(nSubcarriers, nMCSymbols, nAntennas);
    %% Channel Coding Parameters
    % All links are operating with the same coding parameters, enter it only once.
    scStr.coding.code = {‘LDPC’};
    scStr.coding.decoding = {‘PWL-Min-Sum’};
    scStr.coding.decodingIterations = [16];
    scStr.coding.LLRsCalculationMethod = ‘Max-Log’;
    scStr.coding.softBufferRatio = [1];

    %% Schedule
    % static schedule per base station

    % BS1 does Orthogonal Multiple Access
    scStr.schedule.fixedScheduleDL{1} = []; % schedule for BS1 Downlink
    scStr.schedule.fixedScheduleUL{1} = []; % No uplink for BS1

    % BS2 does MUST operation
    scStr.schedule.fixedScheduleDL{1} = [‘UE1:8,UE2:4,UE3:4,UE4:4,UE5:4,UE6:4,UE7:4,UE8:4,UE9:4,UE10:4,UE11:4,UE12:4,UE13:4,UE14:4,UE15:4,UE16:4,UE17:4,UE18:UE16,UE19:UE17,UE20:UE15,UE21:UE14,UE22:UE13,UE23:UE12,UE24:UE11,UE25:UE10,UE26:UE9,UE27:UE9,UE28:UE8,UE29:UE7,UE30:UE6,UE31:UE5,UE32:UE4,UE33:UE2,UE34:UE1’]; % schedule for BS2 Downlink
    scStr.schedule.fixedScheduleUL{1} = []; % No uplink for BS2.


    Bashar Tahir

    Dear Roaa,

    The error is due to an incorrect resources allocation; you superimposed both UE26 and UE27 on top of UE9, and that is not supported by 3GPP MUST (max. two NOMA UEs).
    So, change UE27:UE9 to UE27:UE3, as it seems you forgot UE3.

    By the way, the number of allocated resources is very low per user. Try to allocate at least 12 subcarriers (assuming 14 time symbols) per user if you have CQI feedback enabled, since the feedback mapping is not trained for very short block lengths. Also, for such a large number of users, set the userVelocity to 0, to speed up the simulation.

    Please next time post your question in a separate topic, as this topic is only concerned with the new release details.


    Qichen Jia

    Dear Mariam,

    I`m very interested in the 5G LLS but the page show that “Oops! That page can’t be found” when I click the license agreement link which you attached in this shatement for authorization.
    I would appreciate and hope you can help me to get the license agrement.

    Best Regards,
    Qichen Jia

    Mariam Mussbah

    Dear Qichen,

    I updated the link to the license agreement. You should be able to download it now.

    Thank you and best regards,

Viewing 15 posts - 1 through 15 (of 18 total)
  • You must be logged in to reply to this topic.