A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
ns3::FriisPropagationLossModel Class Reference

a Friis propagation loss model More...

#include <propagation-loss-model.h>

+ Inheritance diagram for ns3::FriisPropagationLossModel:
+ Collaboration diagram for ns3::FriisPropagationLossModel:

Public Member Functions

 FriisPropagationLossModel ()
 
double GetFrequency (void) const
 
double GetMinLoss (void) const
 
double GetSystemLoss (void) const
 
void SetFrequency (double frequency)
 
void SetMinLoss (double minLoss)
 
void SetSystemLoss (double systemLoss)
 
- Public Member Functions inherited from ns3::PropagationLossModel
 PropagationLossModel ()
 
virtual ~PropagationLossModel ()
 
int64_t AssignStreams (int64_t stream)
 If this loss model uses objects of type RandomVariableStream, set the stream numbers to the integers starting with the offset 'stream'. More...
 
double CalcRxPower (double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
 
Ptr< PropagationLossModelGetNext ()
 Gets the next PropagationLossModel in the chain of loss models that act on the signal. More...
 
void SetNext (Ptr< PropagationLossModel > next)
 Enables a chain of loss models to act on the signal. More...
 
- Public Member Functions inherited from ns3::Object
 Object ()
 
virtual ~Object ()
 
void AggregateObject (Ptr< Object > other)
 
void Dispose (void)
 Run the DoDispose methods of this object and all the objects aggregated to it. More...
 
AggregateIterator GetAggregateIterator (void) const
 
virtual TypeId GetInstanceTypeId (void) const
 
template<typename T >
Ptr< T > GetObject (void) const
 
template<typename T >
Ptr< T > GetObject (TypeId tid) const
 
void Initialize (void)
 This method calls the virtual DoInitialize method on all the objects aggregated to this object. More...
 
- Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
 SimpleRefCount ()
 Constructor. More...
 
 SimpleRefCount (const SimpleRefCount &o)
 Copy constructor. More...
 
uint32_t GetReferenceCount (void) const
 Get the reference count of the object. More...
 
SimpleRefCountoperator= (const SimpleRefCount &o)
 Assignment. More...
 
void Ref (void) const
 Increment the reference count. More...
 
void Unref (void) const
 Decrement the reference count. More...
 
- Public Member Functions inherited from ns3::ObjectBase
virtual ~ObjectBase ()
 Virtual destructor. More...
 
void GetAttribute (std::string name, AttributeValue &value) const
 
bool GetAttributeFailSafe (std::string name, AttributeValue &attribute) const
 
void SetAttribute (std::string name, const AttributeValue &value)
 
bool SetAttributeFailSafe (std::string name, const AttributeValue &value)
 
bool TraceConnect (std::string name, std::string context, const CallbackBase &cb)
 
bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb)
 
bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb)
 
bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb)
 

Static Public Member Functions

static TypeId GetTypeId (void)
 
- Static Public Member Functions inherited from ns3::PropagationLossModel
static TypeId GetTypeId (void)
 
- Static Public Member Functions inherited from ns3::Object
static TypeId GetTypeId (void)
 Register this type. More...
 
- Static Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
static void Cleanup (void)
 Noop. More...
 
- Static Public Member Functions inherited from ns3::ObjectBase
static TypeId GetTypeId (void)
 Get the type ID. More...
 

Private Member Functions

 FriisPropagationLossModel (const FriisPropagationLossModel &o)
 
double DbmFromW (double w) const
 
double DbmToW (double dbm) const
 
virtual int64_t DoAssignStreams (int64_t stream)
 Subclasses must implement this; those not using random variables can return zero. More...
 
