26 #include "ns3/mobility-model.h" 
   27 #include "ns3/double.h" 
   28 #include "ns3/pointer.h" 
   29 #include "ns3/okumura-hata-propagation-loss-model.h" 
   30 #include "ns3/itu-r-1411-los-propagation-loss-model.h" 
   31 #include "ns3/itu-r-1411-nlos-over-rooftop-propagation-loss-model.h" 
   32 #include "ns3/itu-r-1238-propagation-loss-model.h" 
   33 #include "ns3/kun-2600-mhz-propagation-loss-model.h" 
   34 #include <ns3/mobility-building-info.h> 
   50   m_okumuraHata = CreateObject<OkumuraHataPropagationLossModel> ();
 
   51   m_ituR1411Los = CreateObject<ItuR1411LosPropagationLossModel> ();
 
   53   m_ituR1238 = CreateObject<ItuR1238PropagationLossModel> ();
 
   54   m_kun2600Mhz = CreateObject<Kun2600MhzPropagationLossModel> ();
 
   64   static TypeId tid = 
TypeId (
"ns3::HybridBuildingsPropagationLossModel")
 
   68     .AddConstructor<HybridBuildingsPropagationLossModel> ()
 
   69     .SetGroupName (
"Buildings")
 
   71     .AddAttribute (
"Frequency",
 
   72                    "The Frequency  (default is 2.106 GHz).",
 
   75                    MakeDoubleChecker<double> ())
 
   77     .AddAttribute (
"Los2NlosThr",
 
   78                    " Threshold from LoS to NLoS in ITU 1411 [m].",
 
   81                    MakeDoubleChecker<double> ())
 
   83     .AddAttribute (
"Environment",
 
   84                    "Environment Scenario",
 
   91     .AddAttribute (
"CitySize",
 
   92                    "Dimension of the city",
 
   99     .AddAttribute (
"RooftopLevel",
 
  100                    "The height of the rooftop level in meters",
 
  103                    MakeDoubleChecker<double> (0.0, 90.0))
 
  153   NS_ASSERT_MSG ((a1 != 0) && (b1 != 0), 
"HybridBuildingsPropagationLossModel only works with MobilityBuildingInfo");
 
  157   if (a1->IsOutdoor ())
 
  159       if (b1->IsOutdoor ())
 
  168                   NS_LOG_INFO (
this << 
" 0-0 (>1000): below rooftop -> ITUR1411 : " << loss);
 
  174                   NS_LOG_INFO (
this << 
" O-O (>1000): above rooftop -> OH : " << loss);
 
  181               NS_LOG_INFO (
this << 
" 0-0 (<1000) Street canyon -> ITUR1411 : " << loss);
 
  193                   NS_LOG_INFO (
this << 
" 0-I (>1000): below rooftop -> ITUR1411 : " << loss);
 
  198                   NS_LOG_INFO (
this << 
" O-I (>1000): above the rooftop -> OH : " << loss);
 
  204               NS_LOG_INFO (
this << 
" 0-I (<1000) ITUR1411 + BEL : " << loss);
 
  213           if (a1->GetBuilding () == b1->GetBuilding ())
 
  217               NS_LOG_INFO (
this << 
" I-I (same building) ITUR1238 : " << loss);
 
  224               NS_LOG_INFO (
this << 
" I-I (different) ITUR1238 + 2*BEL : " << loss);
 
  236                   NS_LOG_INFO (
this << 
" I-O (>1000): down rooftop -> ITUR1411 : " << loss);
 
  242                   NS_LOG_INFO (
this << 
" =I-O (>1000) over rooftop OH + BEL + HG: " << loss);
 
  248               NS_LOG_INFO (
this << 
" I-O (<1000)  ITUR1411 + BEL + HG: " << loss);
 
  253   loss = std::max (loss, 0.0);
 
void SetEnvironment(EnvironmentType env)
set the environment type 
 
EnvironmentType
The type of propagation environment. 
 
void SetFrequency(double freq)
set the propagation frequency 
 
double GetDistanceFrom(Ptr< const MobilityModel > position) const 
 
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system. 
 
Ptr< T > GetObject(void) const 
Get a pointer to the requested aggregated Object. 
 
double ItuR1411(Ptr< MobilityModel > a, Ptr< MobilityModel > b) const 
 
virtual double GetLoss(Ptr< MobilityModel > a, Ptr< MobilityModel > b) const 
 
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. 
 
Vector GetPosition(void) const 
 
double HeightLoss(Ptr< MobilityBuildingInfo > n) const 
 
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO. 
 
Ptr< ItuR1238PropagationLossModel > m_ituR1238
 
static TypeId GetTypeId(void)
 
This model provides means for simulating the following propagation phenomena in the presence of build...
 
double OkumuraHata(Ptr< MobilityModel > a, Ptr< MobilityModel > b) const 
 
Hold variables of type enum. 
 
Ptr< ItuR1411NlosOverRooftopPropagationLossModel > m_ituR1411NlosOverRooftop
 
double ItuR1238(Ptr< MobilityModel > a, Ptr< MobilityModel > b) const 
 
void SetRooftopHeight(double rooftopHeight)
set the rooftop height 
 
HybridBuildingsPropagationLossModel()
 
void SetCitySize(CitySize size)
set the size of the city 
 
Ptr< OkumuraHataPropagationLossModel > m_okumuraHata
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
double m_itu1411NlosThreshold
in meters (switch Los -> NLoS) 
 
Ptr< ItuR1411LosPropagationLossModel > m_ituR1411Los
 
#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 AttributeAccessor > MakeDoubleAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
 
Ptr< const AttributeChecker > MakeEnumChecker(int v1, std::string n1, int v2, std::string n2, int v3, std::string n3, int v4, std::string n4, int v5, std::string n5, int v6, std::string n6, int v7, std::string n7, int v8, std::string n8, int v9, std::string n9, int v10, std::string n10, int v11, std::string n11, int v12, std::string n12, int v13, std::string n13, int v14, std::string n14, int v15, std::string n15, int v16, std::string n16, int v17, std::string n17, int v18, std::string n18, int v19, std::string n19, int v20, std::string n20, int v21, std::string n21, int v22, std::string n22)
Make an EnumChecker pre-configured with a set of allowed values by name. 
 
CitySize
The size of the city in which propagation takes place. 
 
mobility buildings information (to be used by mobility models) 
 
Ptr< Kun2600MhzPropagationLossModel > m_kun2600Mhz
 
~HybridBuildingsPropagationLossModel()
 
double ExternalWallLoss(Ptr< MobilityBuildingInfo > a) const 
 
This class can be used to hold variables of floating point type such as 'double' or 'float'...
 
a unique identifier for an interface. 
 
TypeId SetParent(TypeId tid)
Set the parent TypeId. 
 
double InternalWallsLoss(Ptr< MobilityBuildingInfo > a, Ptr< MobilityBuildingInfo > b) const