23 #include "ns3/snr-to-block-error-rate-manager.h" 
   24 #include "ns3/snr-to-block-error-rate-record.h" 
   27 #include "ns3/assert.h" 
   37   for (
int i = 0; i < 7; i++)
 
   48   for (
int i = 0; i < 7; i++)
 
   57   for (
int i = 0; i < 7; i++)
 
   60       for (std::vector<SNRToBlockErrorRateRecord*>::iterator iter = 
m_recordModulation[i]->begin (); iter
 
   82   std::ifstream m_ifTraceFile;
 
   84   double snrValue, bitErrorRate, burstErrorRate, sigma2, I1, I2;
 
   86   for (
int i = 0; i < 7; i++)
 
   91       m_ifTraceFile.open (traceFile, std::ifstream::in);
 
   92       if (m_ifTraceFile.good () == 
false)
 
   94           NS_LOG_INFO (
"Unable to load " << traceFile << 
"!! Loading default traces...");
 
   98       while (m_ifTraceFile.good ())
 
  100           m_ifTraceFile >> snrValue >> bitErrorRate >> burstErrorRate >> sigma2 >> I1 >> I2;
 
  110       m_ifTraceFile.close ();
 
  118   double snrValue, bitErrorRate, burstErrorRate, sigma2, I1, I2;
 
  120   for (
unsigned int j = 0; j < 
sizeof(
modulation0[0]) / 
sizeof(
double); j++)
 
  136   for (
unsigned int j = 0; j < 
sizeof(
modulation1[0]) / 
sizeof(
double); j++)
 
  152   for (
unsigned int j = 0; j < 
sizeof(
modulation2[0]) / 
sizeof(
double); j++)
 
  168   for (
unsigned int j = 0; j < 
sizeof(
modulation3[0]) / 
sizeof(
double); j++)
 
  184   for (
unsigned int j = 0; j < 
sizeof(
modulation4[0]) / 
sizeof(
double); j++)
 
  200   for (
unsigned int j = 0; j < 
sizeof(
modulation5[0]) / 
sizeof(
double); j++)
 
  216   for (
unsigned int j = 0; j < 
sizeof(
modulation6[0]) / 
sizeof(
double); j++)
 
  238   double snrValue, bitErrorRate, burstErrorRate, sigma2, I1, I2;
 
  242   std::ifstream m_ifTraceFile;
 
  244   for (
int i = 0; i < 7; i++)
 
  246       char traceFile[1024];
 
  249       m_ifTraceFile.open (traceFile, std::ifstream::in);
 
  250       if (m_ifTraceFile.good () == 
false)
 
  252           NS_LOG_INFO (
"Unable to load " << traceFile << 
"!!Loading default traces...");
 
  256       while (m_ifTraceFile.good ())
 
  258           m_ifTraceFile >> snrValue >> bitErrorRate >> burstErrorRate >> sigma2 >> I1 >> I2;
 
  269       m_ifTraceFile.close ();
 
  278                  "char * traceFilePath too long");
 
  297   std::vector<SNRToBlockErrorRateRecord *> *record = 0;
 
  301   if (SNR <= (record->at (0)->GetSNRValue ()))
 
  305   if (SNR >= (record->at (record->size () - 1)->GetSNRValue ()))
 
  310   std::vector<SNRToBlockErrorRateRecord*>::const_iterator iter;
 
  312   for (i = 0; i < record->size (); i++)
 
  314       if (SNR < record->at (i)->GetSNRValue ())
 
  319   double intervalSize = (record->at (i)->GetSNRValue () - record->at (i - 1)->GetSNRValue ());
 
  320   double coeff1 = (SNR - record->at (i - 1)->GetSNRValue ()) / intervalSize;
 
  321   double coeff2 = -1 * (SNR - record->at (i)->GetSNRValue ()) / intervalSize;
 
  322   double BlockErrorRate = coeff2 * (record->at (i - 1)->GetBlockErrorRate ()) + coeff1 * (record->at (i)->GetBlockErrorRate ());
 
  323   return BlockErrorRate;
 
  336   std::vector<SNRToBlockErrorRateRecord *> *record = 0;
 
  339   if (SNR <= (record->at (0)->GetSNRValue ()))
 
  342         record->at (0)->Copy ();
 
  344   if (SNR >= (record->at (record->size () - 1)->GetSNRValue ()))
 
  347         record->at (record->size () - 1)->
