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

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

#include <PowerFunctions.h>

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

Public Member Functions

 SpaceAndFrequencyDependentAttenuationFunction (const Ptr< const IFunction< double, Domain< Quaternion >>> &transmitterAntennaGainFunction, const Ptr< const IFunction< double, Domain< mps, m, Hz >>> &pathLossFunction, const Ptr< const IFunction< double, Domain< m, m, m, m, m, m, Hz >>> &obstacleLossFunction, const Point< m, m, m > startPosition, const Quaternion &startOrientation, const mps propagationSpeed)
 
virtual double getValue (const Point< m, m, m, simsec, Hz > &p) const override
 
virtual void partition (const Interval< m, m, m, simsec, Hz > &i, const std::function< void(const Interval< m, m, m, simsec, Hz > &, const IFunction< double, Domain< m, m, m, simsec, Hz >> *)> f) const override
 
virtual bool isFinite (const Interval< m, m, m, 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< m, m, m, simsec, Hz > >
virtual void partition (const typename Domain< m, m, m, simsec, Hz > ::I &i, const std::function< void(const typename Domain< m, m, m, simsec, Hz > ::I &, const IFunction< double, Domain< m, m, m, 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< m, m, m, simsec, Hz > ::I &i) const override
 Returns the valid range of the function as an interval for the given domain. More...
 
virtual Domain< m, m, m, 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< m, m, m, 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< m, m, m, 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< m, m, m, 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< m, m, m, 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< m, m, m, 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< m, m, m, simsec, Hz > ::I &i) const override
 Returns the integral value for the given domain. More...
 
virtual const Ptr< const IFunction< double, Domain< m, m, m, simsec, Hz > > > add (const Ptr< const IFunction< double, Domain< m, m, m, simsec, Hz > >> &o) const override
 Adds the provided function to this function. More...
 
virtual const Ptr< const IFunction< double, Domain< m, m, m, simsec, Hz > > > subtract (const Ptr< const IFunction< double, Domain< m, m, m, simsec, Hz > >> &o) const override
 Substracts the provided function from this function. More...
 
virtual const Ptr< const IFunction< double, Domain< m, m, m, simsec, Hz > > > multiply (const Ptr< const IFunction< double, Domain< m, m, m, simsec, Hz > >> &o) const override
 Multiplies the provided function with this function. More...
 
virtual const Ptr< const IFunction< double, Domain< m, m, m, simsec, Hz > > > divide (const Ptr< const IFunction< double, Domain< m, m, m, 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< m, m, m, 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< m, m, m, 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< m, m, m, 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< m, m, m, simsec, Hz > >
virtual ~IFunction ()
 
virtual double getValue (const typename Domain< m, m, m, simsec, Hz > ::P &p) const=0
 Returns the value of the function at the given point. More...
 

Protected Attributes

const Ptr< const IFunction< double, Domain< Quaternion > > > transmitterAntennaGainFunction
 
const Ptr< const IFunction< double, Domain< mps, m, Hz > > > pathLossFunction
 
const Ptr< const IFunction< double, Domain< m, m, m, m, m, m, Hz > > > obstacleLossFunction
 
const Point< m, m, mstartPosition
 
const Quaternion startOrientation
 
const mps propagationSpeed
 

Detailed Description

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

The function value is only dependent on the space and frequency coordinates. This function assumes the transmitter and is stationary for the duration of the transmission. The function value is not time dependent but having the time dimension in this definition simplifies further computations.

Constructor & Destructor Documentation

◆ SpaceAndFrequencyDependentAttenuationFunction()

inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::SpaceAndFrequencyDependentAttenuationFunction ( const Ptr< const IFunction< double, Domain< Quaternion >>> &  transmitterAntennaGainFunction,
const Ptr< const IFunction< double, Domain< mps, m, Hz >>> &  pathLossFunction,
const Ptr< const IFunction< double, Domain< m, m, m, m, m, m, Hz >>> &  obstacleLossFunction,
const Point< m, m, m startPosition,
const Quaternion startOrientation,
const mps  propagationSpeed 
)
inline

Member Function Documentation

◆ getValue()

virtual double inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::getValue ( const Point< m, m, m, simsec, Hz > &  p) const
inlineoverridevirtual
93  {
94  m x = std::get<0>(p);
95  m y = std::get<1>(p);
96  m z = std::get<2>(p);
97  m startX = std::get<0>(startPosition);
98  m startY = std::get<1>(startPosition);
99  m startZ = std::get<2>(startPosition);
100  m dx = x - startX;
101  m dy = y - startY;
102  m dz = z - startZ;
103  Hz frequency = std::get<4>(p);
104  m distance = m(sqrt(dx * dx + dy * dy + dz * dz));
105  auto direction = Quaternion::rotationFromTo(Coord::X_AXIS, Coord(dx.get(), dy.get(), dz.get()));
106  auto antennaLocalDirection = startOrientation.inverse() * direction;
107  double transmitterAntennaGain = distance == m(0) || transmitterAntennaGainFunction == nullptr ? 1 : transmitterAntennaGainFunction->getValue(Point<Quaternion>(antennaLocalDirection));
108  double pathLoss = pathLossFunction->getValue(Point<mps, m, Hz>(propagationSpeed, distance, frequency));
109  double obstacleLoss = obstacleLossFunction != nullptr ? obstacleLossFunction->getValue(Point<m, m, m, m, m, m, Hz>(startX, startY, startZ, x, y, z, frequency)) : 1;
110  double gain = transmitterAntennaGain * pathLoss * obstacleLoss;
111  if (gain > 1.0) {
112  EV_STATICCONTEXT;
113  EV_WARN << "Signal power attenuation is zero.\n";
114  gain = 1.0;
115  }
116  return gain;
117  }

◆ isFinite()

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

◆ partition()

virtual void inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::partition ( const Interval< m, m, m, simsec, Hz > &  i,
const std::function< void(const Interval< m, m, m, simsec, Hz > &, const IFunction< double, Domain< m, m, m, simsec, Hz >> *)>  f 
) const
inlineoverridevirtual
119  {
120  const auto& lower = i.getLower();
121  const auto& upper = i.getUpper();
122  if ((i.getFixed() & 0b11101) == 0b11101) {
123  auto lowerValue = getValue(lower);
124  auto upperValue = getValue(upper);
125  ASSERT(lowerValue == upperValue);
127  f(i, &g);
128  }
129  else
131  }

◆ printStructure()

virtual void inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::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< m, m, m, simsec, Hz > >.

135  {
136  os << "(SpaceAndFrequencyDependentAttenuation\n" << std::string(level + 2, ' ');
137  if (transmitterAntennaGainFunction != nullptr) {
138  transmitterAntennaGainFunction->printStructure(os, level + 2);
139  os << "\n" << std::string(level + 2, ' ');
140  }
141  pathLossFunction->printStructure(os, level + 2);
142  os << "\n" << std::string(level + 2, ' ');
143  obstacleLossFunction->printStructure(os, level + 2);
144  os << ")";
145  }

Member Data Documentation

◆ obstacleLossFunction

const Ptr<const IFunction<double, Domain<m, m, m, m, m, m, Hz> > > inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::obstacleLossFunction
protected

◆ pathLossFunction

const Ptr<const IFunction<double, Domain<mps, m, Hz> > > inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::pathLossFunction
protected

◆ propagationSpeed

const mps inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::propagationSpeed
protected

◆ startOrientation

const Quaternion inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::startOrientation
protected

◆ startPosition

const Point<m, m, m> inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::startPosition
protected

◆ transmitterAntennaGainFunction

const Ptr<const IFunction<double, Domain<Quaternion> > > inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::transmitterAntennaGainFunction
protected

The documentation for this class was generated from the following file:
inet::math::Point
N-dimensional point.
Definition: Point.h:93
inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::obstacleLossFunction
const Ptr< const IFunction< double, Domain< m, m, m, m, m, m, Hz > > > obstacleLossFunction
Definition: PowerFunctions.h:84
inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::getValue
virtual double getValue(const Point< m, m, m, simsec, Hz > &p) const override
Definition: PowerFunctions.h:93
inet::Quaternion::rotationFromTo
static Quaternion rotationFromTo(const Coord &from, const Coord &to)
Definition: Quaternion.cc:157
inet::units::units::g
milli< kg >::type g
Definition: Units.h:1071
inet::math::ConstantFunction
Definition: PrimitiveFunctions.h:19
inet::units::sqrt
value< Value, pow< Unit, 1, 2 > > sqrt(const value< Value, Unit > &a)
Definition: Units.h:272
inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::startPosition
const Point< m, m, m > startPosition
Definition: PowerFunctions.h:85
inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::propagationSpeed
const mps propagationSpeed
Definition: PowerFunctions.h:87
inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::pathLossFunction
const Ptr< const IFunction< double, Domain< mps, m, Hz > > > pathLossFunction
Definition: PowerFunctions.h:83
inet::Coord::X_AXIS
static const Coord X_AXIS
Definition: Coord.h:29
inet::math::Interval::getFixed
unsigned char getFixed() const
Definition: Interval.h:119
inet::math::Interval::getLower
const Point< T ... > & getLower() const
Definition: Interval.h:115
inet::math::FunctionBase::partition
virtual void partition(const typename D::I &i, const std::function< void(const typename D::I &, const IFunction< R, D > *)> callback) const override
Subdivides the provided domain and calls back f with the subdomains and the corresponding potentially...
Definition: FunctionBase.h:39
inet::units::values::m
value< double, units::m > m
Definition: Units.h:1233
inet::math::Interval::getUpper
const Point< T ... > & getUpper() const
Definition: Interval.h:116
inet::Quaternion::inverse
Quaternion inverse() const
returns the inverse of this Quaternion
Definition: Quaternion.h:88
inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::startOrientation
const Quaternion startOrientation
Definition: PowerFunctions.h:86
inet::physicallayer::SpaceAndFrequencyDependentAttenuationFunction::transmitterAntennaGainFunction
const Ptr< const IFunction< double, Domain< Quaternion > > > transmitterAntennaGainFunction
Definition: PowerFunctions.h:82
inet::units::value
Definition: Units.h:81