23 #include "ns3/snr-to-block-error-rate-manager.h"
24 #include "ns3/snr-to-block-error-rate-record.h"
36 for (
int i = 0; i < 7; i++)
47 for (
int i = 0; i < 7; i++)
56 for (
int i = 0; i < 7; i++)
59 for (std::vector<SNRToBlockErrorRateRecord*>::iterator iter =
m_recordModulation[i]->begin (); iter
81 std::ifstream m_ifTraceFile;
83 double snrValue, bitErrorRate, burstErrorRate, sigma2, I1, I2;
85 for (
int i = 0; i < 7; i++)
90 m_ifTraceFile.open (traceFile, std::ifstream::in);
91 if (m_ifTraceFile.good () ==
false)
93 NS_LOG_INFO (
"Unable to load " << traceFile <<
"!! Loading default traces...");
97 while (m_ifTraceFile.good ())
99 m_ifTraceFile >> snrValue >> bitErrorRate >> burstErrorRate >> sigma2 >> I1 >> I2;
109 m_ifTraceFile.close ();
117 double snrValue, bitErrorRate, burstErrorRate, sigma2, I1, I2;
119 for (
unsigned int j = 0; j <
sizeof(
modulation0[0]) /
sizeof(
double); j++)
135 for (
unsigned int j = 0; j <
sizeof(
modulation1[0]) /
sizeof(
double); j++)
151 for (
unsigned int j = 0; j <
sizeof(
modulation2[0]) /
sizeof(
double); j++)
167 for (
unsigned int j = 0; j <
sizeof(
modulation3[0]) /
sizeof(
double); j++)
183 for (
unsigned int j = 0; j <
sizeof(
modulation4[0]) /
sizeof(
double); j++)
199 for (
unsigned int j = 0; j <
sizeof(
modulation5[0]) /
sizeof(
double); j++)
215 for (
unsigned int j = 0; j <
sizeof(
modulation6[0]) /
sizeof(
double); j++)
237 double snrValue, bitErrorRate, burstErrorRate, sigma2, I1, I2;
241 std::ifstream m_ifTraceFile;
243 for (
int i = 0; i < 7; i++)
245 char traceFile[1024];
248 m_ifTraceFile.open (traceFile, std::ifstream::in);
249 if (m_ifTraceFile.good () ==
false)
251 NS_LOG_INFO (
"Unable to load " << traceFile <<
"!!Loading default traces...");
255 while (m_ifTraceFile.good ())
257 m_ifTraceFile >> snrValue >> bitErrorRate >> burstErrorRate >> sigma2 >> I1 >> I2;
268 m_ifTraceFile.close ();
294 std::vector<SNRToBlockErrorRateRecord *> *record = 0;
298 if (SNR <= (record->at (0)->GetSNRValue ()))
302 if (SNR >= (record->at (record->size () - 1)->GetSNRValue ()))
307 std::vector<SNRToBlockErrorRateRecord*>::const_iterator iter;
309 for (i = 0; i < record->size (); i++)
311 if (SNR < record->at (i)->GetSNRValue ())
316 double intervalSize = (record->at (i)->GetSNRValue () - record->at (i - 1)->GetSNRValue ());
317 double coeff1 = (SNR - record->at (i - 1)->GetSNRValue ()) / intervalSize;
318 double coeff2 = -1 * (SNR - record->at (i)->GetSNRValue ()) / intervalSize;
319 double BlockErrorRate = coeff2 * (record->at (i - 1)->GetBlockErrorRate ()) + coeff1 * (record->at (i)->GetBlockErrorRate ());
320 return BlockErrorRate;
333 std::vector<SNRToBlockErrorRateRecord *> *record = 0;
336 if (SNR <= (record->at (0)->GetSNRValue ()))
339 record->at (0)->Copy ();
341 if (SNR >= (record->at (record->size () - 1)->GetSNRValue ()))
344 record->at (record->size () - 1)->
Copy ();
347 std::vector<SNRToBlockErrorRateRecord*>::const_iterator iter;
349 for (i = 0; i < record->size (); i++)
351 if (SNR < record->at (i)->GetSNRValue ())
356 double intervalSize = (record->at (i)->GetSNRValue ()
357 - record->at (i - 1)->GetSNRValue ());
358 double coeff1 = (SNR - record->at (i - 1)->GetSNRValue ()) / intervalSize;
359 double coeff2 = -1 * (SNR - record->at (i)->GetSNRValue ()) / intervalSize;
360 double BER = coeff2 * (record->at (i - 1)->GetBitErrorRate ()) + coeff1 * (record->at (i)->GetBitErrorRate ());
361 double BlcER = coeff2 * (record->at (i - 1)->GetBlockErrorRate ()) + coeff1 * (record->at (i)->GetBlockErrorRate ());
362 double sigma2 = coeff2 * (record->at (i - 1)->GetSigma2 ()) + coeff1 * (record->at (i)->GetSigma2 ());
363 double I1 = coeff2 * (record->at (i - 1)->GetI1 ()) + coeff1 * (record->at (i)->GetI1 ());
364 double I2 = coeff2 * (record->at (i - 1)->GetI2 ()) + coeff1 * (record->at (i)->GetI2 ());
367 return SNRToBlockErrorRate;