Copy ();
 
  350   std::vector<SNRToBlockErrorRateRecord*>::const_iterator iter;
 
  352   for (i = 0; i < record->size (); i++)
 
  354       if (SNR < record->at (i)->GetSNRValue ())
 
  359   double intervalSize = (record->at (i)->GetSNRValue ()
 
  360                          - record->at (i - 1)->GetSNRValue ());
 
  361   double coeff1 = (SNR - record->at (i - 1)->GetSNRValue ()) / intervalSize;
 
  362   double coeff2 = -1 * (SNR - record->at (i)->GetSNRValue ()) / intervalSize;
 
  363   double BER = coeff2 * (record->at (i - 1)->GetBitErrorRate ()) + coeff1 * (record->at (i)->GetBitErrorRate ());
 
  364   double BlcER = coeff2 * (record->at (i - 1)->GetBlockErrorRate ()) + coeff1 * (record->at (i)->GetBlockErrorRate ());
 
  365   double sigma2 = coeff2 * (record->at (i - 1)->GetSigma2 ()) + coeff1 * (record->at (i)->GetSigma2 ());
 
  366   double I1 = coeff2 * (record->at (i - 1)->GetI1 ()) + coeff1 * (record->at (i)->GetI1 ());
 
  367   double I2 = coeff2 * (record->at (i - 1)->GetI2 ()) + coeff1 * (record->at (i)->GetI2 ());
 
  370   return SNRToBlockErrorRate;
 
static const double modulation5[6][547]
These represent default traces, providing a number of parameters for each SNR value. 
 
void LoadDefaultTraces(void)
Loads the default traces from default-traces.h file. 
 
static const unsigned int TRACE_FILE_PATH_SIZE
 
static const double modulation2[6][96]
These represent default traces, providing a number of parameters for each SNR value. 
 
std::string GetTraceFilePath(void)
 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
 
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO. 
 
This class represents a record (handled by SnrToBlockErrorRate manager) that keeps a mapping between ...
 
static const double modulation3[6][117]
These represent default traces, providing a number of parameters for each SNR value. 
 
SNRToBlockErrorRateRecord * GetSNRToBlockErrorRateRecord(double SNR, uint8_t modulation)
returns a record of type SNRToBlockErrorRateRecord corresponding to a given modulation and SNR value ...
 
void ActivateLoss(bool loss)
If activate loss is called with false, all the returned BlcER will be 0 (no losses) ...
 
void SetTraceFilePath(char *traceFilePath)
Set the path of the repository containing the traces. 
 
static const double modulation6[6][626]
These represent default traces, providing a number of parameters for each SNR value. 
 
void LoadTraces(void)
Loads the traces form the repository specified in the constructor or setted by SetTraceFilePath funct...
 
double GetBlockErrorRate(double SNR, uint8_t modulation)
returns the Block Error Rate for a given modulation and SNR value 
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
static const double modulation1[6][42]
These represent default traces, providing a number of parameters for each SNR value. 
 
std::vector< SNRToBlockErrorRateRecord * > * m_recordModulation[7]
 
char m_traceFilePath[TRACE_FILE_PATH_SIZE]
 
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
 
static const double modulation0[6][29]
These represent default traces, providing a number of parameters for each SNR value. 
 
~SNRToBlockErrorRateManager(void)
 
SNRToBlockErrorRateManager()
 
Ptr< T > Copy(Ptr< T > object)
Return a deep copy of a Ptr. 
 
void ReLoadTraces(void)
Reloads the trace. 
 
static const double modulation4[6][331]
These represent default traces, providing a number of parameters for each SNR value.