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

#include <DimensionalAnalogModelBase.h>

Inheritance diagram for inet::physicallayer::DimensionalAnalogModelBase:
inet::physicallayer::AnalogModelBase inet::physicallayer::IAnalogModel inet::IPrintableObject inet::physicallayer::DimensionalAnalogModel inet::physicallayer::LayeredDimensionalAnalogModel

Public Member Functions

virtual const Ptr< const IFunction< WpHz, Domain< simsec, Hz > > > computeReceptionPower (const IRadio *radio, const ITransmission *transmission, const IArrival *arrival) const
 
virtual const INoisecomputeNoise (const IListening *listening, const IInterference *interference) const override
 Returns the total noise summing up all the interfering receptions and noises. More...
 
virtual const INoisecomputeNoise (const IReception *reception, const INoise *noise) const override
 Returns the total noise summing up all the reception and the noise. More...
 
virtual const ISnircomputeSNIR (const IReception *reception, const INoise *noise) const override
 Returns the signal to noise and interference ratio. More...
 
- Public Member Functions inherited from inet::physicallayer::IAnalogModel
virtual const IReceptioncomputeReception (const IRadio *receiver, const ITransmission *transmission, const IArrival *arrival) const =0
 Returns the reception for the provided transmission at the receiver. More...
 
- Public Member Functions inherited from inet::IPrintableObject
virtual ~IPrintableObject ()
 
virtual std::ostream & printToStream (std::ostream &stream, int level, int evFlags=0) const
 Prints this object to the provided output stream. More...
 
virtual std::string printToString () const
 
virtual std::string printToString (int level, int evFlags=0) const
 
virtual std::string getInfoStringRepresentation (int evFlags=0) const
 
virtual std::string getDetailStringRepresentation (int evFlags=0) const
 
virtual std::string getDebugStringRepresentation (int evFlags=0) const
 
virtual std::string getTraceStringRepresentation (int evFlags=0) const
 
virtual std::string getCompleteStringRepresentation (int evFlags=0) const
 

Protected Member Functions

virtual void initialize (int stage) override
 
- Protected Member Functions inherited from inet::physicallayer::AnalogModelBase
virtual double computeAntennaGain (const IAntennaGain *antenna, const Coord &startPosition, const Coord &endPosition, const Quaternion &startOrientation) const
 

Protected Attributes

bool attenuateWithCenterFrequency
 

Additional Inherited Members

- Public Types inherited from inet::IPrintableObject
enum  PrintLevel {
  PRINT_LEVEL_TRACE, PRINT_LEVEL_DEBUG, PRINT_LEVEL_DETAIL, PRINT_LEVEL_INFO,
  PRINT_LEVEL_COMPLETE = INT_MIN
}
 
enum  PrintFlag { PRINT_FLAG_FORMATTED = (1 << 0), PRINT_FLAG_MULTILINE = (1 << 1) }
 

Member Function Documentation

◆ computeNoise() [1/2]

const INoise * inet::physicallayer::DimensionalAnalogModelBase::computeNoise ( const IListening listening,
const IInterference interference 
) const
overridevirtual

Returns the total noise summing up all the interfering receptions and noises.

This function never returns nullptr.

Implements inet::physicallayer::IAnalogModel.

