From ce8b512f0f61fa2d707068cdcba4b145fe2aac21 Mon Sep 17 00:00:00 2001 From: Dean Armstrong Date: Tue, 1 Mar 2011 16:58:05 +0000 Subject: [PATCH] Bug 1064: Correct Friis propagation loss equation The FrissSpectrumPropagationLoss model doesn't implement Friis formula correctly - the whole numerator needs to be squared, rather than just the last term. --- RELEASE_NOTES | 1 + src/spectrum/model/friis-spectrum-propagation-loss.cc | 3 ++- src/spectrum/model/friis-spectrum-propagation-loss.h | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 554bb8b70..c3ca9b996 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -29,6 +29,7 @@ since ns-3.10, in many cases referencing the Bugzilla bug number. - Fixed the UanPhyGen::IsStateBusy method, error with logical OR - CsmaNetDevice ReceiveErrorModel was not dropping the packet + - bug 1064 - Correct Friis propagation loss equation in spectrum module Known issues ------------ diff --git a/src/spectrum/model/friis-spectrum-propagation-loss.cc b/src/spectrum/model/friis-spectrum-propagation-loss.cc index 6b61c53f4..9c4cc5896 100644 --- a/src/spectrum/model/friis-spectrum-propagation-loss.cc +++ b/src/spectrum/model/friis-spectrum-propagation-loss.cc @@ -86,7 +86,8 @@ FriisSpectrumPropagationLossModel::CalculateLoss (double f, double d) const } NS_ASSERT (f > 0); - double loss = ( d * f * f) / ((3e8 * 3e8) / (4 * M_PI)) ; + double loss_sqrt = (4 * M_PI * f * d) / 3e8; + double loss = loss_sqrt * loss_sqrt; if (loss < 1) { diff --git a/src/spectrum/model/friis-spectrum-propagation-loss.h b/src/spectrum/model/friis-spectrum-propagation-loss.h index ca321eb9d..343ecdc64 100644 --- a/src/spectrum/model/friis-spectrum-propagation-loss.h +++ b/src/spectrum/model/friis-spectrum-propagation-loss.h @@ -49,7 +49,7 @@ public: * Return the propagation loss L according to a simplified version of Friis' * formula in which antenna gains are unitary: * - * 4 * pi * d * f^2 + * (4 * pi * d * f) ^ 2 * L = ---------------------- * C^2 *