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

This mathematical function provides the signal power of a transmission over space, time and frequency. More...

#include <PowerFunctions.h>

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

Public Member Functions

 PropagatedTransmissionPowerFunction (const Ptr< const IFunction< WpHz, Domain< simsec, Hz >>> &transmissionPowerFunction, const Point< m, m, m > &startPosition, mps propagationSpeed)
 
virtual const Point< m, m, m > & getStartPosition () const
 
virtual WpHz 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< WpHz, Domain< m, m, m, simsec, Hz >> *)> f) 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< WpHz, 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< WpHz, 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< WpHzgetRange () const override
 Returns the valid range of the function as an interval. More...
 
virtual Interval< WpHzgetRange (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 WpHz getMin () const override
 Returns the minimum value for the whole domain. More...
 
virtual WpHz getMin (const typename Domain< m, m, m, simsec, Hz > ::I &i) const override
 Returns the minimum value for the given domain. More...
 
virtual WpHz getMax () const override
 Returns the maximum value for the whole domain. More...
 
virtual WpHz getMax (const typename Domain< m, m, m, simsec, Hz > ::I &i) const override
 Returns the maximum value for the given domain. More...
 
virtual WpHz getMean () const override
 Returns the mean value for the whole domain. More...
 
virtual WpHz getMean (const typename Domain< m, m, m, simsec, Hz > ::I &i) const override
 Returns the mean value for the given domain. More...
 
virtual WpHz getIntegral () const override
 Returns the integral value for the whole domain. More...
 
virtual WpHz 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< WpHz, Domain< m, m, m, simsec, Hz > > > add (const Ptr< const IFunction< WpHz, Domain< m, m, m, simsec, Hz > >> &o) const override
 Adds the provided function to this function. More...
 
virtual const Ptr< const IFunction< WpHz, Domain< m, m, m, simsec, Hz > > > subtract (const Ptr< const IFunction< WpHz, Domain< m, m, m, simsec, Hz > >> &o) const override
 Substracts the provided function from this function. More...
 
virtual const Ptr< const IFunction< WpHz, 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< WpHz, 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< WpHz, Domain< m, m, m, simsec, Hz > >
virtual ~IFunction ()
 
virtual WpHz 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< WpHz, Domain< simsec, Hz > > > transmissionPowerFunction
 
const Point< m, m, mstartPosition
 
const mps propagationSpeed
 

Detailed Description

This mathematical function provides the signal power of a transmission over space, time and frequency.

Signal power attenuation is not applied.

Constructor & Destructor Documentation

◆ PropagatedTransmissionPowerFunction()

inet::physicallayer::PropagatedTransmissionPowerFunction::PropagatedTransmissionPowerFunction ( const Ptr< const IFunction< WpHz, Domain< simsec, Hz >>> &  transmissionPowerFunction,
const Point< m, m, m > &  startPosition,
mps  propagationSpeed 
)
inline

Member Function Documentation

◆ getStartPosition()

virtual const Point<m, m, m>& inet::physicallayer::PropagatedTransmissionPowerFunction::getStartPosition ( ) const
inlinevirtual
302 { return startPosition; }

◆ getValue()

virtual WpHz inet::physicallayer::PropagatedTransmissionPowerFunction::getValue ( const Point< m, m, m, simsec, Hz > &  p) const
inlineoverridevirtual
304  {
305  m x = std::get<0>(p);
306  m y = std::get<1>(p);
307  m z = std::get<2>(p);
308  m startX = std::get<0>(startPosition);
309  m startY = std::get<1>(startPosition);
310  m startZ = std::get<2>(startPosition);
311  m dx = x - startX;
312  m dy = y - startY;
313  m dz = z - startZ;
314  simsec time = std::get<3>(p);
315  Hz frequency = std::get<4>(p);
316  m distance = m(sqrt(dx * dx + dy * dy + dz * dz));
317  if (std::isinf(distance.get()))
318  return WpHz(0);
319  simsec propagationTime = simsec(distance / propagationSpeed);
320  return transmissionPowerFunction->getValue(Point<simsec, Hz>(time - propagationTime, frequency));
321  }

◆ partition()

virtual void inet::physicallayer::PropagatedTransmissionPowerFunction::partition ( const Interval< m, m, m, simsec, Hz > &  i,
const std::function< void(const Interval< m, m, m, simsec, Hz > &, const IFunction< WpHz, Domain< m, m, m, simsec, Hz >> *)>  f 
) const
inlineoverridevirtual
323  {
324  const auto& lower = i.getLower();
325  const auto& upper = i.getUpper();
326  if ((i.getFixed() & 0b11100) == 0b11100) {
327  m x = std::get<0>(lower);
328  m y = std::get<1>(lower);
329  m z = std::get<2>(lower);
330  m startX = std::get<0>(startPosition);
331  m startY = std::get<1>(startPosition);
332  m startZ = std::get<2>(startPosition);
333  m dx = x - startX;
334  m dy = y - startY;
335  m dz = z - startZ;
336  m distance = m(sqrt(dx * dx + dy * dy + dz * dz));
337  simsec propagationTime = simsec(distance / propagationSpeed);
338  Point<simsec, Hz> l1(std::get<3>(lower) - propagationTime, std::get<4>(i.getLower()));
339  Point<simsec, Hz> u1(std::get<3>(upper) - propagationTime, std::get<4>(i.getUpper()));
340  Interval<simsec, Hz> i1(l1, u1, i.getLowerClosed() & 0b11, i.getUpperClosed() & 0b11, i.getFixed() & 0b11);
341  transmissionPowerFunction->partition(i1, [&] (const Interval<simsec, Hz>& i2, const IFunction<WpHz, Domain<simsec, Hz>> *f2) {
343  Point<m, m, m, simsec, Hz>(std::get<0>(lower), std::get<1>(lower), std::get<2>(lower), std::get<0>(i2.getLower()) + propagationTime, std::get<1>(i2.getLower())),
344  Point<m, m, m, simsec, Hz>(std::get<0>(upper), std::get<1>(upper), std::get<2>(upper), std::get<0>(i2.getUpper()) + propagationTime, std::get<1>(i2.getUpper())),
345  0b11100 | i2.getLowerClosed(),
346  0b11100 | i2.getUpperClosed(),
347  0b11100 | i2.getFixed());
348  if (auto f2c = dynamic_cast<const ConstantFunction<WpHz, Domain<simsec, Hz>> *>(f2)) {
349  ConstantFunction<WpHz, Domain<m, m, m, simsec, Hz>> g(f2c->getConstantValue());
350  f(i3, &g);
351  }
352  else if (auto f2l = dynamic_cast<const UnilinearFunction<WpHz, Domain<simsec, Hz>> *>(f2)) {
353  UnilinearFunction<WpHz, Domain<m, m, m, simsec, Hz>> g(i3.getLower(), i3.getUpper(), f2l->getValue(i2.getLower()), f2l->getValue(i2.getUpper()), f2l->getDimension() + 3);
354  f(i3, &g);
355  }
356  else
357  throw cRuntimeError("TODO");
358  });
359  }
360  else
362  }

