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);
void SetEnvironment(EnvironmentType env)
set the environment type
EnvironmentType
The type of propagation environment.
void SetFrequency(double freq)
set the propagation frequency
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
NS_ASSERT_MSG(false, "Ipv4AddressGenerator::MaskToIndex(): Impossible")
double OkumuraHata(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.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Ptr< ItuR1238PropagationLossModel > m_ituR1238
static TypeId GetTypeId(void)
double HeightLoss(Ptr< MobilityBuildingInfo > n) const
This model provides means for simulating the following propagation phenomena in the presence of build...
virtual double GetLoss(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
double GetDistanceFrom(Ptr< const MobilityModel > position) const
void SetRooftopHeight(double rooftopHeight)
set the rooftop height
HybridBuildingsPropagationLossModel()
void SetCitySize(CitySize size)
set the size of the city
Ptr< OkumuraHataPropagationLossModel > m_okumuraHata
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
double m_itu1411NlosThreshold
in meters (switch Los -> NLoS)
double ExternalWallLoss(Ptr< MobilityBuildingInfo > a) const
Ptr< ItuR1411LosPropagationLossModel > m_ituR1411Los
Ptr< const AttributeAccessor > MakeDoubleAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
double InternalWallsLoss(Ptr< MobilityBuildingInfo > a, Ptr< MobilityBuildingInfo > b) const
Vector GetPosition(void) const
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()
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 ItuR1411(Ptr< MobilityModel > a, Ptr< MobilityModel > b) const