--- a/src/devices/wifi/propagation-delay-model.cc Fri Oct 26 13:14:29 2007 +0200
+++ b/src/devices/wifi/propagation-delay-model.cc Fri Oct 26 13:31:17 2007 +0200
@@ -2,6 +2,7 @@
#include "ns3/random-variable.h"
#include "ns3/default-value.h"
#include "ns3/random-variable-default-value.h"
+#include "ns3/mobility-model.h"
namespace ns3 {
@@ -60,7 +61,7 @@
delete m_variable;
}
Time
-RandomPropagationDelayModel::GetDelay (double distance) const
+RandomPropagationDelayModel::GetDelay (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const
{
return Seconds (m_variable->GetValue ());
}
@@ -69,8 +70,9 @@
: m_speed (speed)
{}
Time
-ConstantSpeedPropagationDelayModel::GetDelay (double distance) const
+ConstantSpeedPropagationDelayModel::GetDelay (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const
{
+ double distance = a->GetDistanceFrom (b);
double seconds = distance / m_speed;
return Seconds (seconds);
}
--- a/src/devices/wifi/propagation-delay-model.h Fri Oct 26 13:14:29 2007 +0200
+++ b/src/devices/wifi/propagation-delay-model.h Fri Oct 26 13:31:17 2007 +0200
@@ -7,13 +7,15 @@
namespace ns3 {
+class MobilityModel;
+
class RandomVariable;
class PropagationDelayModel : public Object
{
public:
virtual ~PropagationDelayModel ();
- virtual Time GetDelay (double distance) const = 0;
+ virtual Time GetDelay (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const = 0;
static Ptr<PropagationDelayModel> CreateDefault (void);
};
@@ -23,7 +25,7 @@
RandomPropagationDelayModel ();
RandomPropagationDelayModel (const RandomVariable &variable);
virtual ~RandomPropagationDelayModel ();
- virtual Time GetDelay (double distance) const;
+ virtual Time GetDelay (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
private:
RandomVariable *m_variable;
};
@@ -32,7 +34,7 @@
{
public:
ConstantSpeedPropagationDelayModel (double speed);
- virtual Time GetDelay (double distance) const;
+ virtual Time GetDelay (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
void SetSpeed (double speed);
double GetSpeed (void) const;
private:
--- a/src/devices/wifi/propagation-loss-model.cc Fri Oct 26 13:14:29 2007 +0200
+++ b/src/devices/wifi/propagation-loss-model.cc Fri Oct 26 13:31:17 2007 +0200
@@ -2,6 +2,8 @@
#include "ns3/default-value.h"
#include "ns3/random-variable-default-value.h"
#include "ns3/log.h"
+#include "ns3/mobility-model.h"
+#include "ns3/static-mobility-model.h"
#include <math.h>
NS_LOG_COMPONENT_DEFINE ("PropagationLossModel");
@@ -88,7 +90,8 @@
double
RandomPropagationLossModel::GetRxPower (double txPowerDbm,
- double distance) const
+ Ptr<MobilityModel> a,
+ Ptr<MobilityModel> b) const
{
double rxPower = txPowerDbm - m_variable->GetValue ();
NS_LOG_DEBUG ("tx power="<<txPowerDbm<<"dbm, rx power="<<rxPower<<"Dbm");
@@ -142,7 +145,8 @@
double
FriisPropagationLossModel::GetRxPower (double txPowerDbm,
- double distance) const
+ Ptr<MobilityModel> a,
+ Ptr<MobilityModel> b) const
{
/*
* Friis free space equation:
@@ -174,6 +178,7 @@
* L: system loss
* lambda: wavelength (m)
*/
+ double distance = a->GetDistanceFrom (b);
double numerator = m_lambda * m_lambda;
double denominator = 16 * PI * PI * distance * distance * m_systemLoss;
double pr = log (numerator / denominator) * 10 / log (10);
@@ -231,8 +236,10 @@
double
PathLossPropagationLossModel::GetRxPower (double txPowerDbm,
- double distance) const
+ Ptr<MobilityModel> a,
+ Ptr<MobilityModel> b) const
{
+ double distance = a->GetDistanceFrom (b);
if (distance <= 1.0)
{
return txPowerDbm;
@@ -251,7 +258,9 @@
*
* rx = rx0 + 10 / ln (10) * (n * ln (d/d0) - ln (1000))
*/
- double rx0 = m_reference->GetRxPower (txPowerDbm, 1.0);
+ static Ptr<StaticMobilityModel> zero = Create<StaticMobilityModel> (Position (0.0, 0.0, 0.0));
+ static Ptr<StaticMobilityModel> one = Create<StaticMobilityModel> (Position (1.0, 1.0, 1.0));
+ double rx0 = m_reference->GetRxPower (txPowerDbm, zero, one);
double rxPowerDbm = rx0 + 10 / log (10) * (m_exponent * log (distance) - log (1000));
NS_LOG_DEBUG ("distance="<<distance<<"m, tx power="<<txPowerDbm<<"dbm, "<<
"reference rx power="<<rx0<<"dbm, "<<
@@ -260,5 +269,4 @@
}
-
} // namespace ns3
--- a/src/devices/wifi/propagation-loss-model.h Fri Oct 26 13:14:29 2007 +0200
+++ b/src/devices/wifi/propagation-loss-model.h Fri Oct 26 13:31:17 2007 +0200
@@ -5,6 +5,8 @@
namespace ns3 {
+class MobilityModel;
+
class RandomVariable;
class PropagationLossModel : public Object
@@ -13,7 +15,8 @@
virtual ~PropagationLossModel ();
// returns the rx power in dbms
virtual double GetRxPower (double txPowerDbm,
- double distance) const = 0;
+ Ptr<MobilityModel> a,
+ Ptr<MobilityModel> b) const = 0;
static Ptr<PropagationLossModel> CreateDefault (void);
};
@@ -26,7 +29,8 @@
virtual ~RandomPropagationLossModel ();
virtual double GetRxPower (double txPowerDbm,
- double distance) const;
+ Ptr<MobilityModel> a,
+ Ptr<MobilityModel> b) const;
private:
RandomVariable *m_variable;
};
@@ -42,7 +46,8 @@
double GetSystemLoss (void) const;
virtual double GetRxPower (double txPowerDbm,
- double distance) const;
+ Ptr<MobilityModel> a,
+ Ptr<MobilityModel> b) const;
private:
double DbmToW (double dbm) const;
double DbmFromW (double w) const;
@@ -63,7 +68,8 @@
void SetReferenceModel (Ptr<PropagationLossModel> model);
virtual double GetRxPower (double txPowerDbm,
- double distance) const;
+ Ptr<MobilityModel> a,
+ Ptr<MobilityModel> b) const;
private:
double DbToW (double db) const;
static Ptr<PropagationLossModel> CreateDefaultReference (void);
--- a/src/devices/wifi/wifi-channel.cc Fri Oct 26 13:14:29 2007 +0200
+++ b/src/devices/wifi/wifi-channel.cc Fri Oct 26 13:31:17 2007 +0200
@@ -67,11 +67,10 @@
if (sender != i->first)
{
Ptr<MobilityModel> receiverMobility = i->first->GetNode ()->QueryInterface<MobilityModel> (MobilityModel::iid);
- double distance = senderMobility->GetDistanceFrom (receiverMobility);
- Time delay = m_delay->GetDelay (distance);
- double rxPowerDbm = m_loss->GetRxPower (txPowerDbm, distance);
+ Time delay = m_delay->GetDelay (senderMobility, receiverMobility);
+ double rxPowerDbm = m_loss->GetRxPower (txPowerDbm, senderMobility, receiverMobility);
NS_LOG_DEBUG ("propagation: txPower="<<txPowerDbm<<"dbm, rxPower="<<rxPowerDbm<<"dbm, "<<
- "distance="<<distance<<"m, delay="<<delay);
+ "distance="<<senderMobility->GetDistanceFrom (receiverMobility)<<"m, delay="<<delay);
Simulator::Schedule (delay, &WifiChannel::Receive, this,
j, packet, rxPowerDbm, wifiMode, preamble);
}