INET Framework for OMNeT++/OMNEST
inet::physicallayer::FrequencyDependentAttenuationFunction Class Reference

This mathematical function provides the signal attenuation for any given time and frequency coordinates. More...

#include <PowerFunctions.h>

Inheritance diagram for inet::physicallayer::FrequencyDependentAttenuationFunction:
inet::math::FunctionBase< double, Domain< simsec, Hz > > inet::math::IFunction< double, Domain< simsec, Hz > >

Public Member Functions

 FrequencyDependentAttenuationFunction (const IRadioMedium *radioMedium, const double transmitterAntennaGain, const double receiverAntennaGain, const Coord &transmissionPosition, const Coord &receptionPosition)
 
virtual double getValue (const Point< simsec, Hz > &p) const override
 
virtual bool isFinite (const Interval< simsec, Hz > &i) const override
 
virtual void printStructure (std::ostream &os, int level=0) const override
 Prints the internal data structure of this function in a human readable form to the provided stream. More...
 
- Public Member Functions inherited from inet::math::FunctionBase< double, Domain< simsec, Hz > >
virtual void partition (const typename Domain< simsec, Hz > ::I &i, const std::function< void(const typename Domain< simsec, Hz > ::I &, const IFunction< double, Domain< simsec, Hz > > *)> callback) const override
 Subdivides the provided domain and calls back f with the subdomains and the corresponding potentially simpler domain limited functions. More...
 
virtual Interval< double > getRange () const override
 Returns the valid range of the function as an interval. More...
 
virtual Interval< double > getRange (const typename Domain< simsec, Hz > ::I &i) const override
 Returns the valid range of the function as an interval for the given domain. More...
 
virtual Domain< simsec, Hz > ::I getDomain () const override
 Returns the valid domain of the function as an interval. More...
 
virtual bool isFinite () const override
 Returns true if the function value is finite in the whole domain. More...
 
virtual bool isFinite (const typename Domain< simsec, Hz > ::I &i) const override
 Returns true if the function value is finite in the given domain. More...
 
virtual bool isNonZero () const override
 Returns true if the function value is non-zero in the whole domain. More...
 
virtual bool isNonZero (const typename Domain< simsec, Hz > ::I &i) const override
 Returns true if the function value is non-zero in the given domain. More...
 
virtual double getMin () const override
 Returns the minimum value for the whole domain. More...
 
virtual double getMin (const typename Domain< simsec, Hz > ::I &i) const override
 Returns the minimum value for the given domain. More...
 
virtual double getMax () const override
 Returns the maximum value for the whole domain. More...
 
virtual double getMax (const typename Domain< simsec, Hz > ::I &i) const override
 Returns the maximum value for the given domain. More...
 
virtual double getMean () const override
 Returns the mean value for the whole domain. More...
 
virtual double getMean (const typename Domain< simsec, Hz > ::I &i) const override
 Returns the mean value for the given domain. More...
 
virtual double getIntegral () const override
 Returns the integral value for the whole domain. More...
 
virtual double getIntegral (const typename Domain< simsec, Hz > ::I &i) const override
 Returns the integral value for the given domain. More...
 
virtual const Ptr< const IFunction< double, Domain< simsec, Hz > > > add (const Ptr< const IFunction< double, Domain< simsec, Hz > >> &o) const override
 Adds the provided function to this function. More...
 
virtual const Ptr< const IFunction< double, Domain< simsec, Hz > > > subtract (const Ptr< const IFunction< double, Domain< simsec, Hz > >> &o) const override
 Substracts the provided function from this function. More...
 
virtual const Ptr< const IFunction< double, Domain< simsec, Hz > > > multiply (const Ptr< const IFunction< double, Domain< simsec, Hz > >> &o) const override
 Multiplies the provided function with this function. More...
 
virtual const Ptr< const IFunction< double, Domain< simsec, Hz > > > divide (const Ptr< const IFunction< double, Domain< simsec, Hz > >> &o) const override
 Divides this function with the provided function. More...
 
virtual std::ostream & printOn (std::ostream &os) const override
 
virtual void print (std::ostream &os, int level=0) const override
 Prints this function in human readable form to the provided stream for the whole domain. More...
 
virtual void print (std::ostream &os, const typename Domain< simsec, Hz > ::I &i, int level=0) const override
 Prints this function in a human readable form to the provided stream for the given domain. More...
 
virtual void printPartitioning (std::ostream &os, const typename Domain< simsec, Hz > ::I &i, int level) const override
 Prints the partitioning of this function in a human readable form to the provided stream for the given domain. More...
 
virtual void printPartition (std::ostream &os, const typename Domain< simsec, Hz > ::I &i, int level=0) const override
 Prints a single partition of this function in a human readable form to the provided stream for the given domain. More...
 
- Public Member Functions inherited from inet::math::IFunction< double, Domain< simsec, Hz > >
virtual ~IFunction ()
 
virtual double getValue (const typename Domain< simsec, Hz > ::P &p) const=0
 Returns the value of the function at the given point. More...
 

Protected Attributes

const IRadioMediumradioMedium = nullptr
 
const double transmitterAntennaGain
 
const double receiverAntennaGain
 
const Coord transmissionPosition
 
const Coord receptionPosition
 
const m distance
 

Detailed Description

This mathematical function provides the signal attenuation for any given time and frequency coordinates.

This function assumes the transmitter and the receiver are stationary for the duration of the transmission and the reception. The function value is not time dependent but having the time dimension in this definition simplifies further computations.

