16#include "ns3/double.h" 
   18#include "ns3/itu-r-1411-los-propagation-loss-model.h" 
   19#include "ns3/itu-r-1411-nlos-over-rooftop-propagation-loss-model.h" 
   20#include "ns3/kun-2600-mhz-propagation-loss-model.h" 
   22#include "ns3/mobility-model.h" 
   23#include "ns3/okumura-hata-propagation-loss-model.h" 
   24#include "ns3/pointer.h" 
   52        TypeId(
"ns3::HybridBuildingsPropagationLossModel")
 
   56            .AddConstructor<HybridBuildingsPropagationLossModel>()
 
   57            .SetGroupName(
"Buildings")
 
   59            .AddAttribute(
"Frequency",
 
   60                          "The Frequency  (default is 2.106 GHz).",
 
   67                " Threshold from LoS to NLoS in ITU 1411 [m].",
 
   72            .AddAttribute(
"Environment",
 
   73                          "Environment Scenario",
 
   86                "Dimension of the city",
 
   93                "The height of the rooftop level in meters",
 
 
  138        (a->GetPosition().z >= 0) && (b->GetPosition().z >= 0),
 
  139        "HybridBuildingsPropagationLossModel does not support underground nodes (placed at z < 0)");
 
  141    double distance = a->GetDistanceFrom(b);
 
  147                  "HybridBuildingsPropagationLossModel only works with MobilityBuildingInfo");
 
  150    bool isAIndoor = a1->IsIndoor();
 
  151    bool isBIndoor = b1->IsIndoor();
 
  164                    NS_LOG_INFO(
this << 
" 0-0 (>1000): below rooftop -> ITUR1411 : " << loss);
 
  170                    NS_LOG_INFO(
this << 
" O-O (>1000): above rooftop -> OH : " << loss);
 
  177                NS_LOG_INFO(
this << 
" 0-0 (<1000) Street canyon -> ITUR1411 : " << loss);
 
  189                    NS_LOG_INFO(
this << 
" 0-I (>1000): below rooftop -> ITUR1411 : " << loss);
 
  194                    NS_LOG_INFO(
this << 
" O-I (>1000): above the rooftop -> OH : " << loss);
 
  200                NS_LOG_INFO(
this << 
" 0-I (<1000) ITUR1411 + BEL : " << loss);
 
  209            if (a1->GetBuilding() == b1->GetBuilding())
 
  213                NS_LOG_INFO(
this << 
" I-I (same building) ITUR1238 : " << loss);
 
  219                NS_LOG_INFO(
this << 
" I-I (different) ITUR1238 + 2*BEL : " << loss);
 
  231                    NS_LOG_INFO(
this << 
" I-O (>1000): down rooftop -> ITUR1411 : " << loss);
 
  237                    NS_LOG_INFO(
this << 
" =I-O (>1000) over rooftop OH + BEL + HG: " << loss);
 
  243                NS_LOG_INFO(
this << 
" I-O (<1000)  ITUR1411 + BEL + HG: " << loss);
 
  248    loss = std::max(loss, 0.0);
 
 
This model provides means for simulating the following propagation phenomena in the presence of build...
double HeightLoss(Ptr< MobilityBuildingInfo > n) const
Calculate the height loss.
double ExternalWallLoss(Ptr< MobilityBuildingInfo > a) const
Calculate the external wall loss.
double InternalWallsLoss(Ptr< MobilityBuildingInfo > a, Ptr< MobilityBuildingInfo > b) const
Calculate the internal wall loss.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Hold variables of type enum.
void SetCitySize(CitySize size)
set the size of the city
double OkumuraHata(Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
Compute the path loss using either OkumuraHataPropagationLossModel or Kun2600MhzPropagationLossModel.
double m_rooftopHeight
Roof Height (in meters)
static TypeId GetTypeId()
Get the type ID.
Ptr< ItuR1411NlosOverRooftopPropagationLossModel > m_ituR1411NlosOverRooftop
ItuR1411NlosOverRooftopPropagationLossModel.
void SetFrequency(double freq)
set the propagation frequency
void SetRooftopHeight(double rooftopHeight)
set the rooftop height
Ptr< ItuR1411LosPropagationLossModel > m_ituR1411Los
ItuR1411LosPropagationLossModel.
double m_frequency
Operation frequency.
HybridBuildingsPropagationLossModel()
double m_itu1411NlosThreshold
in meters (switch Los -> NLoS)
double ItuR1411(Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
Compute the path loss using either ItuR1411LosPropagationLossModel or ItuR1411NlosOverRooftopPropagat...
~HybridBuildingsPropagationLossModel() override
Ptr< Kun2600MhzPropagationLossModel > m_kun2600Mhz
Kun2600MhzPropagationLossModel.
double ItuR1238(Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
Compute the path loss using ItuR1238PropagationLossModel.
Ptr< OkumuraHataPropagationLossModel > m_okumuraHata
OkumuraHataPropagationLossModel.
void SetEnvironment(EnvironmentType env)
set the environment type
double GetLoss(Ptr< MobilityModel > a, Ptr< MobilityModel > b) const override
Compute the path loss according to the nodes position using the appropriate model.
Ptr< ItuR1238PropagationLossModel > m_ituR1238
ItuR1238PropagationLossModel.
mobility buildings information (to be used by mobility models)
Smart pointer class similar to boost::intrusive_ptr.
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Ptr< const AttributeChecker > MakeDoubleChecker()
Ptr< const AttributeAccessor > MakeDoubleAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
Ptr< const AttributeAccessor > MakeEnumAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
EnvironmentType
The type of propagation environment.
CitySize
The size of the city in which propagation takes place.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< const AttributeChecker > MakeEnumChecker(T v, std::string n, Ts... args)
Make an EnumChecker pre-configured with a set of allowed values by name.