22 #include "ns3/propagation-loss-model.h"
24 #include "ns3/mobility-model.h"
25 #include "ns3/double.h"
26 #include "ns3/pointer.h"
28 #include "cost231-propagation-loss-model.h"
33 NS_OBJECT_ENSURE_REGISTERED (Cost231PropagationLossModel);
36 Cost231PropagationLossModel::GetTypeId (
void)
38 static TypeId tid = TypeId (
"ns3::Cost231PropagationLossModel")
40 .SetParent<PropagationLossModel> ()
42 .AddConstructor<Cost231PropagationLossModel> ()
44 .AddAttribute (
"Lambda",
45 "The wavelength (default is 2.3 GHz at 300 000 km/s).",
46 DoubleValue (300000000.0 / 2.3e9),
47 MakeDoubleAccessor (&Cost231PropagationLossModel::m_lambda),
48 MakeDoubleChecker<double> ())
50 .AddAttribute (
"Frequency",
51 "The Frequency (default is 2.3 GHz).",
53 MakeDoubleAccessor (&Cost231PropagationLossModel::m_frequency),
54 MakeDoubleChecker<double> ())
56 .AddAttribute (
"BSAntennaHeight",
57 " BS Antenna Height (default is 50m).",
59 MakeDoubleAccessor (&Cost231PropagationLossModel::m_BSAntennaHeight),
60 MakeDoubleChecker<double> ())
62 .AddAttribute (
"SSAntennaHeight",
63 " SS Antenna Height (default is 3m).",
65 MakeDoubleAccessor (&Cost231PropagationLossModel::m_SSAntennaHeight),
66 MakeDoubleChecker<double> ())
68 .AddAttribute (
"MinDistance",
69 "The distance under which the propagation model refuses to give results (m) ",
71 MakeDoubleAccessor (&Cost231PropagationLossModel::SetMinDistance, &Cost231PropagationLossModel::GetMinDistance),
72 MakeDoubleChecker<double> ());
76 Cost231PropagationLossModel::Cost231PropagationLossModel ()
83 Cost231PropagationLossModel::SetLambda (
double frequency,
double speed)
85 m_lambda = speed / frequency;
86 m_frequency = frequency;
90 Cost231PropagationLossModel::GetShadowing (
void)
95 Cost231PropagationLossModel::SetShadowing (
double shadowing)
97 m_shadowing = shadowing;
101 Cost231PropagationLossModel::SetLambda (
double lambda)
104 m_frequency = 300000000 / lambda;
108 Cost231PropagationLossModel::GetLambda (
void)
const
114 Cost231PropagationLossModel::SetMinDistance (
double minDistance)
116 m_minDistance = minDistance;
119 Cost231PropagationLossModel::GetMinDistance (
void)
const
121 return m_minDistance;
125 Cost231PropagationLossModel::SetBSAntennaHeight (
double height)
127 m_BSAntennaHeight = height;
131 Cost231PropagationLossModel::GetBSAntennaHeight (
void)
const
133 return m_BSAntennaHeight;
137 Cost231PropagationLossModel::SetSSAntennaHeight (
double height)
139 m_SSAntennaHeight = height;
143 Cost231PropagationLossModel::GetSSAntennaHeight (
void)
const
145 return m_SSAntennaHeight;
149 Cost231PropagationLossModel::SetEnvironment (Environment env)
153 Cost231PropagationLossModel::Environment
154 Cost231PropagationLossModel::GetEnvironment (
void)
const
156 return m_environment;
164 if (distance <= m_minDistance)
169 double log_f = std::log (m_frequency / 1000000000) / 2.302;
170 double C_H = 0.8 + ((1.11 * log_f) - 0.7) * m_SSAntennaHeight - (1.56 * log_f);
171 double log_BSH = std::log (m_BSAntennaHeight) / 2.303;
176 double loss_in_db = 46.3 + (33.9 * log_f) - (13.82 * log_BSH) - C_H + ((44.9 - 6.55 * log_BSH) * std::log (distance)
177 / 2.303) + C + m_shadowing;
179 NS_LOG_DEBUG (
"dist =" << distance <<
", Path Loss = " << loss_in_db);
181 return (0 - loss_in_db);
188 return txPowerDbm +
GetLoss (a, b);
double GetDistanceFrom(Ptr< const MobilityModel > position) const
#define NS_LOG_COMPONENT_DEFINE(name)
virtual int64_t DoAssignStreams(int64_t stream)
#define NS_LOG_DEBUG(msg)
double GetLoss(Ptr< MobilityModel > a, Ptr< MobilityModel > b) const