virtual double DoCalcRxPower (double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
 
FriisPropagationLossModeloperator= (const FriisPropagationLossModel &o)
 

Private Attributes

double m_frequency
 
double m_lambda
 
double m_minLoss
 
double m_systemLoss
 

Static Private Attributes

static const double PI = 3.14159265358979323846
 

Additional Inherited Members

- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 
virtual void DoDispose (void)
 This method is called by Object::Dispose or by the object's destructor, whichever comes first. More...
 
virtual void DoInitialize (void)
 This method is called only once by Object::Initialize. More...
 
virtual void NotifyNewAggregate (void)
 This method is invoked whenever two sets of objects are aggregated together. More...
 
- Protected Member Functions inherited from ns3::ObjectBase
void ConstructSelf (const AttributeConstructionList &attributes)
 
virtual void NotifyConstructionCompleted (void)
 This method is invoked once all member attributes have been initialized. More...
 

Detailed Description

a Friis propagation loss model

The Friis propagation loss model was first described in "A Note on a Simple Transmission Formula", by "Harald T. Friis".

The original equation was described as: $ \frac{P_r}{P_t} = \frac{A_r A_t}{d^2\lambda^2} $ with the following equation for the case of an isotropic antenna with no heat loss: $ A_{isotr.} = \frac{\lambda^2}{4\pi} $

The final equation becomes: $ \frac{P_r}{P_t} = \frac{\lambda^2}{(4 \pi d)^2} $

Modern extensions to this original equation are: $ P_r = \frac{P_t G_t G_r \lambda^2}{(4 \pi d)^2 L}$

With:

  • $ P_r $ : reception power (W)
  • $ P_t $ : transmission power (W)
  • $ G_t $ : transmission gain (unit-less)
  • $ G_r $ : reception gain (unit-less)
  • $ \lambda $ : wavelength (m)
  • $ d $ : distance (m)
  • $ L $ : system loss (unit-less)

In the implementation, $ \lambda $ is calculated as $ \frac{C}{f} $, where $ C = 299792458$ m/s is the speed of light in vacuum, and $ f $ is the frequency in Hz which can be configured by the user via the Frequency attribute.

The Friis model is valid only for propagation in free space within the so-called far field region, which can be considered approximately as the region for $ d > 3 \lambda $. The model will still return a value for $ d < 3 \lambda $, as doing so (rather than triggering a fatal error) is practical for many simulation scenarios. However, we stress that the values obtained in such conditions shall not be considered realistic.

Related with this issue, we note that the Friis formula is undefined for $ d = 0 $, and results in $ P_r > P_t $ for $ d < \lambda / 2 \sqrt{\pi} $. Both these conditions occur outside of the far field region, so in principle the Friis model shall not be used in these conditions. In practice, however, Friis is often used in scenarios where accurate propagation modeling is not deemed important, and values of $ d = 0 $ can occur. To allow practical use of the model in such scenarios, we have to 1) return some value for $ d = 0 $, and 2) avoid large discontinuities in propagation loss values (which could lead to artifacts such as bogus capture effects which are much worse than inaccurate propagation loss values). The two issues are conflicting, as, according to the Friis formula, $\lim_{d \to 0 } P_r = +\infty $; so if, for $ d = 0 $, we use a fixed loss value, we end up with an infinitely large discontinuity, which as we discussed can cause undesireable simulation artifacts.

To avoid these artifact, this implmentation of the Friis model provides an attribute called MinLoss which allows to specify the minimum total loss (in dB) returned by the model. This is used in such a way that $ P_r $ continuously increases for $ d \to 0 $, until MinLoss is reached, and then stay constant; this allow to return a value for $ d = 0 $ and at the same time avoid discontinuities. The model won't be much realistic, but at least the simulation artifacts discussed before are avoided. The default value of MinLoss is 0 dB, which means that by default the model will return $ P_r = P_t $ for $ d <= \lambda / 2 \sqrt{\pi} $. We note that this value of $ d $ is outside of the far field region, hence the validity of the model in the far field region is not affected.

Config Paths

ns3::FriisPropagationLossModel is accessible through the following paths with Config::Set and Config::Connect:

  • /ChannelList/[i]/$ns3::WifiChannel/$ns3::YansWifiChannel/PropagationLossModel/$ns3::FriisPropagationLossModel
  • /ChannelList/[i]/$ns3::YansWifiChannel/PropagationLossModel/$ns3::FriisPropagationLossModel
  • /NodeList/[i]/DeviceList/[i]/$ns3::WifiNetDevice/Channel/$ns3::YansWifiChannel/PropagationLossModel/$ns3::FriisPropagationLossModel

Attributes

  • Frequency: The carrier frequency (in Hz) at which propagation occurs (default is 5.15 GHz).
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: 5.15e+09
    • Flags: construct write read
  • SystemLoss: The system loss
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: 1
    • Flags: construct write read
  • MinLoss: The minimum value (dB) of the total loss, used at short ranges. Note:
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: 0
    • Flags: construct write read

No TraceSources are defined for this type.

