examples, internet, prop, spect, uan: Cache math functions and frequently used variables

This commit is contained in:
Eduardo Almeida
2023-09-13 18:53:39 +01:00
parent d3ea4d2da0
commit a4b43cb532
12 changed files with 226 additions and 240 deletions

View File

@@ -35,7 +35,7 @@ using namespace ns3;
int
main(int argc, char* argv[])
{
uint32_t FrameSize = 1500; // bytes
uint32_t frameSizeBytes = 1500;
std::ofstream file("frame-success-rate-dsss.plt");
const std::vector<std::string> modes{
@@ -46,7 +46,7 @@ main(int argc, char* argv[])
};
CommandLine cmd(__FILE__);
cmd.AddValue("FrameSize", "The frame size in bytes", FrameSize);
cmd.AddValue("FrameSize", "The frame size in bytes", frameSizeBytes);
cmd.Parse(argc, argv);
Gnuplot plot = Gnuplot("frame-success-rate-dsss.eps");
@@ -56,27 +56,27 @@ main(int argc, char* argv[])
Ptr<TableBasedErrorRateModel> table = CreateObject<TableBasedErrorRateModel>();
WifiTxVector txVector;
for (uint32_t i = 0; i < modes.size(); i++)
{
std::cout << modes[i] << std::endl;
Gnuplot2dDataset dataset(modes[i]);
txVector.SetMode(modes[i]);
uint32_t frameSizeBits = frameSizeBytes * 8;
for (double snr = -10.0; snr <= 20.0; snr += 0.1)
for (const auto& mode : modes)
{
std::cout << mode << std::endl;
Gnuplot2dDataset dataset(mode);
txVector.SetMode(mode);
WifiMode wifiMode(mode);
for (double snrDb = -10.0; snrDb <= 20.0; snrDb += 0.1)
{
double psYans = yans->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
double snr = std::pow(10.0, snrDb / 10.0);
double psYans = yans->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (psYans < 0.0 || psYans > 1.0)
{
// error
exit(1);
}
double psNist = nist->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
double psNist = nist->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (psNist < 0.0 || psNist > 1.0)
{
std::cout << psNist << std::endl;
@@ -87,10 +87,7 @@ main(int argc, char* argv[])
{
exit(1);
}
double psTable = table->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
double psTable = table->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (psTable < 0.0 || psTable > 1.0)
{
std::cout << psTable << std::endl;
@@ -101,7 +98,7 @@ main(int argc, char* argv[])
{
exit(1);
}
dataset.Add(snr, psYans);
dataset.Add(snrDb, psYans);
}
plot.AddDataset(dataset);

View File

@@ -86,66 +86,61 @@ main(int argc, char* argv[])
mode << format << "Mcs" << +endMcs;
modes.push_back(mode.str());
for (uint32_t i = 0; i < modes.size(); i++)
for (const auto& mode : modes)
{
std::cout << modes[i] << std::endl;
Gnuplot2dDataset yansdataset(modes[i]);
Gnuplot2dDataset nistdataset(modes[i]);
Gnuplot2dDataset tabledataset(modes[i]);
txVector.SetMode(modes[i]);
std::cout << mode << std::endl;
Gnuplot2dDataset yansdataset(mode);
Gnuplot2dDataset nistdataset(mode);
Gnuplot2dDataset tabledataset(mode);
txVector.SetMode(mode);
for (double snr = -5.0; snr <= (endMcs * 5); snr += 0.1)
WifiMode wifiMode(mode);
for (double snrDb = -5.0; snrDb <= (endMcs * 5); snrDb += 0.1)
{
double ps = yans->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
size);
double snr = std::pow(10.0, snrDb / 10.0);
double ps = yans->GetChunkSuccessRate(wifiMode, txVector, snr, size);
if (ps < 0 || ps > 1)
{
// error
exit(1);
}
yansdataset.Add(snr, 1 - ps);
ps = nist->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
size);
yansdataset.Add(snrDb, 1 - ps);
ps = nist->GetChunkSuccessRate(wifiMode, txVector, snr, size);
if (ps < 0 || ps > 1)
{
// error
exit(1);
}
nistdataset.Add(snr, 1 - ps);
ps = table->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
size);
nistdataset.Add(snrDb, 1 - ps);
ps = table->GetChunkSuccessRate(wifiMode, txVector, snr, size);
if (ps < 0 || ps > 1)
{
// error
exit(1);
}
tabledataset.Add(snr, 1 - ps);
tabledataset.Add(snrDb, 1 - ps);
}
if (tableErrorModelEnabled)
{
std::stringstream ss;
ss << "Table-" << modes[i];
ss << "Table-" << mode;
tabledataset.SetTitle(ss.str());
plot.AddDataset(tabledataset);
}
if (yansErrorModelEnabled)
{
std::stringstream ss;
ss << "Yans-" << modes[i];
ss << "Yans-" << mode;
yansdataset.SetTitle(ss.str());
plot.AddDataset(yansdataset);
}
if (nistErrorModelEnabled)
{
std::stringstream ss;
ss << "Nist-" << modes[i];
ss << "Nist-" << mode;
nistdataset.SetTitle(ss.str());
plot.AddDataset(nistdataset);
}

View File

@@ -37,7 +37,7 @@ using namespace ns3;
int
main(int argc, char* argv[])
{
uint32_t FrameSize = 1500; // bytes
uint32_t frameSizeBytes = 1500;
std::ofstream yansfile("yans-frame-success-rate-be.plt");
std::ofstream nistfile("nist-frame-success-rate-be.plt");
std::ofstream tablefile("table-frame-success-rate-be.plt");
@@ -60,7 +60,7 @@ main(int argc, char* argv[])
};
CommandLine cmd(__FILE__);
cmd.AddValue("FrameSize", "The frame size", FrameSize);
cmd.AddValue("FrameSize", "The frame size", frameSizeBytes);
cmd.Parse(argc, argv);
Gnuplot yansplot = Gnuplot("yans-frame-success-rate-be.eps");
@@ -72,48 +72,45 @@ main(int argc, char* argv[])
Ptr<TableBasedErrorRateModel> table = CreateObject<TableBasedErrorRateModel>();
WifiTxVector txVector;
for (uint32_t i = 0; i < modes.size(); i++)
uint32_t frameSizeBits = frameSizeBytes * 8;
for (const auto& mode : modes)
{
std::cout << modes[i] << std::endl;
Gnuplot2dDataset yansdataset(modes[i]);
Gnuplot2dDataset nistdataset(modes[i]);
Gnuplot2dDataset tabledataset(modes[i]);
txVector.SetMode(modes[i]);
std::cout << mode << std::endl;
Gnuplot2dDataset yansdataset(mode);
Gnuplot2dDataset nistdataset(mode);
Gnuplot2dDataset tabledataset(mode);
txVector.SetMode(mode);
for (double snr = -5.0; snr <= 55.0; snr += 0.1)
WifiMode wifiMode(mode);
for (double snrDb = -5.0; snrDb <= 55.0; snrDb += 0.1)
{
double ps = yans->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
yansdataset.Add(snr, ps);
double snr = std::pow(10.0, snrDb / 10.0);
ps = nist->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
double ps = yans->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
nistdataset.Add(snr, ps);
yansdataset.Add(snrDb, ps);
ps = table->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
ps = nist->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
tabledataset.Add(snr, ps);
nistdataset.Add(snrDb, ps);
ps = table->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
tabledataset.Add(snrDb, ps);
}
yansplot.AddDataset(yansdataset);

View File

@@ -35,7 +35,7 @@ using namespace ns3;
int
main(int argc, char* argv[])
{
uint32_t FrameSize = 1500; // bytes
uint32_t frameSizeBytes = 1500;
std::ofstream yansfile("yans-frame-success-rate-ax.plt");
std::ofstream nistfile("nist-frame-success-rate-ax.plt");
std::ofstream tablefile("table-frame-success-rate-ax.plt");
@@ -56,7 +56,7 @@ main(int argc, char* argv[])
};
CommandLine cmd(__FILE__);
cmd.AddValue("FrameSize", "The frame size", FrameSize);
cmd.AddValue("FrameSize", "The frame size", frameSizeBytes);
cmd.Parse(argc, argv);
Gnuplot yansplot = Gnuplot("yans-frame-success-rate-ax.eps");
@@ -68,48 +68,45 @@ main(int argc, char* argv[])
Ptr<TableBasedErrorRateModel> table = CreateObject<TableBasedErrorRateModel>();
WifiTxVector txVector;
for (uint32_t i = 0; i < modes.size(); i++)
uint32_t frameSizeBits = frameSizeBytes * 8;
for (const auto& mode : modes)
{
std::cout << modes[i] << std::endl;
Gnuplot2dDataset yansdataset(modes[i]);
Gnuplot2dDataset nistdataset(modes[i]);
Gnuplot2dDataset tabledataset(modes[i]);
txVector.SetMode(modes[i]);
std::cout << mode << std::endl;
Gnuplot2dDataset yansdataset(mode);
Gnuplot2dDataset nistdataset(mode);
Gnuplot2dDataset tabledataset(mode);
txVector.SetMode(mode);
for (double snr = -5.0; snr <= 40.0; snr += 0.1)
WifiMode wifiMode(mode);
for (double snrDb = -5.0; snrDb <= 40.0; snrDb += 0.1)
{
double ps = yans->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
yansdataset.Add(snr, ps);
double snr = std::pow(10.0, snrDb / 10.0);
ps = nist->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
double ps = yans->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
nistdataset.Add(snr, ps);
yansdataset.Add(snrDb, ps);
ps = table->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
ps = nist->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
tabledataset.Add(snr, ps);
nistdataset.Add(snrDb, ps);
ps = table->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
tabledataset.Add(snrDb, ps);
}
yansplot.AddDataset(yansdataset);

View File

@@ -35,7 +35,7 @@ using namespace ns3;
int
main(int argc, char* argv[])
{
uint32_t FrameSize = 1500; // bytes
uint32_t frameSizeBytes = 1500;
std::ofstream yansfile("yans-frame-success-rate-n.plt");
std::ofstream nistfile("nist-frame-success-rate-n.plt");
std::ofstream tablefile("table-frame-success-rate-n.plt");
@@ -52,7 +52,7 @@ main(int argc, char* argv[])
};
CommandLine cmd(__FILE__);
cmd.AddValue("FrameSize", "The frame size in bytes", FrameSize);
cmd.AddValue("FrameSize", "The frame size in bytes", frameSizeBytes);
cmd.Parse(argc, argv);
Gnuplot yansplot = Gnuplot("yans-frame-success-rate-n.eps");
@@ -64,48 +64,45 @@ main(int argc, char* argv[])
Ptr<NistErrorRateModel> nist = CreateObject<NistErrorRateModel>();
Ptr<TableBasedErrorRateModel> table = CreateObject<TableBasedErrorRateModel>();
for (uint32_t i = 0; i < modes.size(); i++)
uint32_t frameSizeBits = frameSizeBytes * 8;
for (const auto& mode : modes)
{
std::cout << modes[i] << std::endl;
Gnuplot2dDataset yansdataset(modes[i]);
Gnuplot2dDataset nistdataset(modes[i]);
Gnuplot2dDataset tabledataset(modes[i]);
txVector.SetMode(modes[i]);
std::cout << mode << std::endl;
Gnuplot2dDataset yansdataset(mode);
Gnuplot2dDataset nistdataset(mode);
Gnuplot2dDataset tabledataset(mode);
txVector.SetMode(mode);
for (double snr = -5.0; snr <= 30.0; snr += 0.1)
WifiMode wifiMode(mode);
for (double snrDb = -5.0; snrDb <= 30.0; snrDb += 0.1)
{
double ps = yans->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
yansdataset.Add(snr, ps);
double snr = std::pow(10.0, snrDb / 10.0);
ps = nist->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
double ps = yans->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
nistdataset.Add(snr, ps);
yansdataset.Add(snrDb, ps);
ps = table->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
ps = nist->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
tabledataset.Add(snr, ps);
nistdataset.Add(snrDb, ps);
ps = table->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
tabledataset.Add(snrDb, ps);
}
yansplot.AddDataset(yansdataset);

View File

@@ -37,7 +37,7 @@ using namespace ns3;
int
main(int argc, char* argv[])
{
uint32_t FrameSize = 1500; // bytes
uint32_t frameSizeBytes = 1500;
std::ofstream yansfile("yans-frame-success-rate-ofdm.plt");
std::ofstream nistfile("nist-frame-success-rate-ofdm.plt");
std::ofstream tablefile("table-frame-success-rate-ofdm.plt");
@@ -54,7 +54,7 @@ main(int argc, char* argv[])
};
CommandLine cmd(__FILE__);
cmd.AddValue("FrameSize", "The frame size in bytes", FrameSize);
cmd.AddValue("FrameSize", "The frame size in bytes", frameSizeBytes);
cmd.Parse(argc, argv);
Gnuplot yansplot = Gnuplot("yans-frame-success-rate-ofdm.eps");
@@ -66,48 +66,45 @@ main(int argc, char* argv[])
Ptr<TableBasedErrorRateModel> table = CreateObject<TableBasedErrorRateModel>();
WifiTxVector txVector;
for (uint32_t i = 0; i < modes.size(); i++)
uint32_t frameSizeBits = frameSizeBytes * 8;
for (const auto& mode : modes)
{
std::cout << modes[i] << std::endl;
Gnuplot2dDataset yansdataset(modes[i]);
Gnuplot2dDataset nistdataset(modes[i]);
Gnuplot2dDataset tabledataset(modes[i]);
txVector.SetMode(modes[i]);
std::cout << mode << std::endl;
Gnuplot2dDataset yansdataset(mode);
Gnuplot2dDataset nistdataset(mode);
Gnuplot2dDataset tabledataset(mode);
txVector.SetMode(mode);
for (double snr = -5.0; snr <= 30.0; snr += 0.1)
WifiMode wifiMode(mode);
for (double snrDb = -5.0; snrDb <= 30.0; snrDb += 0.1)
{
double ps = yans->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
yansdataset.Add(snr, ps);
double snr = std::pow(10.0, snrDb / 10.0);
ps = nist->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
double ps = yans->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
nistdataset.Add(snr, ps);
yansdataset.Add(snrDb, ps);
ps = table->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
ps = nist->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
tabledataset.Add(snr, ps);
nistdataset.Add(snrDb, ps);
ps = table->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
tabledataset.Add(snrDb, ps);
}
yansplot.AddDataset(yansdataset);

View File

@@ -36,7 +36,7 @@ using namespace ns3;
int
main(int argc, char* argv[])
{
uint32_t FrameSize = 1500; // bytes
uint32_t frameSizeBytes = 1500;
std::ofstream yansfile("yans-frame-success-rate-ac.plt");
std::ofstream nistfile("nist-frame-success-rate-ac.plt");
std::ofstream tablefile("table-frame-success-rate-ac.plt");
@@ -54,7 +54,7 @@ main(int argc, char* argv[])
};
CommandLine cmd(__FILE__);
cmd.AddValue("FrameSize", "The frame size in bytes", FrameSize);
cmd.AddValue("FrameSize", "The frame size in bytes", frameSizeBytes);
cmd.Parse(argc, argv);
Gnuplot yansplot = Gnuplot("yans-frame-success-rate-ac.eps");
@@ -66,48 +66,45 @@ main(int argc, char* argv[])
Ptr<TableBasedErrorRateModel> table = CreateObject<TableBasedErrorRateModel>();
WifiTxVector txVector;
for (uint32_t i = 0; i < modes.size(); i++)
uint32_t frameSizeBits = frameSizeBytes * 8;
for (const auto& mode : modes)
{
std::cout << modes[i] << std::endl;
Gnuplot2dDataset yansdataset(modes[i]);
Gnuplot2dDataset nistdataset(modes[i]);
Gnuplot2dDataset tabledataset(modes[i]);
txVector.SetMode(modes[i]);
std::cout << mode << std::endl;
Gnuplot2dDataset yansdataset(mode);
Gnuplot2dDataset nistdataset(mode);
Gnuplot2dDataset tabledataset(mode);
txVector.SetMode(mode);
for (double snr = -5.0; snr <= 30.0; snr += 0.1)
WifiMode wifiMode(mode);
for (double snrDb = -5.0; snrDb <= 30.0; snrDb += 0.1)
{
double ps = yans->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
yansdataset.Add(snr, ps);
double snr = std::pow(10.0, snrDb / 10.0);
ps = nist->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
double ps = yans->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
nistdataset.Add(snr, ps);
yansdataset.Add(snrDb, ps);
ps = table->GetChunkSuccessRate(WifiMode(modes[i]),
txVector,
std::pow(10.0, snr / 10.0),
FrameSize * 8);
ps = nist->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
tabledataset.Add(snr, ps);
nistdataset.Add(snrDb, ps);
ps = table->GetChunkSuccessRate(wifiMode, txVector, snr, frameSizeBits);
if (ps < 0.0 || ps > 1.0)
{
// error
exit(1);
}
tabledataset.Add(snrDb, ps);
}
yansplot.AddDataset(yansdataset);