replace distance by a pair of mobility models
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Fri, 26 Oct 2007 13:31:17 +0200
changeset 2031 567dbc2475fc
parent 2030 e32adc825a74
child 2032 dac45a8371f9
replace distance by a pair of mobility models
src/devices/wifi/propagation-delay-model.cc
src/devices/wifi/propagation-delay-model.h
src/devices/wifi/propagation-loss-model.cc
src/devices/wifi/propagation-loss-model.h
src/devices/wifi/wifi-channel.cc
--- 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);
         }