64 {
65  const BandListening *bandListening = check_and_cast<const BandListening *>(listening);
66  Hz centerFrequency = bandListening->getCenterFrequency();
67  Hz bandwidth = bandListening->getBandwidth();
68  std::vector<Ptr<const IFunction<WpHz, Domain<simsec, Hz>>>> receptionPowers;
69  const DimensionalNoise *dimensionalBackgroundNoise = check_and_cast_nullable<const DimensionalNoise *>(interference->getBackgroundNoise());
70  if (dimensionalBackgroundNoise) {
71  const auto& backgroundNoisePower = dimensionalBackgroundNoise->getPower();
72  receptionPowers.push_back(backgroundNoisePower);
73  }
74  const std::vector<const IReception *> *interferingReceptions = interference->getInterferingReceptions();
75  for (const auto& interferingReception : *interferingReceptions) {
76  const DimensionalReception *dimensionalReception = check_and_cast<const DimensionalReception *>(interferingReception);
77  auto receptionPower = dimensionalReception->getPower();
78  receptionPowers.push_back(receptionPower);
79  EV_TRACE << "Interference power begin " << endl;
80  EV_TRACE << *receptionPower << endl;
81  EV_TRACE << "Interference power end" << endl;
82  }
83  const Ptr<const IFunction<WpHz, Domain<simsec, Hz>>>& noisePower = makeShared<SummedFunction<WpHz, Domain<simsec, Hz>>>(receptionPowers);
84  EV_TRACE << "Noise power begin " << endl;
85  EV_TRACE << *noisePower << endl;
86  EV_TRACE << "Noise power end" << endl;
87  const auto& bandpassFilter = makeShared<Boxcar2DFunction<double, simsec, Hz>>(simsec(listening->getStartTime()), simsec(listening->getEndTime()), centerFrequency - bandwidth / 2, centerFrequency + bandwidth / 2, 1);
88  return new DimensionalNoise(listening->getStartTime(), listening->getEndTime(), centerFrequency, bandwidth, noisePower->multiply(bandpassFilter));
89 }

◆ computeNoise() [2/2]

const INoise * inet::physicallayer::DimensionalAnalogModelBase::computeNoise ( const IReception reception,
const INoise noise 
) const
overridevirtual

Returns the total noise summing up all the reception and the noise.

This function never returns nullptr.

Implements inet::physicallayer::IAnalogModel.

92 {
93  auto dimensionalReception = check_and_cast<const DimensionalReception *>(reception);
94  auto dimensionalNoise = check_and_cast<const DimensionalNoise *>(noise);
95  const Ptr<const IFunction<WpHz, Domain<simsec, Hz>>>& noisePower = makeShared<AddedFunction<WpHz, Domain<simsec, Hz>>>(dimensionalReception->getPower(), dimensionalNoise->getPower());
96  return new DimensionalNoise(reception->getStartTime(), reception->getEndTime(), dimensionalReception->getCenterFrequency(), dimensionalReception->getBandwidth(), noisePower);
97 }

◆ computeReceptionPower()