Constructor & Destructor Documentation

◆ FrequencyDependentAttenuationFunction()

inet::physicallayer::FrequencyDependentAttenuationFunction::FrequencyDependentAttenuationFunction ( const IRadioMedium radioMedium,
const double  transmitterAntennaGain,
const double  receiverAntennaGain,
const Coord transmissionPosition,
const Coord receptionPosition 
)
inline

Member Function Documentation

◆ getValue()

virtual double inet::physicallayer::FrequencyDependentAttenuationFunction::getValue ( const Point< simsec, Hz > &  p) const
inlineoverridevirtual
46  {
47  Hz frequency = std::get<1>(p);
48  auto propagationSpeed = radioMedium->getPropagation()->getPropagationSpeed();
49  auto pathLoss = radioMedium->getPathLoss()->computePathLoss(propagationSpeed, frequency, distance);
51  double gain = transmitterAntennaGain * receiverAntennaGain * pathLoss * obstacleLoss;
52  ASSERT(!std::isnan(gain));
53  if (gain > 1.0) {
54  EV_STATICCONTEXT;
55  EV_WARN << "Signal power attenuation is zero.\n";
56  gain = 1.0;
57  }
58  return gain;
59  }

◆ isFinite()

virtual bool inet::physicallayer::FrequencyDependentAttenuationFunction::isFinite ( const Interval< simsec, Hz > &  i) const
inlineoverridevirtual
61 { return true; }

◆ printStructure()

virtual void inet::physicallayer::FrequencyDependentAttenuationFunction::printStructure ( std::ostream &  os,
int  level = 0 
) const
inlineoverridevirtual

Prints the internal data structure of this function in a human readable form to the provided stream.

Reimplemented from inet::math::FunctionBase< double, Domain< simsec, Hz > >.

63  {
64  os << "(FrequencyDependentAttenuation" << EV_FIELD(distance) << EV_FIELD(transmitterAntennaGain) << EV_FIELD(receiverAntennaGain);
65  os << "\n" << std::string(level + 2, ' ');
66  os << "(" << *radioMedium->getPathLoss() << ")";
67  os << "\n" << std::string(level + 2, ' ');
68  os << "(" << *radioMedium->getObstacleLoss() << "))";
69  }

Member Data Documentation

◆ distance

const m inet::physicallayer::FrequencyDependentAttenuationFunction::distance
protected

◆ radioMedium

const IRadioMedium* inet::physicallayer::FrequencyDependentAttenuationFunction::radioMedium = nullptr
protected

◆ receiverAntennaGain

const double inet::physicallayer::FrequencyDependentAttenuationFunction::receiverAntennaGain
protected

◆ receptionPosition

const Coord inet::physicallayer::FrequencyDependentAttenuationFunction::receptionPosition
protected

◆ transmissionPosition

const Coord inet::physicallayer::FrequencyDependentAttenuationFunction::transmissionPosition
protected

◆ transmitterAntennaGain

const double inet::physicallayer::FrequencyDependentAttenuationFunction::transmitterAntennaGain
protected

The documentation for this class was generated from the following file:
inet::physicallayer::IRadioMedium::getPathLoss
virtual const IPathLoss * getPathLoss() const =0
Returns the signal path loss model of this medium.
inet::physicallayer::FrequencyDependentAttenuationFunction::transmitterAntennaGain
const double transmitterAntennaGain
Definition: PowerFunctions.h:34
inet::physicallayer::IPropagation::getPropagationSpeed
virtual mps getPropagationSpeed() const =0
Returns the theoretical propagation speed of radio signals in the range (0, +infinity).
inet::physicallayer::FrequencyDependentAttenuationFunction::distance
const m distance
Definition: PowerFunctions.h:38
inet::physicallayer::FrequencyDependentAttenuationFunction::receptionPosition
const Coord receptionPosition
Definition: PowerFunctions.h:37
inet::Coord::distance
double distance(const Coord &a) const
Returns the distance to Coord 'a'.
Definition: Coord.h:251
inet::physicallayer::IRadioMedium::getPropagation
virtual const IPropagation * getPropagation() const =0
Returns the signal propagation model of this medium.
inet::physicallayer::IObstacleLoss::computeObstacleLoss
virtual double computeObstacleLoss(Hz frequency, const Coord &transmissionPosition, const Coord &receptionPosition) const =0
Returns the obstacle loss factor caused by physical objects present in the environment as a function ...
inet::physicallayer::FrequencyDependentAttenuationFunction::radioMedium
const IRadioMedium * radioMedium
Definition: PowerFunctions.h:33
inet::physicallayer::FrequencyDependentAttenuationFunction::receiverAntennaGain
const double receiverAntennaGain
Definition: PowerFunctions.h:35
EV_FIELD
#define EV_FIELD(...)
Definition: INETDefs.h:112
inet::physicallayer::IRadioMedium::getObstacleLoss
virtual const IObstacleLoss * getObstacleLoss() const =0
Returns the signal obstacle loss model of this medium.
inet::physicallayer::FrequencyDependentAttenuationFunction::transmissionPosition
const Coord transmissionPosition
Definition: PowerFunctions.h:36
inet::physicallayer::IPathLoss::computePathLoss
virtual double computePathLoss(const ITransmission *transmission, const IArrival *arrival) const =0
Returns the loss factor for the provided transmission and arrival.
inet::units::values::m
value< double, units::m > m
Definition: Units.h:1233
inet::units::value
Definition: Units.h:81