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");
156 bool isAIndoor = a1->IsIndoor ();
157 bool isBIndoor = b1->IsIndoor ();
171 NS_LOG_INFO (
this <<
" 0-0 (>1000): below rooftop -> ITUR1411 : " << loss);
177 NS_LOG_INFO (
this <<
" O-O (>1000): above rooftop -> OH : " << loss);
184 NS_LOG_INFO (
this <<
" 0-0 (<1000) Street canyon -> ITUR1411 : " << loss);
196 NS_LOG_INFO (
this <<
" 0-I (>1000): below rooftop -> ITUR1411 : " << loss);
201 NS_LOG_INFO (
this <<
" O-I (>1000): above the rooftop -> OH : " << loss);
207 NS_LOG_INFO (
this <<
" 0-I (<1000) ITUR1411 + BEL : " << loss);
216 if (a1->GetBuilding () == b1->GetBuilding ())
220 NS_LOG_INFO (
this <<
" I-I (same building) ITUR1238 : " << loss);
227 NS_LOG_INFO (
this <<
" I-I (different) ITUR1238 + 2*BEL : " << loss);
239 NS_LOG_INFO (
this <<
" I-O (>1000): down rooftop -> ITUR1411 : " << loss);
245 NS_LOG_INFO (
this <<
" =I-O (>1000) over rooftop OH + BEL + HG: " << loss);
251 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
~HybridBuildingsPropagationLossModel()
double OkumuraHata(Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
Compute the path loss using either OkumuraHataPropagationLossModel or Kun2600MhzPropagationLossModel.
virtual double GetLoss(Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
Compute the path loss according to the nodes position using the appropriate model.
double m_rooftopHeight
Roof Height (in meters)
static TypeId GetTypeId(void)
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...
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
Ptr< ItuR1238PropagationLossModel > m_ituR1238
ItuR1238PropagationLossModel.
mobility buildings information (to be used by mobility models)
double GetDistanceFrom(Ptr< const MobilityModel > position) const
Vector GetPosition(void) const
Ptr< T > GetObject(void) 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...
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.
#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(int v, std::string n, Ts... args)
Make an EnumChecker pre-configured with a set of allowed values by name.