A Discrete-Event Network Simulator
API
three-gpp-propagation-loss-model.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
3  * University of Padova
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  */
18 
19 #ifndef THREE_GPP_PROPAGATION_LOSS_MODEL_H
20 #define THREE_GPP_PROPAGATION_LOSS_MODEL_H
21 
23 #include "propagation-loss-model.h"
24 
25 namespace ns3
26 {
27 
34 {
35  public:
40  static TypeId GetTypeId();
41 
46 
51 
52  // Delete copy constructor and assignment operator to avoid misuse
55 
62 
68 
73  void SetFrequency(double f);
74 
79  double GetFrequency() const;
80 
88 
89  private:
99  double DoCalcRxPower(double txPowerDbm,
101  Ptr<MobilityModel> b) const override;
102 
103  int64_t DoAssignStreams(int64_t stream) override;
104 
114  double GetLoss(Ptr<ChannelCondition> cond,
115  double distance2D,
116  double distance3D,
117  double hUt,
118  double hBs) const;
119 
129  virtual double GetLossLos(double distance2D,
130  double distance3D,
131  double hUt,
132  double hBs) const = 0;
133 
146  virtual double GetO2iDistance2dIn() const = 0;
147 
165 
183 
197 
207  virtual double GetLossNlos(double distance2D,
208  double distance3D,
209  double hUt,
210  double hBs) const = 0;
211 
222  virtual double GetLossNlosv(double distance2D, double distance3D, double hUt, double hBs) const;
223 
232  virtual std::pair<double, double> GetUtAndBsHeights(double za, double zb) const;
233 
248 
258  ChannelCondition::LosConditionValue cond) const = 0;
259 
266  ChannelCondition::LosConditionValue cond) const = 0;
267 
279  static uint32_t GetKey(Ptr<MobilityModel> a, Ptr<MobilityModel> b);
280 
292 
293  protected:
294  void DoDispose() override;
295 
302  static double Calculate2dDistance(Vector a, Vector b);
303 
305  double m_frequency;
310 
313  {
314  double m_shadowing;
316  Vector m_distance;
317  };
318 
319  mutable std::unordered_map<uint32_t, ShadowingMapItem>
321 
324  {
325  double m_o2iLoss;
327  };
328 
329  mutable std::unordered_map<uint32_t, O2iLossMapItem>
331 
342 };
343 
351 {
352  public:
357  static TypeId GetTypeId();
358 
363 
368 
369  // Delete copy constructor and assignment operator to avoid misuse
372 
373  private:
383  double GetLossLos(double distance2D, double distance3D, double hUt, double hBs) const override;
384 
397  double GetO2iDistance2dIn() const override;
398 
405  bool DoIsO2iLowPenetrationLoss(Ptr<const ChannelCondition> cond) const override;
406 
416  double GetLossNlos(double distance2D, double distance3D, double hUt, double hBs) const override;
417 
427  ChannelCondition::LosConditionValue cond) const override;
428 
435 
444  static double Pl1(double frequency, double distance3D, double h, double w);
445 
453  static double GetBpDistance(double frequency, double hA, double hB);
454 
455  double m_h;
456  double m_w;
457 };
458 
466 {
467  public:
472  static TypeId GetTypeId();
473 
478 
483 
484  // Delete copy constructor and assignment operator to avoid misuse
487 
488  private:
489  int64_t DoAssignStreams(int64_t stream) override;
490 
500  double GetLossLos(double distance2D, double distance3D, double hUt, double hBs) const override;
501 
514  double GetO2iDistance2dIn() const override;
515 
525  double GetLossNlos(double distance2D, double distance3D, double hUt, double hBs) const override;
526 
536  ChannelCondition::LosConditionValue cond) const override;
537 
544 
552  double GetBpDistance(double hUt, double hBs, double distance2D) const;
553 
556 };
557 
565 {
566  public:
571  static TypeId GetTypeId();
572 
577 
582 
583  // Delete copy constructor and assignment operator to avoid misuse
588 
589  private:
599  double GetLossLos(double distance2D, double distance3D, double hUt, double hBs) const override;
600 
613  double GetO2iDistance2dIn() const override;
614 
624  double GetLossNlos(double distance2D, double distance3D, double hUt, double hBs) const override;
625 
635  ChannelCondition::LosConditionValue cond) const override;
636 
643 
651  double GetBpDistance(double hUt, double hBs, double distance2D) const;
652 
659  std::pair<double, double> GetUtAndBsHeights(double za, double zb) const override;
660 };
661 
669 {
670  public:
675  static TypeId GetTypeId();
676 
681 
686 
687  // Delete copy constructor and assignment operator to avoid misuse
689  delete;
692 
693  private:
703  double GetLossLos(double distance2D, double distance3D, double hUt, double hBs) const override;
704 
717  double GetO2iDistance2dIn() const override;
718 
728  double GetLossNlos(double distance2D, double distance3D, double hUt, double hBs) const override;
729 
739  ChannelCondition::LosConditionValue cond) const override;
740 
747 };
748 
749 } // namespace ns3
750 
751 #endif /* THREE_GPP_PROPAGATION_LOSS_MODEL_H */
double f(double x, void *params)
Definition: 80211b.c:70
LosConditionValue
Possible values for Line-of-Sight condition.
Models the propagation loss through a transmission medium.
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
Implements the pathloss model defined in 3GPP TR 38.901, Table 7.4.1-1 for the Indoor Office scenario...
ThreeGppIndoorOfficePropagationLossModel(const ThreeGppIndoorOfficePropagationLossModel &)=delete
double GetShadowingCorrelationDistance(ChannelCondition::LosConditionValue cond) const override
Returns the shadow fading correlation distance.
double GetShadowingStd(Ptr< MobilityModel > a, Ptr< MobilityModel > b, ChannelCondition::LosConditionValue cond) const override
Returns the shadow fading standard deviation.
ThreeGppIndoorOfficePropagationLossModel & operator=(const ThreeGppIndoorOfficePropagationLossModel &)=delete
double GetO2iDistance2dIn() const override
Returns the minimum of the two independently generated distances according to the uniform distributio...
double GetLossNlos(double distance2D, double distance3D, double hUt, double hBs) const override
Computes the pathloss between a and b considering that the line of sight is obstructed.
double GetLossLos(double distance2D, double distance3D, double hUt, double hBs) const override
Computes the pathloss between a and b considering that the line of sight is not obstructed.
Base class for the 3GPP propagation models.
Ptr< ChannelConditionModel > GetChannelConditionModel() const
Returns the associated channel condition model.
virtual double GetO2iLowPenetrationLoss(Ptr< MobilityModel > a, Ptr< MobilityModel > b, ChannelCondition::LosConditionValue cond) const
Retrieves the o2i building penetration loss value by looking at m_o2iLossMap.
double GetLoss(Ptr< ChannelCondition > cond, double distance2D, double distance3D, double hUt, double hBs) const
Computes the pathloss between a and b.
Ptr< UniformRandomVariable > m_randomO2iVar2
a uniform random variable for the calculation of the indoor loss, see TR38.901 Table 7....
double GetFrequency() const
Return the current central frequency.
Ptr< UniformRandomVariable > m_randomO2iVar1
a uniform random variable for the calculation of the indoor loss, see TR38.901 Table 7....
virtual double GetLossNlos(double distance2D, double distance3D, double hUt, double hBs) const =0
Computes the pathloss between a and b considering that the line of sight is obstructed.
double GetShadowing(Ptr< MobilityModel > a, Ptr< MobilityModel > b, ChannelCondition::LosConditionValue cond) const
Retrieves the shadowing value by looking at m_shadowingMap.
static double Calculate2dDistance(Vector a, Vector b)
Computes the 2D distance between two 3D vectors.
void SetChannelConditionModel(Ptr< ChannelConditionModel > model)
Set the channel condition model used to determine the channel state (e.g., the LOS/NLOS condition)
std::unordered_map< uint32_t, ShadowingMapItem > m_shadowingMap
map to store the shadowing values
virtual double GetLossLos(double distance2D, double distance3D, double hUt, double hBs) const =0
Computes the pathloss between a and b considering that the line of sight is not obstructed.
virtual bool DoIsO2iLowPenetrationLoss(Ptr< const ChannelCondition > cond) const
Indicates the condition of the o2i building penetration loss (defined in 3GPP TR 38....
int64_t DoAssignStreams(int64_t stream) override
Assign a fixed random variable stream number to the random variables used by this model.
ThreeGppPropagationLossModel & operator=(const ThreeGppPropagationLossModel &)=delete
virtual double GetShadowingCorrelationDistance(ChannelCondition::LosConditionValue cond) const =0
Returns the shadow fading correlation distance.
ThreeGppPropagationLossModel(const ThreeGppPropagationLossModel &)=delete
Ptr< NormalRandomVariable > m_normRandomVariable
normal random variable
Ptr< ChannelConditionModel > m_channelConditionModel
pointer to the channel condition model
std::unordered_map< uint32_t, O2iLossMapItem > m_o2iLossMap
map to store the o2i Loss values
virtual double GetO2iDistance2dIn() const =0
Returns the minimum of the two independently generated distances according to the uniform distributio...
virtual double GetO2iHighPenetrationLoss(Ptr< MobilityModel > a, Ptr< MobilityModel > b, ChannelCondition::LosConditionValue cond) const
Retrieves the o2i building penetration loss value by looking at m_o2iLossMap.
bool IsO2iLowPenetrationLoss(Ptr< const ChannelCondition > cond) const
Return true if the O2I Building Penetration loss corresponds to a low loss condition.
void SetFrequency(double f)
Set the central frequency of the model.
void DoDispose() override
Destructor implementation.
static uint32_t GetKey(Ptr< MobilityModel > a, Ptr< MobilityModel > b)
Returns an unique key for the channel between a and b.
Ptr< NormalRandomVariable > m_normalO2iLowLossVar
a normal random variable for the calculation of 02i low loss, see TR38.901 Table 7....
bool m_enforceRanges
strictly enforce TR 38.901 parameter ranges
virtual double GetShadowingStd(Ptr< MobilityModel > a, Ptr< MobilityModel > b, ChannelCondition::LosConditionValue cond) const =0
Returns the shadow fading standard deviation.
virtual double GetLossNlosv(double distance2D, double distance3D, double hUt, double hBs) const
Computes the pathloss between a and b considering that the line of sight is obstructed by a vehicle.
Ptr< NormalRandomVariable > m_normalO2iHighLossVar
a normal random variable for the calculation of 02i high loss, see TR38.901 Table 7....
virtual std::pair< double, double > GetUtAndBsHeights(double za, double zb) const
Determines hUT and hBS.
double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const override
Computes the received power by applying the pathloss model described in 3GPP TR 38....
static Vector GetVectorDifference(Ptr< MobilityModel > a, Ptr< MobilityModel > b)
Get the difference between the node position.
bool m_buildingPenLossesEnabled
enable/disable building penetration losses
Implements the pathloss model defined in 3GPP TR 38.901, Table 7.4.1-1 for the RMa scenario.
double GetShadowingStd(Ptr< MobilityModel > a, Ptr< MobilityModel > b, ChannelCondition::LosConditionValue cond) const override
Returns the shadow fading standard deviation.
static double Pl1(double frequency, double distance3D, double h, double w)
Computes the PL1 formula for the RMa scenario.
double GetO2iDistance2dIn() const override
Returns the minimum of the two independently generated distances according to the uniform distributio...
double GetLossLos(double distance2D, double distance3D, double hUt, double hBs) const override
Computes the pathloss between a and b considering that the line of sight is not obstructed.
double GetLossNlos(double distance2D, double distance3D, double hUt, double hBs) const override
Computes the pathloss between a and b considering that the line of sight is obstructed.
ThreeGppRmaPropagationLossModel & operator=(const ThreeGppRmaPropagationLossModel &)=delete
ThreeGppRmaPropagationLossModel(const ThreeGppRmaPropagationLossModel &)=delete
double GetShadowingCorrelationDistance(ChannelCondition::LosConditionValue cond) const override
Returns the shadow fading correlation distance.
double m_h
average building height in meters
static double GetBpDistance(double frequency, double hA, double hB)
Computes the breakpoint distance for the RMa scenario.
bool DoIsO2iLowPenetrationLoss(Ptr< const ChannelCondition > cond) const override
Indicates the condition of the o2i building penetration loss (defined in 3GPP TR 38....
Implements the pathloss model defined in 3GPP TR 38.901, Table 7.4.1-1 for the UMa scenario.
double GetLossLos(double distance2D, double distance3D, double hUt, double hBs) const override
Computes the pathloss between a and b considering that the line of sight is not obstructed.
ThreeGppUmaPropagationLossModel & operator=(const ThreeGppUmaPropagationLossModel &)=delete
double GetBpDistance(double hUt, double hBs, double distance2D) const
Computes the breakpoint distance.
int64_t DoAssignStreams(int64_t stream) override
Assign a fixed random variable stream number to the random variables used by this model.
ThreeGppUmaPropagationLossModel(const ThreeGppUmaPropagationLossModel &)=delete
double GetLossNlos(double distance2D, double distance3D, double hUt, double hBs) const override
Computes the pathloss between a and b considering that the line of sight is obstructed.
double GetO2iDistance2dIn() const override
Returns the minimum of the two independently generated distances according to the uniform distributio...
Ptr< UniformRandomVariable > m_uniformVar
a uniform random variable used for the computation of the breakpoint distance
double GetShadowingStd(Ptr< MobilityModel > a, Ptr< MobilityModel > b, ChannelCondition::LosConditionValue cond) const override
Returns the shadow fading standard deviation.
double GetShadowingCorrelationDistance(ChannelCondition::LosConditionValue cond) const override
Returns the shadow fading correlation distance.
Implements the pathloss model defined in 3GPP TR 38.901, Table 7.4.1-1 for the UMi-Street Canyon scen...
std::pair< double, double > GetUtAndBsHeights(double za, double zb) const override
Determines hUT and hBS.
ThreeGppUmiStreetCanyonPropagationLossModel & operator=(const ThreeGppUmiStreetCanyonPropagationLossModel &)=delete
double GetLossNlos(double distance2D, double distance3D, double hUt, double hBs) const override
Computes the pathloss between a and b considering that the line of sight is obstructed.
double GetShadowingStd(Ptr< MobilityModel > a, Ptr< MobilityModel > b, ChannelCondition::LosConditionValue cond) const override
Returns the shadow fading standard deviation.
double GetBpDistance(double hUt, double hBs, double distance2D) const
Computes the breakpoint distance.
double GetO2iDistance2dIn() const override
Returns the minimum of the two independently generated distances according to the uniform distributio...
double GetLossLos(double distance2D, double distance3D, double hUt, double hBs) const override
Computes the pathloss between a and b considering that the line of sight is not obstructed.
ThreeGppUmiStreetCanyonPropagationLossModel(const ThreeGppUmiStreetCanyonPropagationLossModel &)=delete
double GetShadowingCorrelationDistance(ChannelCondition::LosConditionValue cond) const override
Returns the shadow fading correlation distance.
a unique identifier for an interface.
Definition: type-id.h:59
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ChannelCondition::LosConditionValue m_condition
the LOS/NLOS condition
ChannelCondition::LosConditionValue m_condition
the LOS/NLOS condition