Integration of the 3GPP TR 38.901 pathloss and channel condition models (GSoC 2019)
I added new classes implementing the pathloss and the LOS/NLOS condition models specified in 3GPP TR 38.901.
In particular, this MR contains:
- a new abstract class ChannelConditionModel, which provides the base for the implementation of specific channel condition models. The main method is GetChannelCondition (mm a, mm b), which determines the channel condition based on the tx and rx mobility models and returns it as a pointer to an object of type ChannelCondition
- the implementation of the subclasses ThreeGppRMaChannelConditionModel, ThreeGppUMaChannelConditionModel, ThreeGppUMiStreetCanyonChannelConditionModel, ThreeGppIndoorMixedOfficeChannelConditionModel, ThreeGppIndoorOpenOfficeChannelConditionModel, which inherits from ChannelConditionModel and statistically determines the LOS/NLOS state based on the specification in 3GPP TR 38.901
- the implementation of the subclass BuildingsChannelConditionModel, which inherits from ChannelConditionModel and determines the LOS/NLOS state based on the buildings deployed in the scenario. It has been adapted from the mmwave module.
- new classes which extends the PropagationLossModel interface and implements the pathloss models defined in 3GPP TR 38.901 (ThreeGppRmaPropagationLossModel, ThreeGppUmaPropagationLossModel, ThreeGppUmiStreeCanyonPropagationLossModel, ThreeGppIndoorOfficePropagationLossModel). The main method is DoCalcRxPower (txPow, mm a, mm b), which applies the pathloss model taking into account the LOS/NLOS channel state and then returns the received power. To retrieve the channel state, they interface with the class ChannelConditionModel through the method GetChannelCondition (mm a, mm b)
- documentation and test cases for all the new classes
I would like to have your opinion on the following issue: the pathloss model should be used for BS-UT links and to compute the pathloss value we need to know hBS (the height of the base station) and hUT (the height of the user terminal). The TR specifies the validity range for these values. However, we may need to use them also for UT-UT or BS-BS links, e.g., when computing the interference, and in these cases we are not able to set the value of hBS (in the UT-UT case) or hUT (in the BS-BS case). In my implementation, the missing value is set as close as possible to the actual height of the node but inside the corresponding validity range. Do you think this is reasonable?