Definition at line 217 of file propagation-loss-model.h.

Constructor & Destructor Documentation

ns3::FriisPropagationLossModel::FriisPropagationLossModel ( )

Definition at line 171 of file propagation-loss-model.cc.

ns3::FriisPropagationLossModel::FriisPropagationLossModel ( const FriisPropagationLossModel o)
private

Member Function Documentation

double ns3::FriisPropagationLossModel::DbmFromW ( double  w) const
private

Definition at line 217 of file propagation-loss-model.cc.

double ns3::FriisPropagationLossModel::DbmToW ( double  dbm) const
private

Definition at line 210 of file propagation-loss-model.cc.

int64_t ns3::FriisPropagationLossModel::DoAssignStreams ( int64_t  stream)
privatevirtual

Subclasses must implement this; those not using random variables can return zero.

Implements ns3::PropagationLossModel.

Definition at line 274 of file propagation-loss-model.cc.

double ns3::FriisPropagationLossModel::DoCalcRxPower ( double  txPowerDbm,
Ptr< MobilityModel a,
Ptr< MobilityModel b 
) const
privatevirtual

Implements ns3::PropagationLossModel.

Definition at line 224 of file propagation-loss-model.cc.

References ns3::MobilityModel::GetDistanceFrom(), m_lambda, m_minLoss, m_systemLoss, NS_LOG_DEBUG, NS_LOG_WARN, and PI.

+ Here is the call graph for this function:

double ns3::FriisPropagationLossModel::GetFrequency ( void  ) const
Returns
the current frequency (Hz)

Definition at line 204 of file propagation-loss-model.cc.

References m_frequency.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

double ns3::FriisPropagationLossModel::GetMinLoss ( void  ) const
Returns
the minimum loss.

Definition at line 190 of file propagation-loss-model.cc.

References m_minLoss.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

double ns3::FriisPropagationLossModel::GetSystemLoss ( void  ) const
Returns
the current system loss (dimension-less)

Definition at line 180 of file propagation-loss-model.cc.

References m_systemLoss.

TypeId ns3::FriisPropagationLossModel::GetTypeId ( void  )
static

Definition at line 146 of file propagation-loss-model.cc.

References GetFrequency(), GetMinLoss(), m_systemLoss, SetFrequency(), SetMinLoss(), and ns3::TypeId::SetParent().

+ Here is the call graph for this function:

FriisPropagationLossModel& ns3::FriisPropagationLossModel::operator= ( const FriisPropagationLossModel o)
private
void ns3::FriisPropagationLossModel::SetFrequency ( double  frequency)
Parameters
frequency(Hz)

Set the carrier frequency used in the Friis model calculation.

Definition at line 196 of file propagation-loss-model.cc.

References m_frequency, and m_lambda.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

void ns3::FriisPropagationLossModel::SetMinLoss ( double  minLoss)
Parameters
minLossthe minimum loss (dB)

no matter how short the distance, the total propagation loss (in dB) will always be greater or equal than this value

Definition at line 185 of file propagation-loss-model.cc.

References m_minLoss.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

void ns3::FriisPropagationLossModel::SetSystemLoss ( double  systemLoss)
Parameters
systemLoss(dimension-less)

Set the system loss used by the Friis propagation model.

Definition at line 175 of file propagation-loss-model.cc.

References m_systemLoss.

Member Data Documentation

double ns3::FriisPropagationLossModel::m_frequency
private

Definition at line 270 of file propagation-loss-model.h.

Referenced by GetFrequency(), and SetFrequency().

double ns3::FriisPropagationLossModel::m_lambda
private

Definition at line 269 of file propagation-loss-model.h.

Referenced by DoCalcRxPower(), and SetFrequency().

double ns3::FriisPropagationLossModel::m_minLoss
private

Definition at line 272 of file propagation-loss-model.h.

Referenced by DoCalcRxPower(), GetMinLoss(), and SetMinLoss().

double ns3::FriisPropagationLossModel::m_systemLoss
private

Definition at line 271 of file propagation-loss-model.h.

Referenced by DoCalcRxPower(), GetSystemLoss(), GetTypeId(), and SetSystemLoss().

const double ns3::FriisPropagationLossModel::PI = 3.14159265358979323846
staticprivate

Definition at line 268 of file propagation-loss-model.h.

Referenced by DoCalcRxPower().


The documentation for this class was generated from the following files: