REM helper deactivates PHYs instead of removing, and exit when done by default
authorNicola Baldo <nbaldo@cttc.es>
Tue, 24 Jan 2012 13:38:59 +0100
changeset 8578 50484f99be63
parent 8577 48bd78934632
child 8579 1ecef525784c
REM helper deactivates PHYs instead of removing, and exit when done by default
src/lte/examples/lena-rem-sector-antenna.cc
src/lte/examples/lena-rem.cc
src/lte/helper/radio-environment-map-helper.cc
src/lte/helper/radio-environment-map-helper.h
src/lte/model/rem-spectrum-phy.cc
src/lte/model/rem-spectrum-phy.h
--- a/src/lte/examples/lena-rem-sector-antenna.cc	Tue Jan 24 13:36:25 2012 +0100
+++ b/src/lte/examples/lena-rem-sector-antenna.cc	Tue Jan 24 13:38:59 2012 +0100
@@ -215,17 +215,19 @@
     }
 
   Simulator::Stop (Seconds (simTime));
-  lteHelper->EnableTraces ();
+
+  // better to leave traces disabled
+  //lteHelper->EnableTraces ();
 
   Ptr<RadioEnvironmentMapHelper> remHelper = CreateObject<RadioEnvironmentMapHelper> ();
   remHelper->SetAttribute ("ChannelPath", StringValue ("/ChannelList/0"));
   remHelper->SetAttribute ("OutputFile", StringValue ("rem.out"));
   remHelper->SetAttribute ("XMin", DoubleValue (-200.0));
   remHelper->SetAttribute ("XMax", DoubleValue (1200.0));
-  remHelper->SetAttribute ("XRes", UintegerValue (100));
+  remHelper->SetAttribute ("XRes", UintegerValue (400));
   remHelper->SetAttribute ("YMin", DoubleValue (-300.0));
   remHelper->SetAttribute ("YMax", DoubleValue (+3500.0));
-  remHelper->SetAttribute ("YRes", UintegerValue (100));
+  remHelper->SetAttribute ("YRes", UintegerValue (300));
   remHelper->SetAttribute ("Z", DoubleValue (1.5));
   remHelper->Install ();
   // Recall the buildings helper to place the REM nodes in its position
--- a/src/lte/examples/lena-rem.cc	Tue Jan 24 13:36:25 2012 +0100
+++ b/src/lte/examples/lena-rem.cc	Tue Jan 24 13:38:59 2012 +0100
@@ -90,10 +90,10 @@
   remHelper->SetAttribute ("OutputFile", StringValue ("rem.out"));
   remHelper->SetAttribute ("XMin", DoubleValue (-400.0));
   remHelper->SetAttribute ("XMax", DoubleValue (400.0));
-  remHelper->SetAttribute ("XRes", UintegerValue (100));
+  remHelper->SetAttribute ("XRes", UintegerValue (40));
   remHelper->SetAttribute ("YMin", DoubleValue (-300.0));
   remHelper->SetAttribute ("YMax", DoubleValue (300.0));
-  remHelper->SetAttribute ("YRes", UintegerValue (75));
+  remHelper->SetAttribute ("YRes", UintegerValue (30));
   remHelper->SetAttribute ("Z", DoubleValue (0.0));
   remHelper->Install ();
 
--- a/src/lte/helper/radio-environment-map-helper.cc	Tue Jan 24 13:36:25 2012 +0100
+++ b/src/lte/helper/radio-environment-map-helper.cc	Tue Jan 24 13:38:59 2012 +0100
@@ -26,6 +26,7 @@
 #include <ns3/double.h>
 #include <ns3/uinteger.h>
 #include <ns3/string.h>
+#include <ns3/boolean.h>
 #include <ns3/spectrum-channel.h>
 #include <ns3/config.h>
 #include <ns3/rem-spectrum-phy.h>
@@ -104,6 +105,10 @@
 		   DoubleValue (0.0),
                    MakeDoubleAccessor (&RadioEnvironmentMapHelper::m_z),
                    MakeDoubleChecker<double> ())
+    .AddAttribute ("ExitWhenDone", "If true, Simulator::Stop () will be called as soon as the REM has been generated",
+		   BooleanValue (true),
+                   MakeBooleanAccessor (&RadioEnvironmentMapHelper::m_exitWhenDone),
+                   MakeBooleanChecker ())
 
   ;
   return tid;
