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);
51 Hz lower = dimensionalTransmission->getCenterFrequency() - dimensionalTransmission->getBandwidth() / 2;
52 Hz upper = dimensionalTransmission->getCenterFrequency() + dimensionalTransmission->getBandwidth() / 2;
53 Hz step = dimensionalTransmission->getBandwidth() / 10;
55 receptionPower = propagatedTransmissionPowerFunction->multiply(approximatedAttenuationFunction);
57 EV_TRACE <<
"Reception power begin " << endl;
58 EV_TRACE << *receptionPower << endl;
59 EV_TRACE <<
"Reception power end" << endl;
60 return receptionPower;