29 #include "ns3/config.h"
30 #include "ns3/gnuplot.h"
31 #include "ns3/boolean.h"
32 #include "ns3/string.h"
33 #include "ns3/double.h"
34 #include "ns3/integer.h"
35 #include "ns3/uinteger.h"
36 #include "ns3/command-line.h"
37 #include "ns3/node-list.h"
38 #include "ns3/yans-wifi-helper.h"
40 #include "ns3/wifi-mac-header.h"
41 #include "ns3/queue-size.h"
42 #include "ns3/propagation-loss-model.h"
43 #include "ns3/propagation-delay-model.h"
44 #include "ns3/rng-seed-manager.h"
45 #include "ns3/mobility-helper.h"
46 #include "ns3/wifi-net-device.h"
47 #include "ns3/packet-socket-helper.h"
48 #include "ns3/packet-socket-client.h"
49 #include "ns3/packet-socket-server.h"
50 #include "ns3/application-container.h"
51 #include "ns3/ampdu-subframe-header.h"
52 #include "ns3/wifi-mac.h"
54 #define PI 3.1415926535
93 {5, 0.8418}, {10, 0.7831}, {15, 0.7460}, {20, 0.7186}, {25, 0.6973}, {30, 0.6802}, {35, 0.6639}, {40, 0.6501}, {45, 0.6386}, {50, 0.6285},
96 {5, 1.6170}, {10, 1.5075}, {15, 1.4371}, {20, 1.3849}, {25, 1.3442}, {30, 1.3115}, {35, 1.2803}, {40, 1.2538}, {45, 1.2317}, {50, 1.2124},
99 {5, 3.8565}, {10, 3.6170}, {15, 3.4554}, {20, 3.3339}, {25, 3.2385}, {30, 3.1613}, {35, 3.0878}, {40, 3.0249}, {45, 2.9725}, {50, 2.9266},
102 {5, 6.3821}, {10, 6.0269}, {15, 5.7718}, {20, 5.5765}, {25, 5.4217}, {30, 5.2958}, {35, 5.1755}, {40, 5.0722}, {45, 4.9860}, {50, 4.9103},
106 {5, 4.6899}, {10, 4.3197}, {15, 4.1107}, {20, 3.9589}, {25, 3.8478}, {30, 3.7490}, {35, 3.6618}, {40, 3.5927}, {45, 3.5358}, {50, 3.4711},
109 {5, 6.8188}, {10, 6.2885}, {15, 5.9874}, {20, 5.7680}, {25, 5.6073}, {30, 5.4642}, {35, 5.3378}, {40, 5.2376}, {45, 5.1551}, {50, 5.0612},
112 {5, 8.8972}, {10, 8.2154}, {15, 7.8259}, {20, 7.5415}, {25, 7.3329}, {30, 7.1469}, {35, 6.9825}, {40, 6.8521}, {45, 6.7447}, {50, 6.6225},
115 {5, 12.6719}, {10, 11.7273}, {15, 11.1814}, {20, 10.7810}, {25, 10.4866}, {30, 10.2237}, {35, 9.9910}, {40, 9.8061}, {45, 9.6538}, {50, 9.4804},
118 {5, 16.0836}, {10, 14.9153}, {15, 14.2327}, {20, 13.7300}, {25, 13.3595}, {30, 13.0281}, {35, 12.7343}, {40, 12.5008}, {45, 12.3083}, {50, 12.0889},
121 {5, 22.0092}, {10, 20.4836}, {15, 19.5743}, {20, 18.8997}, {25, 18.4002}, {30, 17.9524}, {35, 17.5545}, {40, 17.2377}, {45, 16.9760}, {50, 16.6777},
124 {5, 26.8382}, {10, 25.0509}, {15, 23.9672}, {20, 23.1581}, {25, 22.5568}, {30, 22.0165}, {35, 21.5355}, {40, 21.1519}, {45, 20.8348}, {50, 20.4729},
127 {5, 29.2861}, {10, 27.3763}, {15, 26.2078}, {20, 25.3325}, {25, 24.6808}, {30, 24.0944}, {35, 23.5719}, {40, 23.1549}, {45, 22.8100}, {50, 22.4162},
130 {
"ErpOfdmRate6Mbps", {
131 {5, 4.6899}, {10, 4.3197}, {15, 4.1107}, {20, 3.9589}, {25, 3.8478}, {30, 3.7490}, {35, 3.6618}, {40, 3.5927}, {45, 3.5358}, {50, 3.4711},
133 {
"ErpOfdmRate9Mbps", {
134 {5, 6.8188}, {10, 6.2885}, {15, 5.9874}, {20, 5.7680}, {25, 5.6073}, {30, 5.4642}, {35, 5.3378}, {40, 5.2376}, {45, 5.1551}, {50, 5.0612},
136 {
"ErpOfdmRate12Mbps", {
137 {5, 8.8972}, {10, 8.2154}, {15, 7.8259}, {20, 7.5415}, {25, 7.3329}, {30, 7.1469}, {35, 6.9825}, {40, 6.8521}, {45, 6.7447}, {50, 6.6225},
139 {
"ErpOfdmRate18Mbps", {
140 {5, 12.6719}, {10, 11.7273}, {15, 11.1814}, {20, 10.7810}, {25, 10.4866}, {30, 10.2237}, {35, 9.9910}, {40, 9.8061}, {45, 9.6538}, {50, 9.4804},
142 {
"ErpOfdmRate24Mbps", {
143 {5, 16.0836}, {10, 14.9153}, {15, 14.2327}, {20, 13.7300}, {25, 13.3595}, {30, 13.0281}, {35, 12.7343}, {40, 12.5008}, {45, 12.3083}, {50, 12.0889},
145 {
"ErpOfdmRate36Mbps", {
146 {5, 22.0092}, {10, 20.4836}, {15, 19.5743}, {20, 18.8997}, {25, 18.4002}, {30, 17.9524}, {35, 17.5545}, {40, 17.2377}, {45, 16.9760}, {50, 16.6777},
148 {
"ErpOfdmRate48Mbps", {
149 {5, 26.8382}, {10, 25.0509}, {15, 23.9672}, {20, 23.1581}, {25, 22.5568}, {30, 22.0165}, {35, 21.5355}, {40, 21.1519}, {45, 20.8348}, {50, 20.4729},
151 {
"ErpOfdmRate54Mbps", {
152 {5, 29.2861}, {10, 27.3763}, {15, 26.2078}, {20, 25.3325}, {25, 24.6808}, {30, 24.0944}, {35, 23.5719}, {40, 23.1549}, {45, 22.8100}, {50, 22.4162},
156 {5, 6.3381}, {10, 5.8172}, {15, 5.5223}, {20, 5.3146}, {25, 5.1525}, {30, 5.0187}, {35, 4.9039}, {40, 4.8034}, {45, 4.7134}, {50, 4.6317},
159 {5, 11.6580}, {10, 10.7369}, {15, 10.2068}, {20, 9.8309}, {25, 9.5365}, {30, 9.2930}, {35, 9.0837}, {40, 8.9001}, {45, 8.7355}, {50, 8.5860},
162 {5, 15.8572}, {10, 14.6445}, {15, 13.9367}, {20, 13.4323}, {25, 13.0361}, {30, 12.7076}, {35, 12.4249}, {40, 12.1766}, {45, 11.9538}, {50, 11.7511},
165 {5, 19.7457}, {10, 18.2820}, {15, 17.4163}, {20, 16.7963}, {25, 16.3078}, {30, 15.9021}, {35, 15.5524}, {40, 15.2449}, {45, 14.9687}, {50, 14.7173},
168 {5, 25.8947}, {10, 24.0721}, {15, 22.9698}, {20, 22.1738}, {25, 21.5437}, {30, 21.0186}, {35, 20.5650}, {40, 20.1654}, {45, 19.8059}, {50, 19.4784},
171 {5, 30.0542}, {10, 28.0155}, {15, 26.7625}, {20, 25.8523}, {25, 25.1295}, {30, 24.5258}, {35, 24.0034}, {40, 23.5426}, {45, 23.1277}, {50, 22.7492},
174 {5, 32.6789}, {10, 30.5150}, {15, 29.1708}, {20, 28.1907}, {25, 27.4107}, {30, 26.7583}, {35, 26.1931}, {40, 25.6941}, {45, 25.2446}, {50, 24.8343},
177 {5, 34.1710}, {10, 31.9398}, {15, 30.5451}, {20, 29.5261}, {25, 28.7140}, {30, 28.0342}, {35, 27.4449}, {40, 26.9245}, {45, 26.4554}, {50, 26.0271},
180 {5, 37.6051}, {10, 35.2296}, {15, 33.7228}, {20, 32.6160}, {25, 31.7314}, {30, 30.9895}, {35, 30.3455}, {40, 29.7760}, {45, 29.2623}, {50, 28.7929},
183 {5, 39.5947}, {10, 37.1424}, {15, 35.5731}, {20, 34.4169}, {25, 33.4911}, {30, 32.7138}, {35, 32.0385}, {40, 31.4410}, {45, 30.9016}, {50, 30.4086},
186 {5, 39.5947}, {10, 37.1424}, {15, 35.5731}, {20, 34.4169}, {25, 33.4911}, {30, 32.7138}, {35, 32.0385}, {40, 31.4410}, {45, 30.9016}, {50, 30.4086},
189 {5, 41.8065}, {10, 39.2749}, {15, 37.6383}, {20, 36.4282}, {25, 35.4575}, {30, 34.6414}, {35, 33.9316}, {40, 33.3031}, {45, 32.7355}, {50, 32.2164},
192 {5, 11.4999}, {10, 10.5902}, {15, 10.0669}, {20, 9.6960}, {25, 9.4055}, {30, 9.1652}, {35, 8.9587}, {40, 8.7775}, {45, 8.6151}, {50, 8.4676},
195 {5, 19.5937}, {10, 18.1394}, {15, 17.2798}, {20, 16.6642}, {25, 16.1793}, {30, 15.7766}, {35, 15.4295}, {40, 15.1242}, {45, 14.8502}, {50, 14.6007},
198 {5, 25.6338}, {10, 23.8255}, {15, 22.7329}, {20, 21.9442}, {25, 21.3200}, {30, 20.7999}, {35, 20.3506}, {40, 19.9549}, {45, 19.5990}, {50, 19.2746},
201 {5, 30.0542}, {10, 28.0155}, {15, 26.7625}, {20, 25.8523}, {25, 25.1295}, {30, 24.5258}, {35, 24.0034}, {40, 23.5426}, {45, 23.1277}, {50, 22.7492},
204 {5, 37.6051}, {10, 35.2296}, {15, 33.7228}, {20, 32.6160}, {25, 31.7314}, {30, 30.9895}, {35, 30.3455}, {40, 29.7760}, {45, 29.2623}, {50, 28.7929},
207 {5, 41.8065}, {10, 39.2749}, {15, 37.6383}, {20, 36.4282}, {25, 35.4575}, {30, 34.6414}, {35, 33.9316}, {40, 33.3031}, {45, 32.7355}, {50, 32.2164},
210 {5, 44.2801}, {10, 41.6672}, {15, 39.9580}, {20, 38.6892}, {25, 37.6692}, {30, 36.8103}, {35, 36.0625}, {40, 35.3998}, {45, 34.8008}, {50, 34.2528},
213 {5, 44.2801}, {10, 41.6672}, {15, 39.9580}, {20, 38.6892}, {25, 37.6692}, {30, 36.8103}, {35, 36.0625}, {40, 35.3998}, {45, 34.8008}, {50, 34.2528},
216 {5, 47.0648}, {10, 44.3699}, {15, 42.5825}, {20, 41.2495}, {25, 40.1751}, {30, 39.2689}, {35, 38.4790}, {40, 37.7781}, {45, 37.1443}, {50, 36.5639},
219 {5, 50.2233}, {10, 47.4474}, {15, 45.5760}, {20, 44.1727}, {25, 43.0382}, {30, 42.0794}, {35, 41.2425}, {40, 40.4991}, {45, 39.8262}, {50, 39.2095},
222 {5, 50.2233}, {10, 47.4474}, {15, 45.5760}, {20, 44.1727}, {25, 43.0382}, {30, 42.0794}, {35, 41.2425}, {40, 40.4991}, {45, 39.8262}, {50, 39.2095},
225 {5, 50.2233}, {10, 47.4474}, {15, 45.5760}, {20, 44.1727}, {25, 43.0382}, {30, 42.0794}, {35, 41.2425}, {40, 40.4991}, {45, 39.8262}, {50, 39.2095},
228 {5, 19.6542}, {10, 18.1962}, {15, 17.3342}, {20, 16.7168}, {25, 16.2305}, {30, 15.8265}, {35, 15.4784}, {40, 15.1723}, {45, 14.8973}, {50, 14.6471},
231 {5, 30.9311}, {10, 28.8495}, {15, 27.5657}, {20, 26.6320}, {25, 25.8899}, {30, 25.2699}, {35, 24.7332}, {40, 24.2595}, {45, 23.8330}, {50, 23.4439},
234 {5, 37.0575}, {10, 34.7039}, {15, 33.2146}, {20, 32.1216}, {25, 31.2485}, {30, 30.5164}, {35, 29.8811}, {40, 29.3194}, {45, 28.8127}, {50, 28.3499},
237 {5, 41.8065}, {10, 39.2749}, {15, 37.6383}, {20, 36.4282}, {25, 35.4575}, {30, 34.6414}, {35, 33.9316}, {40, 33.3031}, {45, 32.7355}, {50, 32.2164},
240 {5, 47.0648}, {10, 44.3699}, {15, 42.5825}, {20, 41.2495}, {25, 40.1751}, {30, 39.2689}, {35, 38.4790}, {40, 37.7781}, {45, 37.1443}, {50, 36.5639},
243 {5, 50.2233}, {10, 47.4474}, {15, 45.5760}, {20, 44.1727}, {25, 43.0382}, {30, 42.0794}, {35, 41.2425}, {40, 40.4991}, {45, 39.8262}, {50, 39.2095},
246 {5, 53.8362}, {10, 50.9837}, {15, 49.0221}, {20, 47.5418}, {25, 46.3407}, {30, 45.3233}, {35, 44.4337}, {40, 43.6425}, {45, 42.9255}, {50, 42.2678},
249 {5, 53.8362}, {10, 50.9837}, {15, 49.0221}, {20, 47.5418}, {25, 46.3407}, {30, 45.3233}, {35, 44.4337}, {40, 43.6425}, {45, 42.9255}, {50, 42.2678},
252 {5, 53.8362}, {10, 50.9837}, {15, 49.0221}, {20, 47.5418}, {25, 46.3407}, {30, 45.3233}, {35, 44.4337}, {40, 43.6425}, {45, 42.9255}, {50, 42.2678},
255 {5, 58.0092}, {10, 55.0896}, {15, 53.0321}, {20, 51.4672}, {25, 50.1922}, {30, 49.1091}, {35, 48.1601}, {40, 47.3148}, {45, 46.5478}, {50, 45.8436},
258 {5, 58.0092}, {10, 55.0896}, {15, 53.0321}, {20, 51.4672}, {25, 50.1922}, {30, 49.1091}, {35, 48.1601}, {40, 47.3148}, {45, 46.5478}, {50, 45.8436},
261 {5, 58.0092}, {10, 55.0896}, {15, 53.0321}, {20, 51.4672}, {25, 50.1922}, {30, 49.1091}, {35, 48.1601}, {40, 47.3148}, {45, 46.5478}, {50, 45.8436},
264 {5, 29.8428}, {10, 27.8145}, {15, 26.5689}, {20, 25.6645}, {25, 24.9463}, {30, 24.3466}, {35, 23.8276}, {40, 23.3699}, {45, 22.9578}, {50, 22.5819},
267 {5, 41.1308}, {10, 38.6227}, {15, 37.0064}, {20, 35.8126}, {25, 34.8556}, {30, 34.0513}, {35, 33.3520}, {40, 32.7329}, {45, 32.1739}, {50, 31.6628},
270 {5, 46.2101}, {10, 43.5393}, {15, 41.7755}, {20, 40.4620}, {25, 39.4041}, {30, 38.5123}, {35, 37.7353}, {40, 37.0461}, {45, 36.4229}, {50, 35.8524},
273 {5, 50.2233}, {10, 47.4474}, {15, 45.5760}, {20, 44.1727}, {25, 43.0382}, {30, 42.0794}, {35, 41.2425}, {40, 40.4991}, {45, 39.8262}, {50, 39.2095},
276 {5, 53.8362}, {10, 50.9837}, {15, 49.0221}, {20, 47.5418}, {25, 46.3407}, {30, 45.3233}, {35, 44.4337}, {40, 43.6425}, {45, 42.9255}, {50, 42.2678},
279 {5, 58.0092}, {10, 55.0896}, {15, 53.0321}, {20, 51.4672}, {25, 50.1922}, {30, 49.1091}, {35, 48.1601}, {40, 47.3148}, {45, 46.5478}, {50, 45.8436},
282 {5, 58.0092}, {10, 55.0896}, {15, 53.0321}, {20, 51.4672}, {25, 50.1922}, {30, 49.1091}, {35, 48.1601}, {40, 47.3148}, {45, 46.5478}, {50, 45.8436},
285 {5, 58.0092}, {10, 55.0896}, {15, 53.0321}, {20, 51.4672}, {25, 50.1922}, {30, 49.1091}, {35, 48.1601}, {40, 47.3148}, {45, 46.5478}, {50, 45.8436},
288 {5, 58.0092}, {10, 55.0896}, {15, 53.0321}, {20, 51.4672}, {25, 50.1922}, {30, 49.1091}, {35, 48.1601}, {40, 47.3148}, {45, 46.5478}, {50, 45.8436},
291 {5, 62.8834}, {10, 59.9147}, {15, 57.7564}, {20, 56.0992}, {25, 54.7419}, {30, 53.5850}, {35, 52.5689}, {40, 51.6620}, {45, 50.8379}, {50, 50.0803},
294 {5, 62.8834}, {10, 59.9147}, {15, 57.7564}, {20, 56.0992}, {25, 54.7419}, {30, 53.5850}, {35, 52.5689}, {40, 51.6620}, {45, 50.8379}, {50, 50.0803},
297 {5, 62.8834}, {10, 59.9147}, {15, 57.7564}, {20, 56.0992}, {25, 54.7419}, {30, 53.5850}, {35, 52.5689}, {40, 51.6620}, {45, 50.8379}, {50, 50.0803},
305 {5, 0.8437}, {10, 0.7861}, {15, 0.7496}, {20, 0.7226}, {25, 0.7016}, {30, 0.6847}, {35, 0.6686}, {40, 0.6549}, {45, 0.6435}, {50, 0.6336},
308 {5, 1.6228}, {10, 1.5168}, {15, 1.4482}, {20, 1.3972}, {25, 1.3574}, {30, 1.3253}, {35, 1.2947}, {40, 1.2687}, {45, 1.2469}, {50, 1.2279},
310 {
"DsssRate5_5Mbps", {
311 {5, 3.8896}, {10, 3.6707}, {15, 3.5203}, {20, 3.4063}, {25, 3.3161}, {30, 3.2429}, {35, 3.1729}, {40, 3.1128}, {45, 3.0625}, {50, 3.0184},
314 {5, 6.4734}, {10, 6.1774}, {15, 5.9553}, {20, 5.7819}, {25, 5.6429}, {30, 5.5289}, {35, 5.4191}, {40, 5.3243}, {45, 5.2446}, {50, 5.1745},
318 {5, 4.7087}, {10, 4.3453}, {15, 4.1397}, {20, 3.9899}, {25, 3.8802}, {30, 3.7824}, {35, 3.6961}, {40, 3.6276}, {45, 3.5712}, {50, 3.5071},
321 {5, 6.8586}, {10, 6.3431}, {15, 6.0489}, {20, 5.8340}, {25, 5.6762}, {30, 5.5355}, {35, 5.4110}, {40, 5.3122}, {45, 5.2307}, {50, 5.1380},
324 {5, 8.9515}, {10, 8.2901}, {15, 7.9102}, {20, 7.6319}, {25, 7.4274}, {30, 7.2447}, {35, 7.0829}, {40, 6.9544}, {45, 6.8485}, {50, 6.7278},
327 {5, 12.7822}, {10, 11.8801}, {15, 11.3543}, {20, 10.9668}, {25, 10.6809}, {30, 10.4249}, {35, 10.1978}, {40, 10.0171}, {45, 9.8679}, {50, 9.6978},
330 {5, 16.2470}, {10, 15.1426}, {15, 14.4904}, {20, 14.0072}, {25, 13.6496}, {30, 13.3288}, {35, 13.0436}, {40, 12.8164}, {45, 12.6286}, {50, 12.4144},
333 {5, 22.3164}, {10, 20.9147}, {15, 20.0649}, {20, 19.4289}, {25, 18.9552}, {30, 18.5284}, {35, 18.1476}, {40, 17.8434}, {45, 17.5915}, {50, 17.3036},
336 {5, 27.2963}, {10, 25.6987}, {15, 24.7069}, {20, 23.9578}, {25, 23.3965}, {30, 22.8891}, {35, 22.4350}, {40, 22.0713}, {45, 21.7696}, {50, 21.4243},
339 {5, 29.8324}, {10, 28.1519}, {15, 27.0948}, {20, 26.2925}, {25, 25.6896}, {30, 25.1434}, {35, 24.6539}, {40, 24.2613}, {45, 23.9353}, {50, 23.5618},
342 {
"ErpOfdmRate6Mbps", {
343 {5, 4.7087}, {10, 4.3453}, {15, 4.1397}, {20, 3.9899}, {25, 3.8802}, {30, 3.7824}, {35, 3.6961}, {40, 3.6276}, {45, 3.5712}, {50, 3.5071},
345 {
"ErpOfdmRate9Mbps", {
346 {5, 6.8586}, {10, 6.3431}, {15, 6.0489}, {20, 5.8340}, {25, 5.6762}, {30, 5.5355}, {35, 5.4110}, {40, 5.3122}, {45, 5.2307}, {50, 5.1380},
348 {
"ErpOfdmRate12Mbps", {
349 {5, 8.9515}, {10, 8.2901}, {15, 7.9102}, {20, 7.6319}, {25, 7.4274}, {30, 7.2447}, {35, 7.0829}, {40, 6.9544}, {45, 6.8485}, {50, 6.7278},
351 {
"ErpOfdmRate18Mbps", {
352 {5, 12.7822}, {10, 11.8801}, {15, 11.3543}, {20, 10.9668}, {25, 10.6809}, {30, 10.4249}, {35, 10.1978}, {40, 10.0171}, {45, 9.8679}, {50, 9.6978},
354 {
"ErpOfdmRate24Mbps", {
355 {5, 16.2470}, {10, 15.1426}, {15, 14.4904}, {20, 14.0072}, {25, 13.6496}, {30, 13.3288}, {35, 13.0436}, {40, 12.8164}, {45, 12.6286}, {50, 12.4144},
357 {
"ErpOfdmRate36Mbps", {
358 {5, 22.3164}, {10, 20.9147}, {15, 20.0649}, {20, 19.4289}, {25, 18.9552}, {30, 18.5284}, {35, 18.1476}, {40, 17.8434}, {45, 17.5915}, {50, 17.3036},
360 {
"ErpOfdmRate48Mbps", {
361 {5, 27.2963}, {10, 25.6987}, {15, 24.7069}, {20, 23.9578}, {25, 23.3965}, {30, 22.8891}, {35, 22.4350}, {40, 22.0713}, {45, 21.7696}, {50, 21.4243},
363 {
"ErpOfdmRate54Mbps", {
364 {5, 29.8324}, {10, 28.1519}, {15, 27.0948}, {20, 26.2925}, {25, 25.6896}, {30, 25.1434}, {35, 24.6539}, {40, 24.2613}, {45, 23.9353}, {50, 23.5618},
368 {5, 6.3746}, {10, 5.8670}, {15, 5.5782}, {20, 5.3742}, {25, 5.2147}, {30, 5.0829}, {35, 4.9696}, {40, 4.8703}, {45, 4.7813}, {50, 4.7004},
371 {5, 11.7574}, {10, 10.8735}, {15, 10.3606}, {20, 9.9954}, {25, 9.7084}, {30, 9.4704}, {35, 9.2654}, {40, 9.0853}, {45, 8.9235}, {50, 8.7763},
374 {5, 16.0419}, {10, 14.8998}, {15, 14.2252}, {20, 13.7413}, {25, 13.3594}, {30, 13.0417}, {35, 12.7674}, {40, 12.5258}, {45, 12.3086}, {50, 12.1107},
377 {5, 20.0089}, {10, 18.6480}, {15, 17.8309}, {20, 17.2410}, {25, 16.7736}, {30, 16.3837}, {35, 16.0465}, {40, 15.7491}, {45, 15.4813}, {50, 15.2369},
380 {5, 26.3492}, {10, 24.7107}, {15, 23.6964}, {20, 22.9553}, {25, 22.3640}, {30, 21.8683}, {35, 21.4379}, {40, 21.0571}, {45, 20.7134}, {50, 20.3991},
383 {5, 30.6683}, {10, 28.8843}, {15, 27.7540}, {20, 26.9210}, {25, 26.2528}, {30, 25.6906}, {35, 25.2012}, {40, 24.7671}, {45, 24.3746}, {50, 24.0151},
386 {5, 33.4062}, {10, 31.5485}, {15, 30.3527}, {20, 29.4662}, {25, 28.7527}, {30, 28.1508}, {35, 27.6259}, {40, 27.1597}, {45, 26.7376}, {50, 26.3507},
389 {5, 34.9671}, {10, 33.0739}, {15, 31.8436}, {20, 30.9282}, {25, 30.1900}, {30, 29.5665}, {35, 29.0221}, {40, 28.5382}, {45, 28.0997}, {50, 27.6975},
392 {5, 38.5714}, {10, 36.6144}, {15, 35.3124}, {20, 34.3355}, {25, 33.5438}, {30, 32.8728}, {35, 32.2854}, {40, 31.7623}, {45, 31.2874}, {50, 30.8512},
395 {5, 40.6674}, {10, 38.6851}, {15, 37.3466}, {20, 36.3371}, {25, 35.5165}, {30, 34.8197}, {35, 34.2087}, {40, 33.6638}, {45, 33.1688}, {50, 32.7137},
398 {5, 40.6674}, {10, 38.6851}, {15, 37.3466}, {20, 36.3371}, {25, 35.5165}, {30, 34.8197}, {35, 34.2087}, {40, 33.6638}, {45, 33.1688}, {50, 32.7137},
401 {5, 43.0043}, {10, 41.0039}, {15, 39.6294}, {20, 38.5865}, {25, 37.7358}, {30, 37.0116}, {35, 36.3756}, {40, 35.8076}, {45, 35.2909}, {50, 34.8154},
404 {5, 11.6208}, {10, 10.7566}, {15, 10.2544}, {20, 9.8965}, {25, 9.6151}, {30, 9.3815}, {35, 9.1804}, {40, 9.0035}, {45, 8.8446}, {50, 8.7000},
407 {5, 19.8764}, {10, 18.5328}, {15, 17.7255}, {20, 17.1424}, {25, 16.6803}, {30, 16.2947}, {35, 15.9612}, {40, 15.6668}, {45, 15.4018}, {50, 15.1599},
410 {5, 26.1198}, {10, 24.5088}, {15, 23.5107}, {20, 22.7810}, {25, 22.1986}, {30, 21.7101}, {35, 21.2858}, {40, 20.9104}, {45, 20.5714}, {50, 20.2613},
413 {5, 30.6683}, {10, 28.8843}, {15, 27.7540}, {20, 26.9210}, {25, 26.2528}, {30, 25.6906}, {35, 25.2012}, {40, 24.7671}, {45, 24.3746}, {50, 24.0151},
416 {5, 38.5714}, {10, 36.6144}, {15, 35.3124}, {20, 34.3355}, {25, 33.5438}, {30, 32.8728}, {35, 32.2854}, {40, 31.7623}, {45, 31.2874}, {50, 30.8512},
419 {5, 43.0043}, {10, 41.0039}, {15, 39.6294}, {20, 38.5865}, {25, 37.7358}, {30, 37.0116}, {35, 36.3756}, {40, 35.8076}, {45, 35.2909}, {50, 34.8154},
422 {5, 45.6261}, {10, 43.6185}, {15, 42.2095}, {20, 41.1328}, {25, 40.2509}, {30, 39.4981}, {35, 38.8356}, {40, 38.2430}, {45, 37.7032}, {50, 37.2058},
425 {5, 45.6261}, {10, 43.6185}, {15, 42.2095}, {20, 41.1328}, {25, 40.2509}, {30, 39.4981}, {35, 38.8356}, {40, 38.2430}, {45, 37.7032}, {50, 37.2058},
428 {5, 48.5883}, {10, 46.5892}, {15, 45.1489}, {20, 44.0388}, {25, 43.1252}, {30, 42.3428}, {35, 41.6525}, {40, 41.0338}, {45, 40.4694}, {50, 39.9486},
431 {5, 51.9619}, {10, 49.9941}, {15, 48.5284}, {20, 47.3867}, {25, 46.4416}, {30, 45.6290}, {35, 44.9099}, {40, 44.2640}, {45, 43.6736}, {50, 43.1279},
434 {5, 51.9619}, {10, 49.9941}, {15, 48.5284}, {20, 47.3867}, {25, 46.4416}, {30, 45.6290}, {35, 44.9099}, {40, 44.2640}, {45, 43.6736}, {50, 43.1279},
437 {5, 51.9619}, {10, 49.9941}, {15, 48.5284}, {20, 47.3867}, {25, 46.4416}, {30, 45.6290}, {35, 44.9099}, {40, 44.2640}, {45, 43.6736}, {50, 43.1279},
440 {5, 20.0101}, {10, 18.6928}, {15, 17.8976}, {20, 17.3219}, {25, 16.8648}, {30, 16.4830}, {35, 16.1523}, {40, 15.8603}, {45, 15.5971}, {50, 15.3567},
443 {5, 31.6415}, {10, 29.8575}, {15, 28.7177}, {20, 27.8747}, {25, 27.1971}, {30, 26.6261}, {35, 26.1283}, {40, 25.6865}, {45, 25.2866}, {50, 24.9200},
446 {5, 38.0818}, {10, 36.1730}, {15, 34.9016}, {20, 33.9470}, {25, 33.1729}, {30, 32.5165}, {35, 31.9417}, {40, 31.4295}, {45, 30.9645}, {50, 30.5372},
449 {5, 43.0043}, {10, 41.0039}, {15, 39.6294}, {20, 38.5865}, {25, 37.7358}, {30, 37.0116}, {35, 36.3756}, {40, 35.8076}, {45, 35.2909}, {50, 34.8154},
452 {5, 48.5883}, {10, 46.5892}, {15, 45.1489}, {20, 44.0388}, {25, 43.1252}, {30, 42.3428}, {35, 41.6525}, {40, 41.0338}, {45, 40.4694}, {50, 39.9486},
455 {5, 51.9619}, {10, 49.9941}, {15, 48.5284}, {20, 47.3867}, {25, 46.4416}, {30, 45.6290}, {35, 44.9099}, {40, 44.2640}, {45, 43.6736}, {50, 43.1279},
458 {5, 55.8389}, {10, 53.9360}, {15, 52.4548}, {20, 51.2855}, {25, 50.3106}, {30, 49.4682}, {35, 48.7201}, {40, 48.0462}, {45, 47.4288}, {50, 46.8571},
461 {5, 55.8389}, {10, 53.9360}, {15, 52.4548}, {20, 51.2855}, {25, 50.3106}, {30, 49.4682}, {35, 48.7201}, {40, 48.0462}, {45, 47.4288}, {50, 46.8571},
464 {5, 55.8389}, {10, 53.9360}, {15, 52.4548}, {20, 51.2855}, {25, 50.3106}, {30, 49.4682}, {35, 48.7201}, {40, 48.0462}, {45, 47.4288}, {50, 46.8571},
467 {5, 60.3411}, {10, 58.5527}, {15, 57.0724}, {20, 55.8834}, {25, 54.8827}, {30, 54.0128}, {35, 53.2368}, {40, 52.5352}, {45, 51.8906}, {50, 51.2922},
470 {5, 60.3411}, {10, 58.5527}, {15, 57.0724}, {20, 55.8834}, {25, 54.8827}, {30, 54.0128}, {35, 53.2368}, {40, 52.5352}, {45, 51.8906}, {50, 51.2922},
473 {5, 60.3411}, {10, 58.5527}, {15, 57.0724}, {20, 55.8834}, {25, 54.8827}, {30, 54.0128}, {35, 53.2368}, {40, 52.5352}, {45, 51.8906}, {50, 51.2922},
476 {5, 30.6710}, {10, 28.9919}, {15, 27.9160}, {20, 27.1188}, {25, 26.4770}, {30, 25.9355}, {35, 25.4630}, {40, 25.0432}, {45, 24.6629}, {50, 24.3141},
479 {5, 42.3965}, {10, 40.4510}, {15, 39.1127}, {20, 38.0965}, {25, 37.2670}, {30, 36.5606}, {35, 35.9398}, {40, 35.3852}, {45, 34.8806}, {50, 34.4160},
482 {5, 47.8139}, {10, 45.8767}, {15, 44.4795}, {20, 43.4017}, {25, 42.5141}, {30, 41.7535}, {35, 41.0821}, {40, 40.4801}, {45, 39.9307}, {50, 39.4236},
485 {5, 51.9619}, {10, 49.9941}, {15, 48.5284}, {20, 47.3867}, {25, 46.4416}, {30, 45.6290}, {35, 44.9099}, {40, 44.2640}, {45, 43.6736}, {50, 43.1279},
488 {5, 55.8389}, {10, 53.9360}, {15, 52.4548}, {20, 51.2855}, {25, 50.3106}, {30, 49.4682}, {35, 48.7201}, {40, 48.0462}, {45, 47.4288}, {50, 46.8571},
491 {5, 60.3411}, {10, 58.5527}, {15, 57.0724}, {20, 55.8834}, {25, 54.8827}, {30, 54.0128}, {35, 53.2368}, {40, 52.5352}, {45, 51.8906}, {50, 51.2922},
494 {5, 60.3411}, {10, 58.5527}, {15, 57.0724}, {20, 55.8834}, {25, 54.8827}, {30, 54.0128}, {35, 53.2368}, {40, 52.5352}, {45, 51.8906}, {50, 51.2922},
497 {5, 60.3411}, {10, 58.5527}, {15, 57.0724}, {20, 55.8834}, {25, 54.8827}, {30, 54.0128}, {35, 53.2368}, {40, 52.5352}, {45, 51.8906}, {50, 51.2922},
500 {5, 60.3411}, {10, 58.5527}, {15, 57.0724}, {20, 55.8834}, {25, 54.8827}, {30, 54.0128}, {35, 53.2368}, {40, 52.5352}, {45, 51.8906}, {50, 51.2922},
503 {5, 65.6329}, {10, 64.0336}, {15, 62.5814}, {20, 61.3869}, {25, 60.3690}, {30, 59.4769}, {35, 58.6764}, {40, 57.9495}, {45, 57.2790}, {50, 56.6548},
506 {5, 65.6329}, {10, 64.0336}, {15, 62.5814}, {20, 61.3869}, {25, 60.3690}, {30, 59.4769}, {35, 58.6764}, {40, 57.9495}, {45, 57.2790}, {50, 56.6548},
509 {5, 65.6329}, {10, 64.0336}, {15, 62.5814}, {20, 61.3869}, {25, 60.3690}, {30, 59.4769}, {35, 58.6764}, {40, 57.9495}, {45, 57.2790}, {50, 56.6548},
517 std::string sub = context.substr (10);
518 uint32_t pos = sub.find (
"/Device");
519 return atoi (sub.substr (0, pos).c_str ());
526 std::string sub = context.substr (10);
527 uint32_t pos = sub.find (
"/Device");
528 uint32_t nodeId = atoi (sub.substr (0, pos).c_str ());
531 for (uint32_t i = 0; i <
n->GetNDevices (); i++)
547 auto it = counter.find (addr);
548 if (it != counter.end ())
550 it->second += increment;
554 counter.insert (std::make_pair (addr, increment));
565 uint32_t extractedLength;
568 packet = packet->
CreateFragment (0,
static_cast<uint32_t
> (extractedLength));
600 CwTrace (std::string context, uint32_t oldVal, uint32_t newVal)
695 NS_FATAL_ERROR (
"All devices should send with same power, so no packet switch during preamble detection should occur!");
723 <<
" nMPDUs=" << +nMpdus
726 <<
" preamble=" << preamble);
731 NS_FATAL_ERROR (
"A-MPDU settings not properly applied: maximum configured MPDUs is " << +
maxMpdus <<
" but received an A-MPDU containing " << +nMpdus <<
" MPDUs");
733 NS_LOG_WARN (
"Warning: less MPDUs aggregated in a received A-MPDU (" << +nMpdus <<
") than configured (" << +
maxMpdus <<
")");
867 uint32_t trialNumber, uint32_t networkSize,
Time duration,
bool pcap,
bool infra, uint16_t guardIntervalNs,
868 double distanceM,
double apTxPowerDbm,
double staTxPowerDbm,
Time pktInterval);
877 uint32_t trialNumber, uint32_t networkSize,
Time duration,
bool pcap,
bool infra, uint16_t guardIntervalNs,
878 double distance,
double apTxPowerDbm,
double staTxPowerDbm,
Time pktInterval)
883 wifiNodes.
Create (networkSize + 1);
887 wifiNodes.
Create (networkSize);
891 phy.SetErrorRateModel (
"ns3::NistErrorRateModel");
898 uint32_t nNodes = wifiNodes.
GetN ();
902 uint64_t beaconInterval = std::min<uint64_t> ((ceil ((duration.
GetSeconds () * 1000000) / 1024) * 1024), (65535 * 1024));
903 mac.SetType (
"ns3::ApWifiMac",
910 mac.SetType (
"ns3::StaWifiMac",
915 for (uint32_t i = 1; i < nNodes; ++i)
922 mac.SetType (
"ns3::AdhocWifiMac");
930 Config::Set (
"/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/HtConfiguration/ShortGuardIntervalSupported",
BooleanValue (guardIntervalNs == 400 ?
true :
false));
934 for (uint32_t i = 0; i < nNodes; ++i)
946 mobility.SetMobilityModel (
"ns3::ConstantPositionMobilityModel");
948 positionAlloc->
Add (Vector (1.0, 1.0, 0.0));
951 double angle = (
static_cast<double> (360) / (nNodes - 1));
952 for (uint32_t i = 0; i < (nNodes - 1); ++i)
954 positionAlloc->
Add (Vector (1.0 + (distance * cos ((i * angle *
PI) / 180)), 1.0 + (distance * sin ((i * angle *
PI) / 180)), 0.0));
957 mobility.SetPositionAllocator (positionAlloc);
961 packetSocket.
Install (wifiNodes);
968 uint32_t i = infra ? 1 : 0;
969 for (; i < nNodes; ++i)
971 uint32_t j = infra ? 0 : (i + 1) % nNodes;
1034 phy.EnablePcap (
"wifi_bianchi_pcap",
devices);
1057 auto it = counter.find (addr);
1058 if (it != counter.end ())
1065 int main (
int argc,
char *argv[])
1067 uint32_t nMinStas = 5;
1068 uint32_t nMaxStas = 50;
1069 uint32_t nStepSize = 5;
1071 double duration = 100;
1072 uint32_t trials = 1;
1075 std::string workDir =
"./";
1076 std::string phyMode =
"OfdmRate54Mbps";
1077 std::string standard (
"11a");
1078 bool validate =
false;
1079 uint16_t plotBianchiModel = 0x01;
1080 double maxRelativeError = 0.015;
1081 double frequency = 5;
1082 uint16_t channelWidth = 20;
1083 uint16_t guardIntervalNs = 800;
1084 uint16_t pktInterval = 1000;
1085 double distance = 0.001;
1086 double apTxPower = 16;
1087 double staTxPower = 16;
1100 cmd.AddValue (
"verbose",
"Logging level (0: no log - 1: simulation script logs - 2: all logs)",
verbose);
1101 cmd.AddValue (
"tracing",
"Generate trace files",
tracing);
1102 cmd.AddValue (
"pktSize",
"The packet size in bytes",
pktSize);
1103 cmd.AddValue (
"trials",
"The maximal number of runs per network size", trials);
1104 cmd.AddValue (
"duration",
"Time duration for each trial in seconds", duration);
1105 cmd.AddValue (
"pcap",
"Enable/disable PCAP tracing", pcap);
1106 cmd.AddValue (
"infra",
"True to use infrastructure mode, false to use ring adhoc mode", infra);
1107 cmd.AddValue (
"workDir",
"The working directory used to store generated files", workDir);
1108 cmd.AddValue (
"phyMode",
"Set the constant PHY mode string used to transmit frames", phyMode);
1109 cmd.AddValue (
"standard",
"Set the standard (11a, 11b, 11g, 11n, 11ac, 11ax)", standard);
1110 cmd.AddValue (
"nMinStas",
"Minimum number of stations to start with", nMinStas);
1111 cmd.AddValue (
"nMaxStas",
"Maximum number of stations to start with", nMaxStas);
1112 cmd.AddValue (
"nStepSize",
"Number of stations to add at each step", nStepSize);
1113 cmd.AddValue (
"plotBianchiModel",
"First bit corresponds to the DIFS model, second bit to the EIFS model", plotBianchiModel);
1114 cmd.AddValue (
"validate",
"Enable/disable validation of the ns-3 simulations against the Bianchi model", validate);
1115 cmd.AddValue (
"maxRelativeError",
"The maximum relative error tolerated between ns-3 results and the Bianchi model (used for regression, i.e. when the validate flag is set)", maxRelativeError);
1116 cmd.AddValue (
"frequency",
"Set the operating frequency band in GHz: 2.4, 5 or 6", frequency);
1117 cmd.AddValue (
"channelWidth",
"Set the constant channel width in MHz (only for 11n/ac/ax)", channelWidth);
1118 cmd.AddValue (
"guardIntervalNs",
"Set the the guard interval in nanoseconds (800 or 400 for 11n/ac, 800 or 1600 or 3200 for 11 ax)", guardIntervalNs);
1119 cmd.AddValue (
"maxMpdus",
"Set the maximum number of MPDUs in A-MPDUs (0 to disable MPDU aggregation)",
maxMpdus);
1120 cmd.AddValue (
"distance",
"Set the distance in meters between the AP and the STAs", distance);
1121 cmd.AddValue (
"apTxPower",
"Set the transmit power of the AP in dBm (if infrastructure only)", apTxPower);
1122 cmd.AddValue (
"staTxPower",
"Set the transmit power of each STA in dBm (or all STAs if adhoc)", staTxPower);
1123 cmd.AddValue (
"pktInterval",
"Set the socket packet interval in microseconds", pktInterval);
1124 cmd.Parse (argc, argv);
1131 NS_FATAL_ERROR (
"Failed to open file wifi-bianchi-cw-trace.out");
1136 NS_FATAL_ERROR (
"Failed to open file wifi-bianchi-backoff-trace.out");
1141 NS_FATAL_ERROR (
"Failed to open file wifi-bianchi-phy-tx-trace.out");
1146 NS_FATAL_ERROR (
"Failed to open file wifi-bianchi-mac-tx-trace.out");
1151 NS_FATAL_ERROR (
"Failed to open file wifi-bianchi-mac-rx-trace.out");
1156 NS_FATAL_ERROR (
"Failed to open file wifi-bianchi-socket-send-trace.out");
1174 std::stringstream phyModeStr;
1175 phyModeStr << phyMode;
1176 if (phyMode.find (
"Mcs") != std::string::npos)
1178 phyModeStr <<
"_" << channelWidth <<
"MHz";
1181 std::stringstream ss;
1182 ss <<
"wifi-"<< standard <<
"-p-" <<
pktSize << (infra ?
"-infrastructure" :
"-adhoc") <<
"-r-" << phyModeStr.str () <<
"-min-" << nMinStas <<
"-max-" << nMaxStas <<
"-step-" << nStepSize <<
"-throughput.plt";
1183 std::ofstream throughputPlot (ss.str ().c_str ());
1185 ss <<
"wifi-" << standard <<
"-p-" <<
pktSize << (infra ?
"-infrastructure" :
"-adhoc") <<
"-r-" << phyModeStr.str () <<
"-min-" << nMinStas <<
"-max-" << nMaxStas <<
"-step-" << nStepSize <<
"-throughput.eps";
1189 if (standard ==
"11a")
1195 else if (standard ==
"11b")
1201 else if (standard ==
"11g")
1207 else if (standard ==
"11n")
1209 if (frequency == 2.4)
1213 else if (frequency == 5)
1219 NS_FATAL_ERROR (
"Unsupported frequency band " << frequency <<
" GHz for standard " << standard);
1222 else if (standard ==
"11ac")
1227 else if (standard ==
"11ax")
1229 if (frequency == 2.4)
1233 else if (frequency == 5)
1237 else if (frequency == 6)
1243 NS_FATAL_ERROR (
"Unsupported frequency band " << frequency <<
" GHz for standard " << standard);
1264 else if (frequency == 5)
1282 wifi.SetStandard (wifiStandard);
1283 wifi.SetRemoteStationManager (
"ns3::ConstantRateWifiManager",
1297 double averageThroughput, throughputArray[trials];
1298 for (uint32_t
n = nMinStas;
n <= nMaxStas;
n += nStepSize)
1300 averageThroughput = 0;
1302 for (uint32_t runIndex = 0; runIndex < trials; runIndex++)
1318 std::cout <<
"Trial " << runIndex + 1 <<
" of " << trials <<
"; "<< phyModeStr.str () <<
" for " <<
n <<
" nodes " << std::endl;
1321 cwTraceFile <<
"# Trial " << runIndex + 1 <<
" of " << trials <<
"; "<< phyModeStr.str () <<
" for " <<
n <<
" nodes" << std::endl;
1322 backoffTraceFile <<
"# Trial " << runIndex + 1 <<
" of " << trials <<
"; "<< phyModeStr.str () <<
" for " <<
n <<
" nodes" << std::endl;
1323 phyTxTraceFile <<
"# Trial " << runIndex + 1 <<
" of " << trials <<
"; " << phyModeStr.str () <<
" for " <<
n <<
" nodes" << std::endl;
1324 macTxTraceFile <<
"# Trial " << runIndex + 1 <<
" of " << trials <<
"; " << phyModeStr.str () <<
" for " <<
n <<
" nodes" << std::endl;
1325 macRxTraceFile <<
"# Trial " << runIndex + 1 <<
" of " << trials <<
"; " << phyModeStr.str () <<
" for " <<
n <<
" nodes" << std::endl;
1326 socketSendTraceFile <<
"# Trial " << runIndex + 1 <<
" of " << trials <<
"; " << phyModeStr.str () <<
" for " <<
n <<
" nodes" << std::endl;
1328 experiment.Run (
wifi, wifiPhy, wifiMac, wifiChannel, runIndex,
n,
Seconds (duration), pcap, infra, guardIntervalNs, distance, apTxPower, staTxPower,
MicroSeconds (pktInterval));
1338 Time dataTransferDuration = last -
first;
1339 double nodeThroughput = (it->second * 8 /
static_cast<double> (dataTransferDuration.
GetMicroSeconds ()));
1340 throughput += nodeThroughput;
1350 uint64_t nodeRxEvents =
1351 nodePhyHeaderFailures + nodePsduFailures + nodePsduSuccess + nodeRxEventWhileDecodingPreamble +
1352 nodeRxEventWhileRxing + nodeRxEventWhileTxing + nodeRxEventAbortedByTx;
1353 std::cout <<
"Node " << it->first
1354 <<
": TX packets " << nodeTxPackets
1355 <<
"; RX packets " << nodeRxPackets
1356 <<
"; PHY header failures " << nodePhyHeaderFailures
1357 <<
"; PSDU failures " << nodePsduFailures
1358 <<
"; PSDU success " << nodePsduSuccess
1359 <<
"; RX events while decoding preamble " << nodeRxEventWhileDecodingPreamble
1360 <<
"; RX events while RXing " << nodeRxEventWhileRxing
1361 <<
"; RX events while TXing " << nodeRxEventWhileTxing
1362 <<
"; RX events aborted by TX " << nodeRxEventAbortedByTx
1363 <<
"; total RX events " << nodeRxEvents
1364 <<
"; total events " << nodeTxPackets + nodeRxEvents
1365 <<
"; time first RX " <<
first
1366 <<
"; time last RX " << last
1367 <<
"; dataTransferDuration " << dataTransferDuration
1368 <<
"; throughput " << nodeThroughput <<
" Mbps" << std::endl;
1370 std::cout <<
"Total throughput: " << throughput <<
" Mbps" << std::endl;
1371 averageThroughput += throughput;
1372 throughputArray[runIndex] = throughput;
1374 averageThroughput = averageThroughput / trials;
1376 bool rateFound =
false;
1377 double relativeErrorDifs = 0;
1378 double relativeErrorEifs = 0;
1383 auto it = itDifs->second.find (
n);
1384 if (it != itDifs->second.end ())
1386 relativeErrorDifs = (std::abs (averageThroughput - it->second) / it->second);
1387 std::cout <<
"Relative error (DIFS): " << 100 * relativeErrorDifs <<
"%" << std::endl;
1391 NS_FATAL_ERROR (
"No Bianchi results (DIFS) calculated for that number of stations!");
1398 auto it = itEifs->second.find (
n);
1399 if (it != itEifs->second.end ())
1401 relativeErrorEifs = (std::abs (averageThroughput - it->second) / it->second);
1402 std::cout <<
"Relative error (EIFS): " << 100 * relativeErrorEifs <<
"%" << std::endl;
1406 NS_FATAL_ERROR (
"No Bianchi results (EIFS) calculated for that number of stations!");
1409 if (!rateFound && validate)
1413 double relativeError =
std::min (relativeErrorDifs, relativeErrorEifs);
1414 if (validate && (relativeError > maxRelativeError))
1420 for (uint32_t i = 0; i < trials; ++i)
1422 stDev += pow (throughputArray[i] - averageThroughput, 2);
1424 stDev = sqrt (stDev / (trials - 1));
1425 dataset.
Add (
n, averageThroughput, stDev);
1432 for (uint32_t i = nMinStas; i <= nMaxStas; i += nStepSize)
1435 auto it = itDifs->second.find (i);
1436 if (it != itDifs->second.end ())
1440 datasetBianchiDifs.
Add (i, value);
1445 for (uint32_t i = nMinStas; i <= nMaxStas; i += nStepSize)
1447 datasetBianchiDifs.
Add (i, 0.0);
1454 for (uint32_t i = nMinStas; i <= nMaxStas; i += nStepSize)
1457 auto it = itEifs->second.find (i);
1458 if (it != itEifs->second.end ())
1462 datasetBianchiEifs.
Add (i, value);
1467 for (uint32_t i = nMinStas; i <= nMaxStas; i += nStepSize)
1469 datasetBianchiEifs.
Add (i, 0.0);
1473 datasetBianchiEifs.
SetTitle (
"Bianchi (EIFS - lower bound)");
1474 datasetBianchiDifs.
SetTitle (
"Bianchi (DIFS - upper bound)");
1476 gnuplot.
SetTerminal (
"postscript eps color enh \"Times-BoldItalic\"");
1477 gnuplot.
SetLegend (
"Number of competing stations",
"Throughput (Mbps)");
1479 ss <<
"Frame size " <<
pktSize <<
" bytes";
1482 ss <<
"set xrange [" << nMinStas <<
":" << nMaxStas <<
"]\n"
1483 <<
"set xtics " << nStepSize <<
"\n"
1484 <<
"set grid xtics ytics\n"
1486 <<
"set style line 1 linewidth 5\n"
1487 <<
"set style line 2 linewidth 5\n"
1488 <<
"set style line 3 linewidth 5\n"
1489 <<
"set style line 4 linewidth 5\n"
1490 <<
"set style line 5 linewidth 5\n"
1491 <<
"set style line 6 linewidth 5\n"
1492 <<
"set style line 7 linewidth 5\n"
1493 <<
"set style line 8 linewidth 5\n"
1494 <<
"set style increment user";
1496 if (plotBianchiModel & 0x0001)
1498 datasetBianchiDifs.
SetTitle (
"Bianchi");
1501 if (plotBianchiModel & 0x0002)
1503 datasetBianchiEifs.
SetTitle (
"Bianchi");
1506 if (plotBianchiModel == 0x0003)
1508 datasetBianchiEifs.
SetTitle (
"Bianchi (EIFS - lower bound)");
1509 datasetBianchiDifs.
SetTitle (
"Bianchi (DIFS - upper bound)");
1512 throughputPlot.close ();