A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
wifi-ofdm-validation.cc
Go to the documentation of this file.
1
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2010 The Boeing Company
4
*
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License version 2 as
7
* published by the Free Software Foundation;
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
*
18
* Author: Gary Pei <guangyu.pei@boeing.com>
19
*/
20
21
// This example is used to validate Nist, Yans and Table-based error rate models for OFDM rates.
22
//
23
// It outputs plots of the Frame Success Rate versus the Signal-to-noise ratio for
24
// Nist, Yans and Table-based error rate models and for every OFDM mode.
25
26
#include <fstream>
27
#include <cmath>
28
#include "ns3/gnuplot.h"
29
#include "ns3/command-line.h"
30
#include "ns3/yans-error-rate-model.h"
31
#include "ns3/nist-error-rate-model.h"
32
#include "ns3/table-based-error-rate-model.h"
33
#include "ns3/wifi-tx-vector.h"
34
35
using namespace
ns3
;
36
37
int
main (
int
argc,
char
*argv[])
38
{
39
uint32_t FrameSize = 1500;
//bytes
40
std::ofstream yansfile (
"yans-frame-success-rate-ofdm.plt"
);
41
std::ofstream nistfile (
"nist-frame-success-rate-ofdm.plt"
);
42
std::ofstream tablefile (
"table-frame-success-rate-ofdm.plt"
);
43
std::vector <std::string> modes;
44
45
modes.push_back (
"OfdmRate6Mbps"
);
46
modes.push_back (
"OfdmRate9Mbps"
);
47
modes.push_back (
"OfdmRate12Mbps"
);
48
modes.push_back (
"OfdmRate18Mbps"
);
49
modes.push_back (
"OfdmRate24Mbps"
);
50
modes.push_back (
"OfdmRate36Mbps"
);
51
modes.push_back (
"OfdmRate48Mbps"
);
52
modes.push_back (
"OfdmRate54Mbps"
);
53
54
CommandLine
cmd
(__FILE__);
55
cmd
.AddValue (
"FrameSize"
,
"The frame size in bytes"
, FrameSize);
56
cmd
.Parse (argc, argv);
57
58
Gnuplot
yansplot =
Gnuplot
(
"yans-frame-success-rate-ofdm.eps"
);
59
Gnuplot
nistplot =
Gnuplot
(
"nist-frame-success-rate-ofdm.eps"
);
60
Gnuplot
tableplot =
Gnuplot
(
"table-frame-success-rate-ofdm.eps"
);
61
62
Ptr <YansErrorRateModel>
yans = CreateObject<YansErrorRateModel> ();
63
Ptr <NistErrorRateModel>
nist = CreateObject<NistErrorRateModel> ();
64
Ptr <TableBasedErrorRateModel>
table = CreateObject<TableBasedErrorRateModel> ();
65
WifiTxVector
txVector;
66
67
for
(uint32_t i = 0; i < modes.size (); i++)
68
{
69
std::cout << modes[i] << std::endl;
70
Gnuplot2dDataset
yansdataset (modes[i]);
71
Gnuplot2dDataset
nistdataset (modes[i]);
72
Gnuplot2dDataset
tabledataset (modes[i]);
73
txVector.
SetMode
(modes[i]);
74
75
for
(
double
snr = -5.0; snr <= 30.0; snr += 0.1)
76
{
77
double
ps = yans->
GetChunkSuccessRate
(
WifiMode
(modes[i]), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
78
if
(ps < 0.0 || ps > 1.0)
79
{
80
//error
81
exit (1);
82
}
83
yansdataset.Add (snr, ps);
84
85
ps = nist->
GetChunkSuccessRate
(
WifiMode
(modes[i]), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
86
if
(ps < 0.0 || ps > 1.0)
87
{
88
//error
89
exit (1);
90
}
91
nistdataset.Add (snr, ps);
92
93
ps = table->
GetChunkSuccessRate
(
WifiMode
(modes[i]), txVector, std::pow (10.0, snr / 10.0), FrameSize * 8);
94
if
(ps < 0.0 || ps > 1.0)
95
{
96
//error
97
exit (1);
98
}
99
tabledataset.Add (snr, ps);
100
}
101
102
yansplot.
AddDataset
(yansdataset);
103
nistplot.
AddDataset
(nistdataset);
104
tableplot.
AddDataset
(tabledataset);
105
}
106
107
yansplot.
SetTerminal
(
"postscript eps color enh \"Times-BoldItalic\""
);
108
yansplot.
SetLegend
(
"SNR(dB)"
,
"Frame Success Rate"
);
109
yansplot.
SetExtra
(
"set xrange [-5:30]\n\
110
set yrange [0:1.2]\n\
111
set style line 1 linewidth 5\n\
112
set style line 2 linewidth 5\n\
113
set style line 3 linewidth 5\n\
114
set style line 4 linewidth 5\n\
115
set style line 5 linewidth 5\n\
116
set style line 6 linewidth 5\n\
117
set style line 7 linewidth 5\n\
118
set style line 8 linewidth 5\n\
119
set style increment user"
);
120
yansplot.
GenerateOutput
(yansfile);
121
yansfile.close ();
122
123
nistplot.
SetTerminal
(
"postscript eps color enh \"Times-BoldItalic\""
);
124
nistplot.
SetLegend
(
"SNR(dB)"
,
"Frame Success Rate"
);
125
nistplot.
SetExtra
(
"set xrange [-5:30]\n\
126
set yrange [0:1.2]\n\
127
set style line 1 linewidth 5\n\
128
set style line 2 linewidth 5\n\
129
set style line 3 linewidth 5\n\
130
set style line 4 linewidth 5\n\
131
set style line 5 linewidth 5\n\
132
set style line 6 linewidth 5\n\
133
set style line 7 linewidth 5\n\
134
set style line 8 linewidth 5\n\
135
set style increment user"
);
136
137
nistplot.
GenerateOutput
(nistfile);
138
nistfile.close ();
139
140
tableplot.
SetTerminal
(
"postscript eps color enh \"Times-BoldItalic\""
);
141
tableplot.
SetLegend
(
"SNR(dB)"
,
"Frame Success Rate"
);
142
tableplot.
SetExtra
(
"set xrange [-5:30]\n\
143
set yrange [0:1.2]\n\
144
set style line 1 linewidth 5\n\
145
set style line 2 linewidth 5\n\
146
set style line 3 linewidth 5\n\
147
set style line 4 linewidth 5\n\
148
set style line 5 linewidth 5\n\
149
set style line 6 linewidth 5\n\
150
set style line 7 linewidth 5\n\
151
set style line 8 linewidth 5\n\
152
set style increment user"
);
153
154
tableplot.
GenerateOutput
(tablefile);
155
tablefile.close ();
156
}
ns3::CommandLine
Parse command-line arguments.
Definition:
command-line.h:228
ns3::Gnuplot::SetLegend
void SetLegend(const std::string &xLegend, const std::string &yLegend)
Definition:
gnuplot.cc:736
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns3::Gnuplot
a simple class to generate gnuplot-ready plotting commands from a set of datasets.
Definition:
gnuplot.h:372
ns3::Gnuplot::SetTerminal
void SetTerminal(const std::string &terminal)
Definition:
gnuplot.cc:724
ns3::WifiTxVector::SetMode
void SetMode(WifiMode mode)
Sets the selected payload transmission mode.
Definition:
wifi-tx-vector.cc:226
ns3::WifiTxVector
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
Definition:
wifi-tx-vector.h:71
ns3::Gnuplot::GenerateOutput
void GenerateOutput(std::ostream &os)
Writes gnuplot commands and data values to a single output stream.
Definition:
gnuplot.cc:762
ns3::Gnuplot::SetExtra
void SetExtra(const std::string &extra)
Definition:
gnuplot.cc:743
ns3::Gnuplot2dDataset
Class to represent a 2D points plot.
Definition:
gnuplot.h:118
ns3::ErrorRateModel::GetChunkSuccessRate
double GetChunkSuccessRate(WifiMode mode, const WifiTxVector &txVector, double snr, uint64_t nbits, uint8_t numRxAntennas=1, WifiPpduField field=WIFI_PPDU_FIELD_DATA, uint16_t staId=SU_STA_ID) const
This method returns the probability that the given 'chunk' of the packet will be successfully receive...
Definition:
error-rate-model.cc:63
ns3::Ptr
Smart pointer class similar to boost::intrusive_ptr.
Definition:
ptr.h:74
ns3::WifiMode
represent a single transmission mode
Definition:
wifi-mode.h:48
second.cmd
cmd
Definition:
second.py:35
ns3::Gnuplot::AddDataset
void AddDataset(const GnuplotDataset &dataset)
Definition:
gnuplot.cc:756
examples
wireless
wifi-ofdm-validation.cc
Generated on Fri Oct 1 2021 17:02:53 for ns-3 by
1.8.20