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/command-line.h" 27 #include "ns3/string.h" 28 #include "ns3/boolean.h" 29 #include "ns3/double.h" 30 #include "ns3/pointer.h" 31 #include "ns3/gnuplot.h" 32 #include "ns3/simulator.h" 40 static double dround (
double number,
double precision)
45 number = floor (number + 0.5);
49 number = ceil (number - 0.5);
64 plot.AppendExtra (
"set ylabel 'rxPower (dBm)'");
65 plot.AppendExtra (
"set key top right");
67 double txPowerDbm = +20;
76 for (
double distance = 0.0; distance < 2500.0; distance += 10.0)
78 b->SetPosition (Vector (distance, 0.0, 0.0));
81 double rxPowerDbm = model->
CalcRxPower (txPowerDbm, a, b);
83 dataset.
Add (distance, rxPowerDbm);
90 std::ostringstream os;
91 os <<
"txPower " << txPowerDbm <<
"dBm";
94 plot.AddDataset (dataset);
110 plot.AppendExtra (
"set ylabel 'rxPower (dBm)'");
111 plot.AppendExtra (
"set zlabel 'Probability' offset 0,+10");
112 plot.AppendExtra (
"set view 50, 120, 1.0, 1.0");
113 plot.AppendExtra (
"set key top right");
115 plot.AppendExtra (
"set ticslevel 0");
116 plot.AppendExtra (
"set xtics offset -0.5,0");
117 plot.AppendExtra (
"set ytics offset 0,-0.5");
118 plot.AppendExtra (
"set xrange [100:]");
120 double txPowerDbm = +20;
124 dataset.
SetStyle (
"with linespoints");
125 dataset.
SetExtra (
"pointtype 3 pointsize 0.5");
127 typedef std::map<double, unsigned int> rxPowerMapType;
134 for (
double distance = 100.0; distance < 2500.0; distance += 100.0)
136 b->SetPosition (Vector (distance, 0.0, 0.0));
138 rxPowerMapType rxPowerMap;
140 for (
unsigned int samp = 0; samp < samples; ++samp)
143 double rxPowerDbm = model->
CalcRxPower (txPowerDbm, a, b);
144 rxPowerDbm =
dround (rxPowerDbm, 1.0);
146 rxPowerMap[ rxPowerDbm ]++;
152 for (rxPowerMapType::const_iterator i = rxPowerMap.begin ();
153 i != rxPowerMap.end (); ++i)
155 dataset.
Add (distance, i->first, (
double)i->second / (
double)samples);
161 std::ostringstream os;
162 os <<
"txPower " << txPowerDbm <<
"dBm";
165 plot.AddDataset (dataset);
174 double distance = 100.0)
182 plot.AppendExtra (
"set ylabel 'rxPower (dBm)'");
183 plot.AppendExtra (
"set key center right");
185 double txPowerDbm = +20;
193 b->SetPosition (Vector (distance, 0.0, 0.0));
199 double rxPowerDbm = model->
CalcRxPower (txPowerDbm, a, b);
209 std::ostringstream os;
210 os <<
"txPower " << txPowerDbm <<
"dBm";
213 plot.AddDataset (dataset);
220 int main (
int argc,
char *argv[])
223 cmd.Parse (argc, argv);
231 plot.SetTitle (
"ns3::FriisPropagationLossModel (Default Parameters)");
232 gnuplots.AddPlot (plot);
240 plot.
SetTitle (
"ns3::LogDistancePropagationLossModel (Exponent = 2.5)");
241 gnuplots.AddPlot (plot);
250 plot.
SetTitle (
"ns3::RandomPropagationLossModel with Exponential Distribution");
251 gnuplots.AddPlot (plot);
261 plot.
SetTitle (
"ns3::JakesPropagationLossModel (with 477.9 Hz shift and 1 millisec resolution)");
262 gnuplots.AddPlot (plot);
272 plot.
SetTitle (
"ns3::JakesPropagationLossModel (with 477.9 Hz shift and 0.1 millisec resolution)");
273 gnuplots.AddPlot (plot);
280 plot.SetTitle (
"ns3::ThreeLogDistancePropagationLossModel (Defaults)");
281 gnuplots.AddPlot (plot);
292 plot.
SetTitle (
"ns3::ThreeLogDistancePropagationLossModel (Exponents 1.0, 3.0 and 10.0)");
293 gnuplots.AddPlot (plot);
300 plot.SetTitle (
"ns3::NakagamiPropagationLossModel (Default Parameters)");
301 gnuplots.AddPlot (plot);
311 plot.
SetTitle (
"ns3::ThreeLogDistancePropagationLossModel and ns3::NakagamiPropagationLossModel (Default Parameters)");
312 gnuplots.AddPlot (plot);
315 gnuplots.GenerateOutput (std::cout);
void AppendExtra(const std::string &extra)
Simulation virtual time values and global simulation resolution.
double CalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
Returns the Rx Power taking into account all the PropagationLossModel(s) chained to the current one...
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.
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
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.
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)
Parse command-line arguments.
static void Destroy(void)
Execute the events scheduled with ScheduleDestroy().
static Gnuplot TestProbabilistic(Ptr< PropagationLossModel > model, unsigned int samples=100000)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
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.