const Ptr< const IFunction< WpHz, Domain< simsec, Hz > > > inet::physicallayer::DimensionalAnalogModelBase::computeReceptionPower ( const IRadio radio,
const ITransmission transmission,
const IArrival arrival 
) const
virtual
30 {
31  const IRadioMedium *radioMedium = receiverRadio->getMedium();
32  const DimensionalTransmission *dimensionalTransmission = check_and_cast<const DimensionalTransmission *>(transmission);
33  const IDimensionalSignal *dimensionalSignalAnalogModel = check_and_cast<const IDimensionalSignal *>(transmission->getAnalogModel());
34  const Coord& transmissionStartPosition = transmission->getStartPosition();
35  const Coord& receptionStartPosition = arrival->getStartPosition();
36  double transmitterAntennaGain = computeAntennaGain(transmission->getTransmitterAntennaGain(), transmissionStartPosition, arrival->getStartPosition(), transmission->getStartOrientation());
37  double receiverAntennaGain = computeAntennaGain(receiverRadio->getAntenna()->getGain().get(), arrival->getStartPosition(), transmissionStartPosition, arrival->getStartOrientation());
38  const auto& transmissionPowerFunction = dimensionalSignalAnalogModel->getPower();
39  EV_TRACE << "Transmission power begin " << endl;
40  EV_TRACE << *transmissionPowerFunction << endl;
41  EV_TRACE << "Transmission power end" << endl;
42  Point<simsec, Hz> propagationShift(simsec(arrival->getStartTime() - transmission->getStartTime()), Hz(0));
43  const auto& propagatedTransmissionPowerFunction = makeShared<DomainShiftedFunction<WpHz, Domain<simsec, Hz>>>(transmissionPowerFunction, propagationShift);
44  Ptr<const IFunction<double, Domain<simsec, Hz>>> attenuationFunction = makeShared<FrequencyDependentAttenuationFunction>(radioMedium, transmitterAntennaGain, receiverAntennaGain, transmissionStartPosition, receptionStartPosition);
45  Ptr<const IFunction<WpHz, Domain<simsec, Hz>>> receptionPower;
47  const auto& constantAttenuationFunction = makeShared<ConstantFunction<double, Domain<simsec, Hz>>>(attenuationFunction->getValue(Point<simsec, Hz>(simsec(0), dimensionalTransmission->getCenterFrequency())));
48  receptionPower = propagatedTransmissionPowerFunction->multiply(constantAttenuationFunction);
49  }
50  else {
51  Hz lower = dimensionalTransmission->getCenterFrequency() - dimensionalTransmission->getBandwidth() / 2;
52  Hz upper = dimensionalTransmission->getCenterFrequency() + dimensionalTransmission->getBandwidth() / 2;
53  Hz step = dimensionalTransmission->getBandwidth() / 10; // TODO parameter for 10
54  const auto& approximatedAttenuationFunction = makeShared<ApproximatedFunction<double, Domain<simsec, Hz>, 1, Hz>>(lower, upper, step, &AverageInterpolator<Hz, double>::singleton, attenuationFunction);
55  receptionPower = propagatedTransmissionPowerFunction->multiply(approximatedAttenuationFunction);
56  }
57  EV_TRACE << "Reception power begin " << endl;
58  EV_TRACE << *receptionPower << endl;
59  EV_TRACE << "Reception power end" << endl;
60  return receptionPower;
61 }

Referenced by inet::physicallayer::DimensionalAnalogModel::computeReception(), and inet::physicallayer::LayeredDimensionalAnalogModel::computeReception().

◆ computeSNIR()

const ISnir * inet::physicallayer::DimensionalAnalogModelBase::computeSNIR ( const IReception reception,
const INoise noise 
) const
overridevirtual

Returns the signal to noise and interference ratio.

This function never returns nullptr.

Implements inet::physicallayer::IAnalogModel.

100 {
101  const DimensionalReception *dimensionalReception = check_and_cast<const DimensionalReception *>(reception);
102  const DimensionalNoise *dimensionalNoise = check_and_cast<const DimensionalNoise *>(noise);
103  return new DimensionalSnir(dimensionalReception, dimensionalNoise);
104 }

◆ initialize()

void inet::physicallayer::DimensionalAnalogModelBase::initialize ( int  stage)
overrideprotectedvirtual
23 {
24  AnalogModelBase::initialize(stage);
25  if (stage == INITSTAGE_LOCAL)
26  attenuateWithCenterFrequency = par("attenuateWithCenterFrequency"); // TODO rename center
27 }

Member Data Documentation

◆ attenuateWithCenterFrequency

bool inet::physicallayer::DimensionalAnalogModelBase::attenuateWithCenterFrequency
protected

The documentation for this class was generated from the following files:
inet::units::values::simsec
value< simtime_t, units::s > simsec
Definition: Units.h:1236
inet::units::units::Hz
pow< s, -1 > Hz
Definition: Units.h:935
inet::physicallayer::AnalogModelBase::computeAntennaGain
virtual double computeAntennaGain(const IAntennaGain *antenna, const Coord &startPosition, const Coord &endPosition, const Quaternion &startOrientation) const
Definition: AnalogModelBase.cc:16
inet::math::step
double step(double a, double b)
Definition: INETMath.h:131
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::math::AverageInterpolator::singleton
static AverageInterpolator< X, Y > singleton
Definition: Interpolators.h:100
inet::physicallayer::DimensionalAnalogModelBase::attenuateWithCenterFrequency
bool attenuateWithCenterFrequency
Definition: DimensionalAnalogModelBase.h:23