21 #include "ns3/propagation-loss-model.h"
22 #include "ns3/jakes-propagation-loss-model.h"
23 #include "ns3/constant-position-mobility-model.h"
25 #include "ns3/config.h"
26 #include "ns3/string.h"
27 #include "ns3/boolean.h"
28 #include "ns3/double.h"
29 #include "ns3/pointer.h"
30 #include "ns3/gnuplot.h"
31 #include "ns3/simulator.h"
39 static double dround (
double number,
double precision)
44 number = floor (number + 0.5);
48 number = ceil (number - 0.5);
63 plot.AppendExtra (
"set ylabel 'rxPower (dBm)'");
64 plot.AppendExtra (
"set key top right");
66 double txPowerDbm = +20;
75 for (
double distance = 0.0; distance < 2500.0; distance += 10.0)
77 b->SetPosition (Vector (distance, 0.0, 0.0));
80 double rxPowerDbm = model->
CalcRxPower (txPowerDbm, a, b);
82 dataset.
Add (distance, rxPowerDbm);
89 std::ostringstream os;
90 os <<
"txPower " << txPowerDbm <<
"dBm";
93 plot.AddDataset (dataset);
109 plot.AppendExtra (
"set ylabel 'rxPower (dBm)'");
110 plot.AppendExtra (
"set zlabel 'Probability' offset 0,+10");
111 plot.AppendExtra (
"set view 50, 120, 1.0, 1.0");
112 plot.AppendExtra (
"set key top right");
114 plot.AppendExtra (
"set ticslevel 0");
115 plot.AppendExtra (
"set xtics offset -0.5,0");
116 plot.AppendExtra (
"set ytics offset 0,-0.5");
117 plot.AppendExtra (
"set xrange [100:]");
119 double txPowerDbm = +20;
123 dataset.
SetStyle (
"with linespoints");
124 dataset.
SetExtra (
"pointtype 3 pointsize 0.5");
126 typedef std::map<double, unsigned int> rxPowerMapType;
133 for (
double distance = 100.0; distance < 2500.0; distance += 100.0)
135 b->SetPosition (Vector (distance, 0.0, 0.0));
137 rxPowerMapType rxPowerMap;
139 for (
unsigned int samp = 0; samp < samples; ++samp)
142 double rxPowerDbm = model->
CalcRxPower (txPowerDbm, a, b);
143 rxPowerDbm =
dround (rxPowerDbm, 1.0);
145 rxPowerMap[ rxPowerDbm ]++;
151 for (rxPowerMapType::const_iterator i = rxPowerMap.begin ();
152 i != rxPowerMap.end (); ++i)
154 dataset.
Add (distance, i->first, (
double)i->second / (
double)samples);
160 std::ostringstream os;
161 os <<
"txPower " << txPowerDbm <<
"dBm";
164 plot.AddDataset (dataset);
173 double distance = 100.0)
181 plot.AppendExtra (
"set ylabel 'rxPower (dBm)'");
182 plot.AppendExtra (
"set key center right");
184 double txPowerDbm = +20;
192 b->SetPosition (Vector (distance, 0.0, 0.0));
198 double rxPowerDbm = model->
CalcRxPower (txPowerDbm, a, b);
208 std::ostringstream os;
209 os <<
"txPower " << txPowerDbm <<
"dBm";
212 plot.AddDataset (dataset);
219 int main (
int argc,
char *argv[])
227 plot.SetTitle (
"ns3::FriisPropagationLossModel (Default Parameters)");
228 gnuplots.AddPlot (plot);
236 plot.
SetTitle (
"ns3::LogDistancePropagationLossModel (Exponent = 2.5)");
237 gnuplots.AddPlot (plot);
246 plot.
SetTitle (
"ns3::RandomPropagationLossModel with Exponential Distribution");
247 gnuplots.AddPlot (plot);
257 plot.
SetTitle (
"ns3::JakesPropagationLossModel (with 477.9 Hz shift and 1 millisec resolution)");
258 gnuplots.AddPlot (plot);
268 plot.
SetTitle (
"ns3::JakesPropagationLossModel (with 477.9 Hz shift and 0.1 millisec resolution)");
269 gnuplots.AddPlot (plot);
276 plot.SetTitle (
"ns3::ThreeLogDistancePropagationLossModel (Defaults)");
277 gnuplots.AddPlot (plot);
288 plot.
SetTitle (
"ns3::ThreeLogDistancePropagationLossModel (Exponents 1.0, 3.0 and 10.0)");
289 gnuplots.AddPlot (plot);
296 plot.SetTitle (
"ns3::NakagamiPropagationLossModel (Default Parameters)");
297 gnuplots.AddPlot (plot);
307 plot.
SetTitle (
"ns3::ThreeLogDistancePropagationLossModel and ns3::NakagamiPropagationLossModel (Default Parameters)");
308 gnuplots.AddPlot (plot);
311 gnuplots.GenerateOutput (std::cout);
void AppendExtra(const std::string &extra)
Simulation virtual time values and global simulation resolution.
Class to represent a 3D points plot.
Class to represent a 2D points plot.
void SetNext(Ptr< PropagationLossModel > next)
Enables a chain of loss models to act on the signal.
void SetTitle(const std::string &title)
Change line title.
void Add(double x, double y, double z)
static void Run(void)
Run the simulation.
static double dround(double number, double precision)
Round a double number to the given precision.
void SetExtra(const std::string &extra)
Add extra formatting parameters to this dataset.
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
a simple class to generate gnuplot-ready plotting commands from a set of datasets.
a simple class to group together multiple gnuplots into one file, e.g.
void SetTitle(const std::string &title)
void AddEmptyLine()
Add an empty line in the data output sequence.
static Gnuplot TestDeterministicByTime(Ptr< PropagationLossModel > model, Time timeStep=Seconds(0.001), Time timeTotal=Seconds(1.0), double distance=100.0)
void Add(double x, double y)
double CalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
Returns the Rx Power taking into account all the PropagatinLossModel(s) chained to the current one...
static void Destroy(void)
Execute the events scheduled with ScheduleDestroy().
static Gnuplot TestProbabilistic(Ptr< PropagationLossModel > model, unsigned int samples=100000)
Hold objects of type Ptr<T>.
void SetStyle(enum Style style)
static Time Now(void)
Return the current simulation virtual time.
void SetPosition(const Vector &position)
void SetStyle(const std::string &style)
static Gnuplot TestDeterministic(Ptr< PropagationLossModel > model)
static void Stop(void)
Tell the Simulator the calling event should be the last one executed.
Time Seconds(double value)
Construct a Time in the indicated unit.
void SetDefault(std::string name, const AttributeValue &value)
Class to represent a 2D function expression plot.
This class can be used to hold variables of floating point type such as 'double' or 'float'...
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.