src/devices/wifi/nist-error-rate-model.cc
changeset 6360 d8975477ff6a
parent 6358 5205e0dde26a
child 6597 7fbc895f7361
equal deleted inserted replaced
6359:9860e12062b7 6360:d8975477ff6a
   188   return pms;
   188   return pms;
   189 }
   189 }
   190 double 
   190 double 
   191 NistErrorRateModel::GetChunkSuccessRate (WifiMode mode, double snr, uint32_t nbits) const
   191 NistErrorRateModel::GetChunkSuccessRate (WifiMode mode, double snr, uint32_t nbits) const
   192 {
   192 {
   193   if (mode == WifiPhy::Get6mba () || mode == WifiPhy::Get3mb10Mhz () || mode == WifiPhy::Get1_5mb5Mhz ())
   193   if (mode.GetModulationClass () == WIFI_MOD_CLASS_OFDM)
   194     {
   194     {
   195       return GetFecBpskBer (snr, 
   195       if (mode.GetConstellationSize () == 2)
   196                             nbits,
   196         {
   197                             1 // b value
   197           if (mode.GetCodeRate () == WIFI_CODE_RATE_1_2)
   198                             );
   198             {
   199     }
   199               return GetFecBpskBer (snr,
   200   else if (mode == WifiPhy::Get9mba () || mode == WifiPhy::Get4_5mb10Mhz () || mode == WifiPhy::Get2_25mb5Mhz ())
   200                                     nbits,
   201     {
   201                                     1 // b value
   202       return GetFecBpskBer (snr, 
   202                                     );
   203                             nbits,
   203             }
   204                             3 // b value
   204           else
   205                             );
   205             {
   206     }
   206               return GetFecBpskBer (snr,
   207   else if (mode == WifiPhy::Get12mba () || mode == WifiPhy::Get6mb10Mhz () || mode == WifiPhy::Get3mb5Mhz ())
   207                                     nbits,
   208     {
   208                                     3 // b value
   209       return GetFecQpskBer (snr, 
   209                                     );
   210                             nbits,
   210             }
   211                             1 // b value
   211         }
   212                             );
   212       else if (mode.GetConstellationSize () == 4)
   213     }
   213         {
   214   else if (mode == WifiPhy::Get18mba () || mode == WifiPhy::Get9mb10Mhz () || mode == WifiPhy::Get4_5mb5Mhz ())
   214           if (mode.GetCodeRate () == WIFI_CODE_RATE_1_2)
   215     {
   215             {
   216       return GetFecQpskBer (snr, 
   216               return GetFecQpskBer (snr,
   217                             nbits,
   217                                     nbits,
   218                             3 // b value
   218                                     1 // b value
   219                             );
   219                                     );
   220     }
   220             }
   221   else if (mode == WifiPhy::Get24mba () || mode == WifiPhy::Get12mb10Mhz () || mode == WifiPhy::Get6mb5Mhz ())
   221           else
   222     {
   222             {
   223       return GetFec16QamBer (snr, 
   223               return GetFecQpskBer (snr,
   224                              nbits,
   224                                     nbits,
   225                              1 // b value
   225                                     3 // b value
   226                              );
   226                                     );
   227     }
   227             }
   228   else if (mode == WifiPhy::Get36mba () || mode == WifiPhy::Get18mb10Mhz () || mode == WifiPhy::Get9mb5Mhz ())
   228         }
   229     {
   229       else if (mode.GetConstellationSize () == 16)
   230       return GetFec16QamBer (snr, 
   230         {
   231                              nbits,
   231           if (mode.GetCodeRate () == WIFI_CODE_RATE_1_2)
   232                              3 // b value
   232             {
   233                              );
   233               return GetFec16QamBer (snr,
   234     }
   234                                      nbits,
   235   else if (mode == WifiPhy::Get48mba () || mode == WifiPhy::Get24mb10Mhz () || mode == WifiPhy::Get12mb5Mhz ())
   235                                      1 // b value
   236     {
   236                                      );
   237       return GetFec64QamBer (snr, 
   237             }
   238                              nbits,
   238           else
   239                              2 // b value
   239             {
   240                              );
   240               return GetFec16QamBer (snr,
   241     }
   241                                      nbits,
   242   else if (mode == WifiPhy::Get54mba () || mode == WifiPhy::Get27mb10Mhz () || mode == WifiPhy::Get13_5mb5Mhz ())
   242                                      3 // b value
   243     {
   243                                      );
   244       return GetFec64QamBer (snr, 
   244             }
   245                              nbits,
   245         }
   246                              3 // b value
   246       else if (mode.GetConstellationSize () == 64)
   247                              );
   247         {
   248     }
   248           if (mode.GetCodeRate () == WIFI_CODE_RATE_2_3)
   249   else if (mode == WifiPhy::Get1mbb ())
   249             {
   250     {
   250               return GetFec64QamBer (snr,
   251       return DsssErrorRateModel::GetDsssDbpskSuccessRate (snr,nbits);
   251                                      nbits,
   252     }
   252                                      2 // b value
   253   else if (mode == WifiPhy::Get2mbb ())
   253                                      );
   254     {
   254             }
   255       return DsssErrorRateModel::GetDsssDqpskSuccessRate (snr,nbits);
   255           else
   256     }
   256             {
   257   else if (mode == WifiPhy::Get5_5mbb ())
   257               return GetFec64QamBer (snr,
   258     {
   258                                      nbits,
   259       return DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (snr,nbits);
   259                                      3 // b value
   260     }
   260                                      );
   261   else if (mode == WifiPhy::Get11mbb ())
   261             }
   262     {
   262         }
   263       return DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (snr,nbits);
   263     }
       
   264   else if (mode.GetModulationClass () == WIFI_MOD_CLASS_DSSS)
       
   265     {
       
   266       switch (mode.GetDataRate ())
       
   267         {
       
   268         case 1000000:
       
   269           return DsssErrorRateModel::GetDsssDbpskSuccessRate (snr, nbits);
       
   270         case 2000000:
       
   271           return DsssErrorRateModel::GetDsssDqpskSuccessRate (snr, nbits);
       
   272         case 5500000:
       
   273           return DsssErrorRateModel::GetDsssDqpskCck5_5SuccessRate (snr, nbits);
       
   274         case 11000000:
       
   275           return DsssErrorRateModel::GetDsssDqpskCck11SuccessRate (snr, nbits);
       
   276         }
   264     }
   277     }
   265   return 0;
   278   return 0;
   266 }
   279 }
   267 
   280 
   268 } // namespace ns3
   281 } // namespace ns3