A Discrete-Event Network Simulator
API
ofdm-ht-validation.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License version 2 as
5  * published by the Free Software Foundation;
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15  *
16  * Authors: Sébastien Deronne <sebastien.deronne@gmail.com>
17  */
18 #include "ns3/core-module.h"
19 #include "ns3/yans-error-rate-model.h"
20 #include "ns3/nist-error-rate-model.h"
21 #include "ns3/gnuplot.h"
22 
23 #include <fstream>
24 #include <vector>
25 #include <cmath>
26 
27 using namespace ns3;
28 
29 int main (int argc, char *argv[])
30 {
31  uint32_t FrameSize = 2000;
32  std::ofstream yansfile ("yans-frame-success-rate-n.plt");
33  std::ofstream nistfile ("nist-frame-success-rate-n.plt");
34  std::vector <std::string> modes;
35 
36  modes.push_back ("OfdmRate6_5MbpsBW20MHz");
37  modes.push_back ("OfdmRate13MbpsBW20MHz");
38  modes.push_back ("OfdmRate19_5MbpsBW20MHz");
39  modes.push_back ("OfdmRate26MbpsBW20MHz");
40  modes.push_back ("OfdmRate39MbpsBW20MHz");
41  modes.push_back ("OfdmRate52MbpsBW20MHz");
42  modes.push_back ("OfdmRate58_5MbpsBW20MHz");
43  modes.push_back ("OfdmRate65MbpsBW20MHz");
44 
45  CommandLine cmd;
46  cmd.AddValue ("FrameSize", "The frame size", FrameSize);
47  cmd.Parse (argc, argv);
48 
49  Gnuplot yansplot = Gnuplot ("yans-frame-success-rate-n.eps");
50  Gnuplot nistplot = Gnuplot ("nist-frame-success-rate-n.eps");
51 
52  Ptr <YansErrorRateModel> yans = CreateObject<YansErrorRateModel> ();
53  Ptr <NistErrorRateModel> nist = CreateObject<NistErrorRateModel> ();
54 
55  for (uint32_t i = 0; i < modes.size (); i++)
56  {
57  std::cout << modes[i] << std::endl;
58  Gnuplot2dDataset yansdataset (modes[i]);
59  Gnuplot2dDataset nistdataset (modes[i]);
60 
61  for (double snr = -5.0; snr <= 30.0; snr += 0.1)
62  {
63  double ps = yans->GetChunkSuccessRate (WifiMode (modes[i]), std::pow (10.0,snr / 10.0), FrameSize * 8);
64  yansdataset.Add (snr, ps);
65  ps = nist->GetChunkSuccessRate (WifiMode (modes[i]), std::pow (10.0,snr / 10.0), FrameSize * 8);
66  nistdataset.Add (snr, ps);
67  }
68 
69  yansplot.AddDataset (yansdataset);
70  nistplot.AddDataset (nistdataset);
71  }
72 
73  yansplot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\"");
74  yansplot.SetLegend ("SNR(dB)", "Frame Success Rate");
75  yansplot.SetExtra ("set xrange [-5:30]\n\
76 set yrange [0:1.2]\n\
77 set style line 1 linewidth 5\n\
78 set style line 2 linewidth 5\n\
79 set style line 3 linewidth 5\n\
80 set style line 4 linewidth 5\n\
81 set style line 5 linewidth 5\n\
82 set style line 6 linewidth 5\n\
83 set style line 7 linewidth 5\n\
84 set style line 8 linewidth 5\n\
85 set style increment user" );
86  yansplot.GenerateOutput (yansfile);
87  yansfile.close ();
88 
89  nistplot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\"");
90  nistplot.SetLegend ("SNR(dB)", "Frame Success Rate");
91  nistplot.SetExtra ("set xrange [-5:30]\n\
92 set yrange [0:1.2]\n\
93 set style line 1 linewidth 5\n\
94 set style line 2 linewidth 5\n\
95 set style line 3 linewidth 5\n\
96 set style line 4 linewidth 5\n\
97 set style line 5 linewidth 5\n\
98 set style line 6 linewidth 5\n\
99 set style line 7 linewidth 5\n\
100 set style line 8 linewidth 5\n\
101 set style increment user" );
102 
103  nistplot.GenerateOutput (nistfile);
104  nistfile.close ();
105 }
106 
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
Class to represent a 2D points plot.
Definition: gnuplot.h:113
void AddDataset(const GnuplotDataset &dataset)
Definition: gnuplot.cc:756
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
Definition: wifi-mode.h:93
a simple class to generate gnuplot-ready plotting commands from a set of datasets.
Definition: gnuplot.h:367
void GenerateOutput(std::ostream &os)
Writes gnuplot commands and data values to a single output stream.
Definition: gnuplot.cc:762
virtual double GetChunkSuccessRate(WifiMode mode, double snr, uint32_t nbits) const
A pure virtual method that must be implemented in the subclass.
Parse command-line arguments.
Definition: command-line.h:201
void SetLegend(const std::string &xLegend, const std::string &yLegend)
Definition: gnuplot.cc:736
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void SetExtra(const std::string &extra)
Definition: gnuplot.cc:743
void AddValue(const std::string &name, const std::string &help, T &value)
Add a program argument, assigning to POD.
Definition: command-line.h:491
void Parse(int argc, char *argv[])
Parse the program arguments.
void SetTerminal(const std::string &terminal)
Definition: gnuplot.cc:724