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...
#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 > MakeDoubleChecker()
Ptr< const AttributeChecker > MakeEnumChecker(T v, std::string n, Ts... args)
Make an EnumChecker pre-configured with a set of allowed values by name.
Ptr< const AttributeAccessor > MakeDoubleAccessor(T1 a1)
Ptr< const AttributeAccessor > MakeEnumAccessor(T1 a1)