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;
void LoadDefaultTraces(void)
Loads the default traces from default-traces.h file.
NS_LOG_COMPONENT_DEFINE("SNRToBlockErrorRateManager")
static const unsigned int TRACE_FILE_PATH_SIZE
std::string GetTraceFilePath(void)
double modulation5[6][547]
double modulation1[6][42]
This class represents a record (handled by SnrToBlockErrorRate manager) that keeps a mapping between ...
SNRToBlockErrorRateRecord * GetSNRToBlockErrorRateRecord(double SNR, uint8_t modulation)
returns a record of type SNRToBlockErrorRateRecord corresponding to a given modulation and SNR value ...
double modulation0[6][29]
this file represents default traces providing for each SNR value (1): the bit error rate BER (2)...
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.
double modulation6[6][626]
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
std::vector< SNRToBlockErrorRateRecord * > * m_recordModulation[7]
char m_traceFilePath[TRACE_FILE_PATH_SIZE]
#define NS_ASSERT_MSG(condition, message)
~SNRToBlockErrorRateManager(void)
SNRToBlockErrorRateManager()
double modulation4[6][115]
double modulation3[6][117]
double modulation2[6][96]
Ptr< T > Copy(Ptr< T > object)
void ReLoadTraces(void)
Reloads the trace.