StochasticChannelModel.ned

NED File src/simu5g/stack/phy/channelmodel/StochasticChannelModel.ned

Name Type Description
StochasticChannelModel simple module

The full PHY link model: everything between a transmitted air frame and the decision on whether it was received. The channel impairments are modeled statistically -- drawn from the distributions of a 3GPP propagation study, rather than computed from the geometry of an actual environment -- which is what sets this model apart from IdealChannelModel, where there are no impairments at all, only a configured packet error rate.

Source code

//
//                  Simu5G
//
// Copyright (C) 2019-2021 Giovanni Nardini, Giovanni Stea, Antonio Virdis et al. (University of Pisa)
// Copyright (C) 2022-2026 Giovanni Nardini, Giovanni Stea et al. (University of Pisa)
//
// This file is part of a software released under the license included in file
// "license.pdf". Please read LICENSE and README files before using it.
// The above files and the present reference are part of the software itself,
// and cannot be removed from it.
//

package simu5g.stack.phy.channelmodel;

//
// The full PHY link model: everything between a transmitted air frame and the
// decision on whether it was received. The channel impairments are modeled
// statistically -- drawn from the distributions of a 3GPP propagation study,
// rather than computed from the geometry of an actual environment -- which is
// what sets this model apart from ~IdealChannelModel, where there are no
// impairments at all, only a configured packet error rate.
//
// It covers:
// - path loss per deployment scenario, LOS/NLOS state and log-normal shadowing,
//   with the formulas of the 3GPP propagation study selected by pathLossType
//   (TR 36.814, TR 36.873 or TR 38.901);
// - multipath fading, Jakes or Rayleigh;
// - the antenna pattern attenuation and the link budget (antenna gains, cable
//   loss, noise figures, thermal noise);
// - interference from other cells: downlink, uplink, external cells and
//   background cells;
// - the assembly of all of the above into a per-band SINR, and the mapping of
//   that SINR onto a block error probability that decides reception.
//
// Only the path loss, LOS probability, shadowing and angular attenuation come
// from the selected propagation study; everything else is the same whichever
// study is selected. The ~Tr36873ChannelModel and ~Tr38901ChannelModel presets
// differ from this type only in their pathLossType default.
//
simple StochasticChannelModel extends ChannelModelBase
{
    parameters:
        @class("StochasticChannelModel");

        string pathLossType @enum("Tr36814","Tr36873","Tr38901") = default("Tr36814"); // Which 3GPP propagation study supplies the path loss formulas

        // Enable/disable shadowing
        bool shadowing = default(true);

        // Path loss scenario, in ITU terminology
        string scenario @enum(INDOOR_HOTSPOT,URBAN_MICROCELL,URBAN_MACROCELL,RURAL_MACROCELL,SUBURBAN_MACROCELL,UNKNOWN_SCENARIO) = default("URBAN_MACROCELL");

        // eNodeB height
        double nodebHeight @unit(m) = default(25m);
        // Building height
        double buildingHeight @unit(m) = default(20m);
        // Determines if the UE is inside a building
        bool insideBuilding = default(false);
        // Enable the high-loss building penetration model (table 7.4.3-2 in TR 38.901); only used with pathLossType="Tr38901"
        bool useBuildingPenetrationHighLossModel = default(false);

        double streetWidth @unit(m) = default(20m);
        double ueHeight @unit(m) = default(1.5m);
        bool tolerateMaxDistViolation = default(false);
        bool useTorus = default(false);

        double correlationDistance @unit(m) = default(50m);

        // Target BLER used to compute feedback
        double targetBler = default(0.01);
        // Factor the error probability is multiplied by for each HARQ retransmission
        double harqReduction = default(0.2);

        // Antenna gain of the UE
        double antennaGainUe @unit(dBi) = default(0dBi);
        // Antenna gain of the eNodeB
        double antennGainEnB @unit(dBi) = default(18dBi);
        // Antenna gain of the micro node
        double antennGainMicro @unit(dBi) = default(5dBi);
        // Thermal noise for 10 MHz of bandwidth
        double thermalNoise @unit(dBm) = default(-104.5dBm);
        // UE noise figure
        double ueNoiseFigure @unit(dBm) = default(7dBm);
        // eNodeB noise figure
        double bsNoiseFigure @unit(dBm) = default(5dBm);
        // Cable loss
        double cableLoss @unit(dB) = default(2dB);

        // Whether LOS/NLOS is drawn per link from the scenario's LOS probability; when false, it is fixed to fixedLos
        bool dynamicLos = default(false);
        // LOS state of every link when dynamicLos is false: true = LOS, false = NLOS
        bool fixedLos = default(false);
        // Enable/disable fading
        bool fading = default(true);
        // Fading type (JAKES or RAYLEIGH)
        string fadingType @enum(RAYLEIGH,JAKES) = default("JAKES");
        // If Jakes fading, this parameter specifies the number of paths (tap channel)
        int numFadingPaths = default(6);

        double delayRms @unit(s) = default(363ns);

        // Whether interference from background cells is included in the SINR, in both UL and DL
        bool bgCellInterference = default(true);
        // Whether interference from external cells is included in the DL SINR (TODO possibly obsolete)
        bool extCellInterference = default(true);
        // Whether interference from other base stations is included in the DL SINR
        bool downlinkInterference = default(false);
        // Whether interference from the UEs of other cells is included in the UL SINR
        bool uplinkInterference = default(false);

        bool enableExtCellLos = default(true);

        // Collection of SINR statistics can be disabled because it might be quite time-consuming
        bool collectSinrStatistics = default(true);

        // Statistics
        @signal[rcvdSinrDl];
        @statistic[rcvdSinrDl](title="SINR measured at packet reception, DL"; unit="dB"; source="rcvdSinrDl"; record=mean,vector);
        @signal[rcvdSinrUl];
        @statistic[rcvdSinrUl](title="SINR measured at packet reception, UL"; unit="dB"; source="rcvdSinrUl"; record=mean,vector);

        @signal[measuredSinrDl];
        @statistic[measuredSinrDl](title="SINR measured at feedback computation, DL"; unit="dB"; source="measuredSinrDl"; record=mean,vector);
        @signal[measuredSinrUl];
        @statistic[measuredSinrUl](title="SINR measured at feedback computation, UL"; unit="dB"; source="measuredSinrUl"; record=mean,vector);
}