Open fin-ger opened 3 years ago
It's called in the dimensional model too but it's way more complicated than the scalar variant. The calls are here, look at FrequencyDependentAttenuationFunction, for example.
Ah thanks for the quick response! I'll look further into why computePathLoss
is not called from there!
Okay, it looks like the TwoRayGroundReflection
only overrides the computePathLoss(const ITransmission *transmission, const IArrival *arrival)
. But the power functions seem to use the computePathLoss(mps propagationSpeed, Hz frequency, m distance)
which is not defined in the TwoRayGroundReflection
and therefore inherited from the FreeSpacePathLoss
. That's why computePathLoss
is not called in the TwoRayGroundReflection
.
How is the TwoRayGroundReflection
supposed to be used? It is not clear to me how to setup the TwoRayGroundReflection
.
The ScalarAnalogModel
uses the (transmission, arrival)
variant of computePathLoss
whereas the attenuation functions always use the (mps, Hz, m)
variant.
This sounds like a bug to me, although I'm unsure whether the fault is in the way attenuation functions handle path loss or the way the TwoRayGroundReflection
is implemented.
Hmm, the transmission/arrival variant is derived from the speed/frequency/distance variant in the base class, so subclasses are expected to override the latter method or both of them.
Therefore it seems to be a bug in the TwoRayGroundReflection pathloss, because it either should override both or override the speed/frequency/distance variant. I guess the reason is that it needs to access the PhysicalEnvironment model to determine the transmitter and receiver altitude above the ground which it clearly cannot in the other variant.
I wonder how the other pathloss functions are implemented, maybe some others are also incomplete in this sense.
I'm just looking at the github web pages of the source file, so maybe I'm wrong but it seems that it's pretty straightforward to override the other variant in TwoRayGroundReflection.
How would you implement TwoRayGroundReflection
with respect to the ground in the (mps, Hz, m)
variant? I don't see how the transmitter and/or receiver altitude from the ground can be obtained.
Just look at the code how it's calculating the pathloss right now. You can do the same in the other (speed/frequency/distance) variant too because the physicalEnvironment field is assigned in initialize(), so it's available. In fact, this pathloss should simply implement this other variant instead of the transmission/arrival one.
It seems like the altitude is obtained from the transmission and arrival position which are not available in the other variant. This means that that the ground projection must be done prior to computing the distance parameter in the attentuation functions. This is not the case, therefore the (mps, Hz, m) variant would not respect the ground model and lead to different results.
I explicitly need the ground model to be included in the path loss.
However, I still don't understand the need for 2 different computePathLoss
variants, so I may be missing something here.
Indeed, you're right, I missed that part. So, the reason for the other variant is that the dimensional model is capable of telling the power spectral density for all transmissions and also for the combined transmission medium at any given space-time coordinate.
I am currently trying to use the
TwoRayGroundReflection
path loss model in a simulation which uses anIEEE80211DimensionalRadioMedium
. I realized thatIPathLoss::computePathLoss
gets never called in my simulation and searched for the cause of this behavior.I found that the path loss is only called in the
ScalarAnalogModelBase
in line 52 whereas theDimensionalAnalogModelBase
handles no path loss at all in thecomputeReceptionPower
method.I am wondering if this is a documentation issue, that the path loss is ignored in dimensional analog models or if this is indeed a bug.
Thanks in advance for any help!