@@ -147,7 +152,7 @@
         }      
     }
   Simulator::Schedule (Seconds (0.0055), &RadioEnvironmentMapHelper::Connect, this);
-  Simulator::Schedule (Seconds (0.0065), &RadioEnvironmentMapHelper::PrintAndDisconnect, this);  
+  Simulator::Schedule (Seconds (0.0065), &RadioEnvironmentMapHelper::PrintAndDeactivate, this);  
 
 }
 
@@ -170,7 +175,7 @@
 }
 
 void 
-RadioEnvironmentMapHelper::PrintAndDisconnect ()
+RadioEnvironmentMapHelper::PrintAndDeactivate ()
 {
   NS_LOG_FUNCTION (this);
   std::ofstream outFile;
@@ -195,10 +200,16 @@
                   << pos.z << "\t" 
                   << it2->phy->GetSinr ()
                   << std::endl;
-          m_channel->RemoveRx (it2->phy);
+          it2->phy->Deactivate ();
         }
     }
   outFile.close ();
+  if (m_exitWhenDone)
+    {
+      Simulator::Stop ();
+      Simulator::Destroy ();
+      exit (0);
+    }
 }
 
 
--- a/src/lte/helper/radio-environment-map-helper.h	Tue Jan 24 13:36:25 2012 +0100
+++ b/src/lte/helper/radio-environment-map-helper.h	Tue Jan 24 13:38:59 2012 +0100
@@ -56,7 +56,7 @@
 private:
 
   void Connect ();
-  void PrintAndDisconnect ();
+  void PrintAndDeactivate ();
 
 
   struct RemPoint 
@@ -81,6 +81,8 @@
 
   std::string m_channelPath;
   std::string m_outputFile;
+
+  bool m_exitWhenDone;
   
   Ptr<SpectrumChannel> m_channel;
 };
--- a/src/lte/model/rem-spectrum-phy.cc	Tue Jan 24 13:36:25 2012 +0100
+++ b/src/lte/model/rem-spectrum-phy.cc	Tue Jan 24 13:38:59 2012 +0100
@@ -39,7 +39,8 @@
     m_netDevice (0),
     m_channel (0),
     m_referenceSignalPower (0),
-    m_sumPower (0)
+    m_sumPower (0),
+    m_active (true)
 {
   NS_LOG_FUNCTION (this);
 }
@@ -139,13 +140,16 @@
 RemSpectrumPhy::StartRx (Ptr<SpectrumSignalParameters> params)
 {
   NS_LOG_FUNCTION ( this << params);
-  double power = Integral (*(params->psd));
-  NS_ASSERT_MSG (params->duration.GetMilliSeconds () == 1, 
-                 "RemSpectrumPhy works only for LTE signals with duration of 1 ms");
-  m_sumPower += power;
-  if (power > m_referenceSignalPower)
-    {
-      m_referenceSignalPower = power;
+  if (m_active)
+    {      
+      double power = Integral (*(params->psd));
+      NS_ASSERT_MSG (params->duration.GetMilliSeconds () == 1, 
+                     "RemSpectrumPhy works only for LTE signals with duration of 1 ms");
+      m_sumPower += power;
+      if (power > m_referenceSignalPower)
+        {
+          m_referenceSignalPower = power;
+        }
     }
 }
 
@@ -155,5 +159,11 @@
   return m_referenceSignalPower / (m_sumPower + m_noisePower);
 }
 
+void
+RemSpectrumPhy::Deactivate ()
+{
+  m_active = false;
+}
+
 
 } // namespace ns3
--- a/src/lte/model/rem-spectrum-phy.h	Tue Jan 24 13:36:25 2012 +0100
+++ b/src/lte/model/rem-spectrum-phy.h	Tue Jan 24 13:38:59 2012 +0100
@@ -67,6 +67,11 @@
   Ptr<AntennaModel> GetRxAntenna ();
   void StartRx (Ptr<SpectrumSignalParameters> params);
 
+
+  /** 
+   * set the SpectrumModel to be used for reception
+   * 
+   */
   void SetRxSpectrumModel (Ptr<SpectrumModel>); 
   
   /** 
@@ -76,6 +81,12 @@
    */
   double GetSinr ();
 
+  /** 
+   * make StartRx a no-op from now on
+   * 
+   */
+  void Deactivate ();
+
 protected:
   void DoDispose ();
 
@@ -89,6 +100,8 @@
   double m_sumPower;
   double m_noisePower;  
 
+  bool m_active;
+
 };