◆ printStructure()

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

364  {
365  os << "(PropagatedTransmissionPower\n" << std::string(level + 2, ' ');
366  transmissionPowerFunction->printStructure(os, level + 2);
367  os << ")";
368  }

Member Data Documentation

◆ propagationSpeed

const mps inet::physicallayer::PropagatedTransmissionPowerFunction::propagationSpeed
protected

◆ startPosition

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

◆ transmissionPowerFunction

const Ptr<const IFunction<WpHz, Domain<simsec, Hz> > > inet::physicallayer::PropagatedTransmissionPowerFunction::transmissionPowerFunction
protected

The documentation for this class was generated from the following file:
inet::math::Interval::getLowerClosed
unsigned char getLowerClosed() const
Definition: Interval.h:117
inet::units::values::simsec
value< simtime_t, units::s > simsec
Definition: Units.h:1236
inet::math::Point
N-dimensional point.
Definition: Point.h:93
inet::math::Interval
N-dimensional interval (cuboid), given by its two opposite corners.
Definition: Interval.h:26
inet::math::IFunction
This interface represents a mathematical function from domain D to range R.
Definition: IFunction.h:26
inet::units::units::g
milli< kg >::type g
Definition: Units.h:1071
inet::math::ConstantFunction
Definition: PrimitiveFunctions.h:19
inet::physicallayer::PropagatedTransmissionPowerFunction::startPosition
const Point< m, m, m > startPosition
Definition: PowerFunctions.h:296
inet::units::sqrt
value< Value, pow< Unit, 1, 2 > > sqrt(const value< Value, Unit > &a)
Definition: Units.h:272
inet::physicallayer::PropagatedTransmissionPowerFunction::transmissionPowerFunction
const Ptr< const IFunction< WpHz, Domain< simsec, Hz > > > transmissionPowerFunction
Definition: PowerFunctions.h:295
inet::units::units::WpHz
compose< W, pow< Hz, -1 > > WpHz
Definition: Units.h:940
inet::math::Interval::getUpperClosed
unsigned char getUpperClosed() const
Definition: Interval.h:118
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::physicallayer::PropagatedTransmissionPowerFunction::propagationSpeed
const mps propagationSpeed
Definition: PowerFunctions.h:297
inet::math::Domain
This class represents the domain of a mathematical function.
Definition: Domain.h:24
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::math::UnilinearFunction
Linear in one dimension and constant in the others.
Definition: PrimitiveFunctions.h:57
inet::units::value
Definition: Units.h:81