src/wifi/model/interference-helper.cc
changeset 7143 0146b1916bc0
parent 7141 072fb225b714
child 7385 10beb0e53130
--- a/src/wifi/model/interference-helper.cc	Sat May 07 22:05:29 2011 +0200
+++ b/src/wifi/model/interference-helper.cc	Mon May 09 22:03:43 2011 +0200
@@ -189,211 +189,6 @@
   return end > now ? end - now : MicroSeconds (0);
 }
 
-WifiMode
-InterferenceHelper::GetPlcpHeaderMode (WifiMode payloadMode, WifiPreamble preamble)
-{
-  switch (payloadMode.GetModulationClass ())
-    {
-    case WIFI_MOD_CLASS_OFDM:
-      {
-        switch (payloadMode.GetBandwidth ())
-          {
-          case 5000000:
-            return WifiPhy::GetOfdmRate1_5MbpsBW5MHz ();
-          case 10000000:
-            return WifiPhy::GetOfdmRate3MbpsBW10MHz ();
-          default:
-            // IEEE Std 802.11-2007, 17.3.2
-            // actually this is only the first part of the PlcpHeader,
-            // because the last 16 bits of the PlcpHeader are using the
-            // same mode of the payload
-            return WifiPhy::GetOfdmRate6Mbps ();
-          }
-      }
-
-    case WIFI_MOD_CLASS_ERP_OFDM:
-      return WifiPhy::GetErpOfdmRate6Mbps ();
-
-    case WIFI_MOD_CLASS_DSSS:
-      if (preamble == WIFI_PREAMBLE_LONG)
-        {
-          // IEEE Std 802.11-2007, sections 15.2.3 and 18.2.2.1
-          return WifiPhy::GetDsssRate1Mbps ();
-        }
-      else  //  WIFI_PREAMBLE_SHORT
-        {
-          // IEEE Std 802.11-2007, section 18.2.2.2
-          return WifiPhy::GetDsssRate2Mbps ();
-        }
-
-    default:
-      NS_FATAL_ERROR ("unsupported modulation class");
-      return WifiMode ();
-    }
-}
-
-uint32_t
-InterferenceHelper::GetPlcpHeaderDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble)
-{
-  switch (payloadMode.GetModulationClass ())
-    {
-    case WIFI_MOD_CLASS_OFDM:
-      {
-        switch (payloadMode.GetBandwidth ())
-          {
-          case 20000000:
-          default:
-            // IEEE Std 802.11-2007, section 17.3.3 and figure 17-4
-            // also section 17.3.2.3, table 17-4
-            // We return the duration of the SIGNAL field only, since the
-            // SERVICE field (which strictly speaking belongs to the PLCP
-            // header, see section 17.3.2 and figure 17-1) is sent using the
-            // payload mode.
-            return 4;
-          case 10000000:
-            // IEEE Std 802.11-2007, section 17.3.2.3, table 17-4
-            return 8;
-          case 5000000:
-            // IEEE Std 802.11-2007, section 17.3.2.3, table 17-4
-            return 16;
-          }
-      }
-
-    case WIFI_MOD_CLASS_ERP_OFDM:
-      return 16;
-
-    case WIFI_MOD_CLASS_DSSS:
-      if (preamble == WIFI_PREAMBLE_SHORT)
-        {
-          // IEEE Std 802.11-2007, section 18.2.2.2 and figure 18-2
-          return 24;
-        }
-      else // WIFI_PREAMBLE_LONG
-        {
-          // IEEE Std 802.11-2007, sections 18.2.2.1 and figure 18-1
-          return 48;
-        }
-
-    default:
-      NS_FATAL_ERROR ("unsupported modulation class");
-      return 0;
-    }
-}
-
-uint32_t
-InterferenceHelper::GetPlcpPreambleDurationMicroSeconds (WifiMode payloadMode, WifiPreamble preamble)
-{
-  switch (payloadMode.GetModulationClass ())
-    {
-    case WIFI_MOD_CLASS_OFDM:
-      {
-        switch (payloadMode.GetBandwidth ())
-          {
-          case 20000000:
-          default:
-            // IEEE Std 802.11-2007, section 17.3.3,  figure 17-4
-            // also section 17.3.2.3, table 17-4
-            return 16;
-          case 10000000:
-            // IEEE Std 802.11-2007, section 17.3.3, table 17-4
-            // also section 17.3.2.3, table 17-4
-            return 32;
-          case 5000000:
-            // IEEE Std 802.11-2007, section 17.3.3
-            // also section 17.3.2.3, table 17-4
-            return 64;
-          }
-      }
-
-    case WIFI_MOD_CLASS_ERP_OFDM:
-      return 4;
-
-    case WIFI_MOD_CLASS_DSSS:
-      if (preamble == WIFI_PREAMBLE_SHORT)
-        {
-          // IEEE Std 802.11-2007, section 18.2.2.2 and figure 18-2
-          return 72;
-        }
-      else // WIFI_PREAMBLE_LONG
-        {
-          // IEEE Std 802.11-2007, sections 18.2.2.1 and figure 18-1
-          return 144;
-        }
-
-    default:
-      NS_FATAL_ERROR ("unsupported modulation class");
-      return 0;
-    }
-}
-
-uint32_t
-InterferenceHelper::GetPayloadDurationMicroSeconds (uint32_t size, WifiMode payloadMode)
-{
-  NS_LOG_FUNCTION (size << payloadMode);
-
-  switch (payloadMode.GetModulationClass ())
-    {
-    case WIFI_MOD_CLASS_OFDM:
-    case WIFI_MOD_CLASS_ERP_OFDM:
-      {
-        // IEEE Std 802.11-2007, section 17.3.2.3, table 17-4
-        // corresponds to T_{SYM} in the table
-        uint32_t symbolDurationUs;
-
-        switch (payloadMode.GetBandwidth ())
-          {
-          case 20000000:
-          default:
-            symbolDurationUs = 4;
-            break;
-          case 10000000:
-            symbolDurationUs = 8;
-            break;
-          case 5000000:
-            symbolDurationUs = 16;
-            break;
-          }
-
-        // IEEE Std 802.11-2007, section 17.3.2.2, table 17-3
-        // corresponds to N_{DBPS} in the table
-        double numDataBitsPerSymbol = payloadMode.GetDataRate ()  * symbolDurationUs / 1e6;
-
-        // IEEE Std 802.11-2007, section 17.3.5.3, equation (17-11)
-        uint32_t numSymbols = lrint (ceil ((16 + size * 8.0 + 6.0) / numDataBitsPerSymbol));
-
-        // Add signal extension for ERP PHY
-        if (payloadMode.GetModulationClass () == WIFI_MOD_CLASS_ERP_OFDM)
-          {
-            return numSymbols * symbolDurationUs + 6;
-          }
-        else
-          {
-            return numSymbols * symbolDurationUs;
-          }
-      }
-
-    case WIFI_MOD_CLASS_DSSS:
-      // IEEE Std 802.11-2007, section 18.2.3.5
-      NS_LOG_LOGIC (" size=" << size
-                             << " mode=" << payloadMode
-                             << " rate=" << payloadMode.GetDataRate () );
-      return lrint (ceil ((size * 8.0) / (payloadMode.GetDataRate () / 1.0e6)));
-
-    default:
-      NS_FATAL_ERROR ("unsupported modulation class");
-      return 0;
-    }
-}
-
-Time
-InterferenceHelper::CalculateTxDuration (uint32_t size, WifiMode payloadMode, WifiPreamble preamble)
-{
-  uint32_t duration = GetPlcpPreambleDurationMicroSeconds (payloadMode, preamble)
-    + GetPlcpHeaderDurationMicroSeconds (payloadMode, preamble)
-    + GetPayloadDurationMicroSeconds (size, payloadMode);
-  return MicroSeconds (duration);
-}
-
 void
 InterferenceHelper::AppendEvent (Ptr<InterferenceHelper::Event> event)
 {
@@ -470,9 +265,9 @@
   Time previous = (*j).GetTime ();
   WifiMode payloadMode = event->GetPayloadMode ();
   WifiPreamble preamble = event->GetPreambleType ();
-  WifiMode headerMode = GetPlcpHeaderMode (payloadMode, preamble);
-  Time plcpHeaderStart = (*j).GetTime () + MicroSeconds (GetPlcpPreambleDurationMicroSeconds (payloadMode, preamble));
-  Time plcpPayloadStart = plcpHeaderStart + MicroSeconds (GetPlcpHeaderDurationMicroSeconds (payloadMode, preamble));
+  WifiMode headerMode = WifiPhy::GetPlcpHeaderMode (payloadMode, preamble);
+  Time plcpHeaderStart = (*j).GetTime () + MicroSeconds (WifiPhy::GetPlcpPreambleDurationMicroSeconds (payloadMode, preamble));
+  Time plcpPayloadStart = plcpHeaderStart + MicroSeconds (WifiPhy::GetPlcpHeaderDurationMicroSeconds (payloadMode, preamble));
   double noiseInterferenceW = (*j).GetDelta ();
   double powerW = event->GetRxPowerW ();