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> ())