src/devices/wifi/wifi-phy.cc
changeset 2150 e4aff46fe6c5
parent 2139 a2cf93c741c3
child 2155 194dd8bdcf56
--- a/src/devices/wifi/wifi-phy.cc	Tue Nov 20 13:10:30 2007 +0100
+++ b/src/devices/wifi/wifi-phy.cc	Tue Nov 20 16:45:52 2007 +0100
@@ -285,7 +285,7 @@
   case WifiPhy::IDLE:
     if (rxPowerW > m_edThresholdW) 
       {
-        NS_LOG_DEBUG ("sync power="<<rxPowerW<<"W)");
+        NS_LOG_DEBUG ("sync (power="<<rxPowerW<<"W)");
         // sync to signal
         NotifySyncStart (rxDuration);
         SwitchToSync (rxDuration);
@@ -412,12 +412,13 @@
 void
 WifiPhy::PrintModes (void) const
 {
-#ifdef PHY80211_DEBUG
-  for (double db = 0; db < 30; db+= 0.5) {
-    std::cout <<db<<" ";
+#if 0
+  for (double db = -10; db < 30; db+= 0.5) {
+    double snr = DbToRatio (db);
+    std::cout <<snr<<" ";
     for (uint8_t i = 0; i < GetNModes (); i++) {
       WifiMode mode = GetMode (i);
-      double ber = 1-GetChunkSuccessRate (mode, DbToRatio (db), 1);
+      double ber = 1-GetChunkSuccessRate (mode,snr, 2000*8);
       std::cout <<ber<< " ";
     }
     std::cout << std::endl;
@@ -801,6 +802,7 @@
   double EbNo = snr * signalSpread / phyRate;
   double z = sqrt(EbNo);
   double ber = 0.5 * erfc(z);
+  NS_LOG_INFO ("bpsk snr="<<snr<<" ber="<<ber);
   return ber;
 }
 double 
@@ -811,6 +813,7 @@
   double z1 = ((1.0 - 1.0 / sqrt (m)) * erfc (z)) ;
   double z2 = 1 - pow ((1-z1), 2.0);
   double ber = z2 / Log2 (m);
+  NS_LOG_INFO ("Qam m="<<m<<" rate=" << phyRate << " snr="<<snr<<" ber="<<ber);
   return ber;
 }
 uint32_t
@@ -888,16 +891,7 @@
     }
   double pd = CalculatePd (ber, dFree);
   double pmu = adFree * pd;
-  if (pmu > 1.0) 
-    {
-      /**
-       * If pmu is bigger than 1, then, this calculation is
-       * giving us a useless bound. A better bound in this case
-       * is 1 - ber which is necessarily bigger than the real 
-       * success rate.
-       */
-      return ber;
-    }
+  pmu = std::min (pmu, 1.0);
   double pms = pow (1 - pmu, nbits);
   return pms;
 }
@@ -920,17 +914,7 @@
   /* second term */
   pd = CalculatePd (ber, dFree + 1);
   pmu += adFreePlusOne * pd;
-  if (pmu > 1.0) 
-    {
-      /**
-       * If pmu is bigger than 1, then, this calculation is
-       * giving us a useless bound. A better bound in this case
-       * is 1 - ber which is necessarily bigger than the real 
-       * success rate.
-       */
-      return ber;
-    }
-
+  pmu = std::min (pmu, 1.0);
   double pms = pow (1 - pmu, nbits);
   return pms;
 }