26 #include "ns3/mobility-model.h"
27 #include "ns3/boolean.h"
28 #include "ns3/double.h"
29 #include "ns3/string.h"
30 #include "ns3/pointer.h"
87 int64_t currentStream = stream;
93 return (currentStream - stream);
103 static TypeId tid =
TypeId (
"ns3::RandomPropagationLossModel")
105 .AddConstructor<RandomPropagationLossModel> ()
106 .AddAttribute (
"Variable",
"The random variable used to pick a loss everytime CalcRxPower is invoked.",
107 StringValue (
"ns3::ConstantRandomVariable[Constant=1.0]"),
109 MakePointerChecker<RandomVariableStream> ())
129 return txPowerDbm + rxc;
148 static TypeId tid =
TypeId (
"ns3::FriisPropagationLossModel")
150 .AddConstructor<FriisPropagationLossModel> ()
151 .AddAttribute (
"Frequency",
152 "The carrier frequency (in Hz) at which propagation occurs (default is 5.15 GHz).",
156 MakeDoubleChecker<double> ())
157 .AddAttribute (
"SystemLoss",
"The system loss",
160 MakeDoubleChecker<double> ())
161 .AddAttribute (
"MinDistance",
162 "The distance under which the propagation model refuses to give results (m)",
166 MakeDoubleChecker<double> ())
199 static const double C = 299792458.0;
212 double mw = std::pow (10.0,dbm/10.0);
219 double dbm = std::log10 (w * 1000.0) * 10.0;
264 double pr = 10 * std::log10 (numerator / denominator);
265 NS_LOG_DEBUG (
"distance="<<distance<<
"m, attenuation coefficient="<<pr<<
"dB");
266 return txPowerDbm + pr;
285 static TypeId tid =
TypeId (
"ns3::TwoRayGroundPropagationLossModel")
287 .AddConstructor<TwoRayGroundPropagationLossModel> ()
288 .AddAttribute (
"Frequency",
289 "The carrier frequency (in Hz) at which propagation occurs (default is 5.15 GHz).",
293 MakeDoubleChecker<double> ())
294 .AddAttribute (
"SystemLoss",
"The system loss",
297 MakeDoubleChecker<double> ())
298 .AddAttribute (
"MinDistance",
299 "The distance under which the propagation model refuses to give results (m)",
303 MakeDoubleChecker<double> ())
304 .AddAttribute (
"HeightAboveZ",
305 "The height of the antenna (m) above the node's Z coordinate",
308 MakeDoubleChecker<double> ())
346 static const double C = 299792458.0;
359 double mw = std::pow (10.0,dbm / 10.0);
366 double dbm = std::log10 (w * 1000.0) * 10.0;
418 double dCross = (4 *
PI * txAntHeight * rxAntHeight) /
m_lambda;
420 if (distance <= dCross)
426 double pr = 10 * std::log10 (numerator / denominator);
427 NS_LOG_DEBUG (
"Receiver within crossover (" << dCross <<
"m) for Two_ray path; using Friis");
428 NS_LOG_DEBUG (
"distance=" << distance <<
"m, attenuation coefficient=" << pr <<
"dB");
429 return txPowerDbm + pr;
433 tmp = txAntHeight * rxAntHeight;
434 double rayNumerator = tmp * tmp;
435 tmp = distance * distance;
437 double rayPr = 10 * std::log10 (rayNumerator / rayDenominator);
438 NS_LOG_DEBUG (
"distance=" << distance <<
"m, attenuation coefficient=" << rayPr <<
"dB");
439 return txPowerDbm + rayPr;
457 static TypeId tid =
TypeId (
"ns3::LogDistancePropagationLossModel")
459 .AddConstructor<LogDistancePropagationLossModel> ()
460 .AddAttribute (
"Exponent",
461 "The exponent of the Path Loss propagation model",
464 MakeDoubleChecker<double> ())
465 .AddAttribute (
"ReferenceDistance",
466 "The distance at which the reference loss is calculated (m)",
469 MakeDoubleChecker<double> ())
470 .AddAttribute (
"ReferenceLoss",
471 "The reference loss at reference distance (dB). (Default is Friis at 1m with 5.15 GHz)",
474 MakeDoubleChecker<double> ())
528 "attenuation coefficient="<<rxc<<
"db");
529 return txPowerDbm + rxc;
545 static TypeId tid =
TypeId (
"ns3::ThreeLogDistancePropagationLossModel")
547 .AddConstructor<ThreeLogDistancePropagationLossModel> ()
548 .AddAttribute (
"Distance0",
549 "Beginning of the first (near) distance field",
552 MakeDoubleChecker<double> ())
553 .AddAttribute (
"Distance1",
554 "Beginning of the second (middle) distance field.",
557 MakeDoubleChecker<double> ())
558 .AddAttribute (
"Distance2",
559 "Beginning of the third (far) distance field.",
562 MakeDoubleChecker<double> ())
563 .AddAttribute (
"Exponent0",
564 "The exponent for the first field.",
567 MakeDoubleChecker<double> ())
568 .AddAttribute (
"Exponent1",
569 "The exponent for the second field.",
572 MakeDoubleChecker<double> ())
573 .AddAttribute (
"Exponent2",
574 "The exponent for the third field.",
577 MakeDoubleChecker<double> ())
578 .AddAttribute (
"ReferenceLoss",
579 "The reference loss at distance d0 (dB). (Default is Friis at 1m with 5.15 GHz)",
582 MakeDoubleChecker<double> ())
627 NS_LOG_DEBUG (
"ThreeLogDistance distance=" << distance <<
"m, " <<
628 "attenuation=" << pathLossDb <<
"dB");
630 return txPowerDbm - pathLossDb;
646 static TypeId tid =
TypeId (
"ns3::NakagamiPropagationLossModel")
648 .AddConstructor<NakagamiPropagationLossModel> ()
649 .AddAttribute (
"Distance1",
650 "Beginning of the second distance field. Default is 80m.",
653 MakeDoubleChecker<double> ())
654 .AddAttribute (
"Distance2",
655 "Beginning of the third distance field. Default is 200m.",
658 MakeDoubleChecker<double> ())
660 "m0 for distances smaller than Distance1. Default is 1.5.",
663 MakeDoubleChecker<double> ())
665 "m1 for distances smaller than Distance2. Default is 0.75.",
668 MakeDoubleChecker<double> ())
670 "m2 for distances greater than Distance2. Default is 0.75.",
673 MakeDoubleChecker<double> ())
674 .AddAttribute (
"ErlangRv",
675 "Access to the underlying ErlangRandomVariable",
678 MakePointerChecker<ErlangRandomVariable> ())
679 .AddAttribute (
"GammaRv",
680 "Access to the underlying GammaRandomVariable",
683 MakePointerChecker<GammaRandomVariable> ());
719 double powerW = std::pow (10, (txPowerDbm - 30) / 10);
725 unsigned int int_m =
static_cast<unsigned int>(std::floor (m));
736 double resultPowerDbm = 10 * std::log10 (resultPowerW) + 30;
738 NS_LOG_DEBUG (
"Nakagami distance=" << distance <<
"m, " <<
739 "power=" << powerW <<
"W, " <<
740 "resultPower=" << resultPowerW <<
"W=" << resultPowerDbm <<
"dBm");
742 return resultPowerDbm;
762 .AddConstructor<FixedRssLossModel> ()
763 .AddAttribute (
"Rss",
"The fixed receiver Rss.",
766 MakeDoubleChecker<double> ())
806 static TypeId tid =
TypeId (
"ns3::MatrixPropagationLossModel")
808 .AddConstructor<MatrixPropagationLossModel> ()
809 .AddAttribute (
"DefaultLoss",
"The default value for propagation loss, dB.",
812 MakeDoubleChecker<double> ())
838 std::map<MobilityPair, double>::iterator i =
m_loss.find (p);
842 m_loss.insert (std::make_pair (p, loss));
860 std::map<MobilityPair, double>::const_iterator i =
m_loss.find (std::make_pair (a, b));
864 return txPowerDbm - i->second;
885 static TypeId tid =
TypeId (
"ns3::RangePropagationLossModel")
887 .AddConstructor<RangePropagationLossModel> ()
888 .AddAttribute (
"MaxRange",
889 "Maximum Transmission Range (meters)",
892 MakeDoubleChecker<double> ())
void SetFrequency(double frequency)
void SetStream(int64_t stream)
Specifies the stream number for this RNG stream.
virtual double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
void SetDefaultLoss(double)
Set default loss (in dB, positive) to be used, infinity if not set.
virtual double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
double GetDistanceFrom(Ptr< const MobilityModel > position) const
void SetPathLossExponent(double n)
void SetNext(Ptr< PropagationLossModel > next)
Enables a chain of loss models to act on the signal.
hold variables of type string
a Two-Ray Ground propagation loss model ported from NS2
#define NS_ASSERT(condition)
#define NS_LOG_COMPONENT_DEFINE(name)
double GetFrequency(void) const
Vector GetPosition(void) const
virtual double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
virtual double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
double GetMinDistance(void) const
The propagation loss depends only on the distance (range) between transmitter and receiver...
double m_default
default loss
double GetPathLossExponent(void) const
Ptr< RandomVariableStream > m_variable
static TypeId GetTypeId(void)
static TypeId GetTypeId(void)
virtual double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
RandomPropagationLossModel()
virtual int64_t DoAssignStreams(int64_t stream)
virtual double GetValue(void)=0
Returns a random double from the underlying distribution.
A log distance path loss propagation model with three distance fields. This model is the same as ns3:...
static TypeId GetTypeId(void)
void SetMinDistance(double minDistance)
virtual int64_t DoAssignStreams(int64_t stream)
Ptr< PropagationLossModel > GetNext()
Gets the next PropagationLossModel in the chain of loss models that act on the signal.
double DbmToW(double dbm) const
static TypeId GetTypeId(void)
virtual ~RandomPropagationLossModel()
static TypeId GetTypeId(void)
NS_OBJECT_ENSURE_REGISTERED(AntennaModel)
virtual double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
virtual double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const =0
static TypeId GetTypeId(void)
double CalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
The propagation loss follows a random distribution.
ThreeLogDistancePropagationLossModel()
virtual int64_t DoAssignStreams(int64_t stream)
void SetMinDistance(double minDistance)
LogDistancePropagationLossModel()
a Friis propagation loss model
Ptr< GammaRandomVariable > m_gammaRandomVariable
virtual ~PropagationLossModel()
FriisPropagationLossModel()
NakagamiPropagationLossModel()
Ptr< PropagationLossModel > m_next
virtual int64_t DoAssignStreams(int64_t stream)
Nakagami-m fast fading propagation loss model.
Ptr< ErlangRandomVariable > m_erlangRandomVariable
void SetSystemLoss(double systemLoss)
double GetMinDistance(void) const
virtual ~MatrixPropagationLossModel()
double m_referenceDistance
double GetSystemLoss(void) const
Modelize the propagation loss through a transmission medium.
static TypeId GetTypeId(void)
double GetSystemLoss(void) const
virtual double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
static TypeId GetTypeId(void)
#define NS_LOG_DEBUG(msg)
void SetLoss(Ptr< MobilityModel > a, Ptr< MobilityModel > b, double loss, bool symmetric=true)
Set loss (in dB, positive) between pair of ns-3 objects (typically, nodes).
virtual int64_t DoAssignStreams(int64_t stream)
virtual int64_t DoAssignStreams(int64_t stream)
double DbmToW(double dbm) const
void SetFrequency(double frequency)
void SetHeightAboveZ(double heightAboveZ)
RangePropagationLossModel()
virtual int64_t DoAssignStreams(int64_t stream)
void SetReference(double referenceDistance, double referenceLoss)
a base class which provides memory management and object aggregation
std::pair< Ptr< MobilityModel >, Ptr< MobilityModel > > MobilityPair
static TypeId GetTypeId(void)
void SetSystemLoss(double systemLoss)
a log distance propagation model.
Hold an floating point type.
MatrixPropagationLossModel()
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
The propagation loss is fixed for each pair of nodes and doesn't depend on their actual positions...
TwoRayGroundPropagationLossModel()
int64_t AssignStreams(int64_t stream)
double GetFrequency(void) const
virtual int64_t DoAssignStreams(int64_t stream)
double DbmFromW(double w) const
double DbmFromW(double w) const
std::map< MobilityPair, double > m_loss
Fixed loss between pair of nodes.
virtual double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
virtual int64_t DoAssignStreams(int64_t stream)=0