27 #include "ns3/double.h"
29 #include "ns3/itu-r-1411-los-propagation-loss-model.h"
30 #include "ns3/itu-r-1411-nlos-over-rooftop-propagation-loss-model.h"
31 #include "ns3/kun-2600-mhz-propagation-loss-model.h"
33 #include "ns3/mobility-model.h"
34 #include "ns3/okumura-hata-propagation-loss-model.h"
35 #include "ns3/pointer.h"
48 m_okumuraHata = CreateObject<OkumuraHataPropagationLossModel>();
49 m_ituR1411Los = CreateObject<ItuR1411LosPropagationLossModel>();
51 m_ituR1238 = CreateObject<ItuR1238PropagationLossModel>();
52 m_kun2600Mhz = CreateObject<Kun2600MhzPropagationLossModel>();
63 TypeId(
"ns3::HybridBuildingsPropagationLossModel")
67 .AddConstructor<HybridBuildingsPropagationLossModel>()
68 .SetGroupName(
"Buildings")
70 .AddAttribute(
"Frequency",
71 "The Frequency (default is 2.106 GHz).",
74 MakeDoubleChecker<double>())
78 " Threshold from LoS to NLoS in ITU 1411 [m].",
81 MakeDoubleChecker<double>())
83 .AddAttribute(
"Environment",
84 "Environment Scenario",
86 MakeEnumAccessor<EnvironmentType>(
97 "Dimension of the city",
104 "The height of the rooftop level in meters",
107 MakeDoubleChecker<double>(0.0, 90.0))
150 "HybridBuildingsPropagationLossModel does not support underground nodes (placed at z < 0)");
158 "HybridBuildingsPropagationLossModel only works with MobilityBuildingInfo");
161 bool isAIndoor = a1->IsIndoor();
162 bool isBIndoor = b1->IsIndoor();
175 NS_LOG_INFO(
this <<
" 0-0 (>1000): below rooftop -> ITUR1411 : " << loss);
181 NS_LOG_INFO(
this <<
" O-O (>1000): above rooftop -> OH : " << loss);
188 NS_LOG_INFO(
this <<
" 0-0 (<1000) Street canyon -> ITUR1411 : " << loss);
200 NS_LOG_INFO(
this <<
" 0-I (>1000): below rooftop -> ITUR1411 : " << loss);
205 NS_LOG_INFO(
this <<
" O-I (>1000): above the rooftop -> OH : " << loss);
211 NS_LOG_INFO(
this <<
" 0-I (<1000) ITUR1411 + BEL : " << loss);
220 if (a1->GetBuilding() == b1->GetBuilding())
224 NS_LOG_INFO(
this <<
" I-I (same building) ITUR1238 : " << loss);
230 NS_LOG_INFO(
this <<
" I-I (different) ITUR1238 + 2*BEL : " << loss);
242 NS_LOG_INFO(
this <<
" I-O (>1000): down rooftop -> ITUR1411 : " << loss);
248 NS_LOG_INFO(
this <<
" =I-O (>1000) over rooftop OH + BEL + HG: " << loss);
254 NS_LOG_INFO(
this <<
" I-O (<1000) ITUR1411 + BEL + HG: " << loss);
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)
double GetDistanceFrom(Ptr< const MobilityModel > position) const
Vector GetPosition() const
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
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.
#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.
Ptr< const AttributeAccessor > MakeDoubleAccessor(T1 a1)