24 #include "ns3/fatal-error.h" 25 #include "ns3/wifi-spectrum-value-helper.h" 26 #include "ns3/wifi-standards.h" 27 #include "ns3/wifi-phy-band.h" 77 virtual void DoRun (
void);
97 NS_ASSERT (maskRefsLeft.size () % 2 == 0 && maskRefsRight.size () % 2 == 0);
98 uint16_t freq = 5170 + (bw / 2);
99 double refTxPowerW = 1;
107 m_actualSpectrum = WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity (freq, bw, refTxPowerW, bw);
117 m_actualSpectrum = WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity (freq, bw, refTxPowerW, bw);
124 freq = 2402 + (bw / 2);
127 m_actualSpectrum = WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity (freq, bw, refTxPowerW, bw);
132 NS_ASSERT (bw == 20 || bw == 40 || bw == 80 || bw == 160);
133 m_actualSpectrum = WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity (freq, bw, refTxPowerW, bw);
141 freq = 2402 + (bw / 2);
143 NS_ASSERT (bw == 20 || bw == 40 || bw == 80 || bw == 160);
144 m_actualSpectrum = WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity (freq, bw, refTxPowerW, bw);
154 for (uint32_t i = 0; i < maskRefsLeft.size (); i = i + 2)
161 for (uint32_t i = 0; i < maskRefsRight.size (); i = i + 2)
180 if (
start.first == stop.first)
183 vect.push_back (
start);
188 double slope = (stop.second -
start.second) / (stop.first -
start.first);
189 for (uint32_t i =
start.first; i <= stop.first; i++)
191 double val =
start.second + slope * (i -
start.first);
192 vect.push_back (std::make_pair (i, val));
195 NS_ASSERT (vect.back ().first == stop.first
203 double currentPowerDbr = 0.0;
204 double maxPowerW = (*m_actualSpectrum)[0];
207 maxPowerW =
std::max (maxPowerW, *vit);
213 currentPowerDbr = 10.0 * std::log10 ((*
m_actualSpectrum)[it->first] / maxPowerW);
214 NS_LOG_LOGIC (
"For " << it->first <<
", expected: " << it->second <<
" vs obtained: " << currentPowerDbr);
216 "Spectrum value mismatch for left guard band (" << it->first <<
")");
221 currentPowerDbr = 10.0 * std::log10 ((*
m_actualSpectrum)[it->first] / maxPowerW);
222 NS_LOG_LOGIC (
"For " << it->first <<
", expected: " << it->second <<
" vs obtained: " << currentPowerDbr);
224 "Spectrum value mismatch for right guard band (" << it->first <<
")");
251 NS_LOG_INFO (
"Creating WifiTransmitMaskTestSuite");
260 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
261 maskSlopesLeft.push_back (std::make_pair (31, -28.375));
262 maskSlopesLeft.push_back (std::make_pair (32, -28.000));
263 maskSlopesLeft.push_back (std::make_pair (60, -20.276));
264 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
265 maskSlopesLeft.push_back (std::make_pair (63, -20.0));
266 maskSlopesLeft.push_back (std::make_pair (64, -20.0));
267 maskSlopesLeft.push_back (std::make_pair (69, -3.333));
268 maskSlopesRight.push_back (std::make_pair (123, -3.333));
269 maskSlopesRight.push_back (std::make_pair (128, -20.0));
270 maskSlopesRight.push_back (std::make_pair (129, -20.0));
271 maskSlopesRight.push_back (std::make_pair (131, -20.0));
272 maskSlopesRight.push_back (std::make_pair (132, -20.276));
273 maskSlopesRight.push_back (std::make_pair (160, -28.000));
274 maskSlopesRight.push_back (std::make_pair (161, -28.375));
275 maskSlopesRight.push_back (std::make_pair (192, -40.0));
277 5, maskSlopesLeft, maskSlopesRight, tol),
282 maskSlopesLeft.clear ();
283 maskSlopesRight.clear ();
284 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
285 maskSlopesLeft.push_back (std::make_pair (31, -28.375));
286 maskSlopesLeft.push_back (std::make_pair (32, -28.000));
287 maskSlopesLeft.push_back (std::make_pair (60, -20.276));
288 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
289 maskSlopesLeft.push_back (std::make_pair (63, -20.0));
290 maskSlopesLeft.push_back (std::make_pair (64, -20.0));
291 maskSlopesLeft.push_back (std::make_pair (69, -3.333));
292 maskSlopesRight.push_back (std::make_pair (123, -3.333));
293 maskSlopesRight.push_back (std::make_pair (128, -20.0));
294 maskSlopesRight.push_back (std::make_pair (129, -20.0));
295 maskSlopesRight.push_back (std::make_pair (131, -20.0));
296 maskSlopesRight.push_back (std::make_pair (132, -20.276));
297 maskSlopesRight.push_back (std::make_pair (160, -28.000));
298 maskSlopesRight.push_back (std::make_pair (161, -28.375));
299 maskSlopesRight.push_back (std::make_pair (192, -40.0));
301 10, maskSlopesLeft, maskSlopesRight, tol),
308 maskSlopesLeft.clear ();
309 maskSlopesRight.clear ();
310 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
311 maskSlopesLeft.push_back (std::make_pair (31, -28.375));
312 maskSlopesLeft.push_back (std::make_pair (32, -28.000));
313 maskSlopesLeft.push_back (std::make_pair (60, -20.276));
314 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
315 maskSlopesLeft.push_back (std::make_pair (63, -20.0));
316 maskSlopesLeft.push_back (std::make_pair (64, -20.0));
317 maskSlopesLeft.push_back (std::make_pair (69, -3.333));
318 maskSlopesRight.push_back (std::make_pair (123, -3.333));
319 maskSlopesRight.push_back (std::make_pair (128, -20.0));
320 maskSlopesRight.push_back (std::make_pair (129, -20.0));
321 maskSlopesRight.push_back (std::make_pair (131, -20.0));
322 maskSlopesRight.push_back (std::make_pair (132, -20.276));
323 maskSlopesRight.push_back (std::make_pair (160, -28.000));
324 maskSlopesRight.push_back (std::make_pair (161, -28.375));
325 maskSlopesRight.push_back (std::make_pair (192, -40.0));
327 20, maskSlopesLeft, maskSlopesRight, tol),
334 20, maskSlopesLeft, maskSlopesRight, tol),
341 20, maskSlopesLeft, maskSlopesRight, tol),
348 maskSlopesLeft.clear ();
349 maskSlopesRight.clear ();
350 maskSlopesLeft.push_back (std::make_pair (0, -45.000));
351 maskSlopesLeft.push_back (std::make_pair (31, -28.531));
352 maskSlopesLeft.push_back (std::make_pair (32, -28.000));
353 maskSlopesLeft.push_back (std::make_pair (60, -20.276));
354 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
355 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
356 maskSlopesLeft.push_back (std::make_pair (62, -20.0));
357 maskSlopesLeft.push_back (std::make_pair (67, -3.333));
358 maskSlopesRight.push_back (std::make_pair (125, -3.333));
359 maskSlopesRight.push_back (std::make_pair (130, -20.0));
360 maskSlopesRight.push_back (std::make_pair (131, -20.0));
361 maskSlopesRight.push_back (std::make_pair (131, -20.0));
362 maskSlopesRight.push_back (std::make_pair (132, -20.276));
363 maskSlopesRight.push_back (std::make_pair (160, -28.000));
364 maskSlopesRight.push_back (std::make_pair (161, -28.531));
365 maskSlopesRight.push_back (std::make_pair (192, -45.000));
367 20, maskSlopesLeft, maskSlopesRight, tol),
372 maskSlopesLeft.clear ();
373 maskSlopesRight.clear ();
374 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
375 maskSlopesLeft.push_back (std::make_pair (31, -28.375));
376 maskSlopesLeft.push_back (std::make_pair (32, -28.000));
377 maskSlopesLeft.push_back (std::make_pair (60, -20.276));
378 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
379 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
380 maskSlopesLeft.push_back (std::make_pair (62, -20.0));
381 maskSlopesLeft.push_back (std::make_pair (67, -3.333));
382 maskSlopesRight.push_back (std::make_pair (125, -3.333));
383 maskSlopesRight.push_back (std::make_pair (130, -20.0));
384 maskSlopesRight.push_back (std::make_pair (131, -20.0));
385 maskSlopesRight.push_back (std::make_pair (131, -20.0));
386 maskSlopesRight.push_back (std::make_pair (132, -20.276));
387 maskSlopesRight.push_back (std::make_pair (160, -28.000));
388 maskSlopesRight.push_back (std::make_pair (161, -28.375));
389 maskSlopesRight.push_back (std::make_pair (192, -40.0));
391 20, maskSlopesLeft, maskSlopesRight, tol),
396 maskSlopesLeft.clear ();
397 maskSlopesRight.clear ();
398 maskSlopesLeft.push_back (std::make_pair (0, -45.000));
399 maskSlopesLeft.push_back (std::make_pair (63, -28.266));
400 maskSlopesLeft.push_back (std::make_pair (64, -28.000));
401 maskSlopesLeft.push_back (std::make_pair (124, -20.131));
402 maskSlopesLeft.push_back (std::make_pair (125, -20.0));
403 maskSlopesLeft.push_back (std::make_pair (125, -20.0));
404 maskSlopesLeft.push_back (std::make_pair (126, -20.0));
405 maskSlopesLeft.push_back (std::make_pair (131, -3.333));
406 maskSlopesRight.push_back (std::make_pair (253, -3.333));
407 maskSlopesRight.push_back (std::make_pair (258, -20.0));
408 maskSlopesRight.push_back (std::make_pair (259, -20.0));
409 maskSlopesRight.push_back (std::make_pair (259, -20.0));
410 maskSlopesRight.push_back (std::make_pair (260, -20.131));
411 maskSlopesRight.push_back (std::make_pair (320, -28.000));
412 maskSlopesRight.push_back (std::make_pair (321, -28.266));
413 maskSlopesRight.push_back (std::make_pair (384, -45.000));
415 40, maskSlopesLeft, maskSlopesRight, tol),
420 maskSlopesLeft.clear ();
421 maskSlopesRight.clear ();
422 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
423 maskSlopesLeft.push_back (std::make_pair (63, -28.188));
424 maskSlopesLeft.push_back (std::make_pair (64, -28.000));
425 maskSlopesLeft.push_back (std::make_pair (124, -20.131));
426 maskSlopesLeft.push_back (std::make_pair (125, -20.0));
427 maskSlopesLeft.push_back (std::make_pair (125, -20.0));
428 maskSlopesLeft.push_back (std::make_pair (126, -20.0));
429 maskSlopesLeft.push_back (std::make_pair (131, -3.333));
430 maskSlopesRight.push_back (std::make_pair (253, -3.333));
431 maskSlopesRight.push_back (std::make_pair (258, -20.0));
432 maskSlopesRight.push_back (std::make_pair (259, -20.0));
433 maskSlopesRight.push_back (std::make_pair (259, -20.0));
434 maskSlopesRight.push_back (std::make_pair (260, -20.131));
435 maskSlopesRight.push_back (std::make_pair (320, -28.000));
436 maskSlopesRight.push_back (std::make_pair (321, -28.188));
437 maskSlopesRight.push_back (std::make_pair (384, -40.0));
439 40, maskSlopesLeft, maskSlopesRight, tol),
446 maskSlopesLeft.clear ();
447 maskSlopesRight.clear ();
448 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
449 maskSlopesLeft.push_back (std::make_pair (31, -28.375));
450 maskSlopesLeft.push_back (std::make_pair (32, -28.000));
451 maskSlopesLeft.push_back (std::make_pair (60, -20.276));
452 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
453 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
454 maskSlopesLeft.push_back (std::make_pair (62, -20.0));
455 maskSlopesLeft.push_back (std::make_pair (67, -3.333));
456 maskSlopesRight.push_back (std::make_pair (125, -3.333));
457 maskSlopesRight.push_back (std::make_pair (130, -20.0));
458 maskSlopesRight.push_back (std::make_pair (131, -20.0));
459 maskSlopesRight.push_back (std::make_pair (131, -20.0));
460 maskSlopesRight.push_back (std::make_pair (132, -20.276));
461 maskSlopesRight.push_back (std::make_pair (160, -28.000));
462 maskSlopesRight.push_back (std::make_pair (161, -28.375));
463 maskSlopesRight.push_back (std::make_pair (192, -40.0));
465 20, maskSlopesLeft, maskSlopesRight, tol),
470 maskSlopesLeft.clear ();
471 maskSlopesRight.clear ();
472 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
473 maskSlopesLeft.push_back (std::make_pair (63, -28.188));
474 maskSlopesLeft.push_back (std::make_pair (64, -28.000));
475 maskSlopesLeft.push_back (std::make_pair (124, -20.131));
476 maskSlopesLeft.push_back (std::make_pair (125, -20.0));
477 maskSlopesLeft.push_back (std::make_pair (125, -20.0));
478 maskSlopesLeft.push_back (std::make_pair (126, -20.0));
479 maskSlopesLeft.push_back (std::make_pair (131, -3.333));
480 maskSlopesRight.push_back (std::make_pair (253, -3.333));
481 maskSlopesRight.push_back (std::make_pair (258, -20.0));
482 maskSlopesRight.push_back (std::make_pair (259, -20.0));
483 maskSlopesRight.push_back (std::make_pair (259, -20.0));
484 maskSlopesRight.push_back (std::make_pair (260, -20.131));
485 maskSlopesRight.push_back (std::make_pair (320, -28.000));
486 maskSlopesRight.push_back (std::make_pair (321, -28.188));
487 maskSlopesRight.push_back (std::make_pair (384, -40.0));
489 40, maskSlopesLeft, maskSlopesRight, tol),
494 maskSlopesLeft.clear ();
495 maskSlopesRight.clear ();
496 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
497 maskSlopesLeft.push_back (std::make_pair (127, -28.094));
498 maskSlopesLeft.push_back (std::make_pair (128, -28.000));
499 maskSlopesLeft.push_back (std::make_pair (252, -20.064));
500 maskSlopesLeft.push_back (std::make_pair (253, -20.0));
501 maskSlopesLeft.push_back (std::make_pair (253, -20.0));
502 maskSlopesLeft.push_back (std::make_pair (254, -20.0));
503 maskSlopesLeft.push_back (std::make_pair (259, -3.333));
504 maskSlopesRight.push_back (std::make_pair (509, -3.333));
505 maskSlopesRight.push_back (std::make_pair (514, -20.0));
506 maskSlopesRight.push_back (std::make_pair (515, -20.0));
507 maskSlopesRight.push_back (std::make_pair (515, -20.0));
508 maskSlopesRight.push_back (std::make_pair (516, -20.064));
509 maskSlopesRight.push_back (std::make_pair (640, -28.000));
510 maskSlopesRight.push_back (std::make_pair (641, -28.094));
511 maskSlopesRight.push_back (std::make_pair (768, -40.0));
513 80, maskSlopesLeft, maskSlopesRight, tol),
518 maskSlopesLeft.clear ();
519 maskSlopesRight.clear ();
520 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
521 maskSlopesLeft.push_back (std::make_pair (255, -28.047));
522 maskSlopesLeft.push_back (std::make_pair (256, -28.000));
523 maskSlopesLeft.push_back (std::make_pair (508, -20.032));
524 maskSlopesLeft.push_back (std::make_pair (509, -20.0));
525 maskSlopesLeft.push_back (std::make_pair (509, -20.0));
526 maskSlopesLeft.push_back (std::make_pair (510, -20.0));
527 maskSlopesLeft.push_back (std::make_pair (515, -3.333));
528 maskSlopesRight.push_back (std::make_pair (1021, -3.333));
529 maskSlopesRight.push_back (std::make_pair (1026, -20.0));
530 maskSlopesRight.push_back (std::make_pair (1027, -20.0));
531 maskSlopesRight.push_back (std::make_pair (1027, -20.0));
532 maskSlopesRight.push_back (std::make_pair (1028, -20.032));
533 maskSlopesRight.push_back (std::make_pair (1280, -28.000));
534 maskSlopesRight.push_back (std::make_pair (1281, -28.047));
535 maskSlopesRight.push_back (std::make_pair (1536, -40.0));
537 160, maskSlopesLeft, maskSlopesRight, tol),
544 maskSlopesLeft.clear ();
545 maskSlopesRight.clear ();
546 maskSlopesLeft.push_back (std::make_pair (0, -45.000));
547 maskSlopesLeft.push_back (std::make_pair (127, -28.133));
548 maskSlopesLeft.push_back (std::make_pair (128, -28.000));
549 maskSlopesLeft.push_back (std::make_pair (252, -20.064));
550 maskSlopesLeft.push_back (std::make_pair (253, -20.0));
551 maskSlopesLeft.push_back (std::make_pair (255, -20.0));
552 maskSlopesLeft.push_back (std::make_pair (256, -20.0));
553 maskSlopesLeft.push_back (std::make_pair (261, -3.333));
554 maskSlopesRight.push_back (std::make_pair (507, -3.333));
555 maskSlopesRight.push_back (std::make_pair (512, -20.0));
556 maskSlopesRight.push_back (std::make_pair (513, -20.0));
557 maskSlopesRight.push_back (std::make_pair (515, -20.0));
558 maskSlopesRight.push_back (std::make_pair (516, -20.064));
559 maskSlopesRight.push_back (std::make_pair (640, -28.000));
560 maskSlopesRight.push_back (std::make_pair (641, -28.133));
561 maskSlopesRight.push_back (std::make_pair (768, -45.000));
563 20, maskSlopesLeft, maskSlopesRight, tol),
568 maskSlopesLeft.clear ();
569 maskSlopesRight.clear ();
570 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
571 maskSlopesLeft.push_back (std::make_pair (127, -28.094));
572 maskSlopesLeft.push_back (std::make_pair (128, -28.000));
573 maskSlopesLeft.push_back (std::make_pair (252, -20.064));
574 maskSlopesLeft.push_back (std::make_pair (253, -20.0));
575 maskSlopesLeft.push_back (std::make_pair (255, -20.0));
576 maskSlopesLeft.push_back (std::make_pair (256, -20.0));
577 maskSlopesLeft.push_back (std::make_pair (261, -3.333));
578 maskSlopesRight.push_back (std::make_pair (507, -3.333));
579 maskSlopesRight.push_back (std::make_pair (512, -20.0));
580 maskSlopesRight.push_back (std::make_pair (513, -20.0));
581 maskSlopesRight.push_back (std::make_pair (515, -20.0));
582 maskSlopesRight.push_back (std::make_pair (516, -20.064));
583 maskSlopesRight.push_back (std::make_pair (640, -28.000));
584 maskSlopesRight.push_back (std::make_pair (641, -28.094));
585 maskSlopesRight.push_back (std::make_pair (768, -40.0));
587 20, maskSlopesLeft, maskSlopesRight, tol),
592 maskSlopesLeft.clear ();
593 maskSlopesRight.clear ();
594 maskSlopesLeft.push_back (std::make_pair (0, -45.000));
595 maskSlopesLeft.push_back (std::make_pair (255, -28.066));
596 maskSlopesLeft.push_back (std::make_pair (256, -28.000));
597 maskSlopesLeft.push_back (std::make_pair (505, -20.032));
598 maskSlopesLeft.push_back (std::make_pair (506, -20.0));
599 maskSlopesLeft.push_back (std::make_pair (510, -20.0));
600 maskSlopesLeft.push_back (std::make_pair (511, -20.0));
601 maskSlopesLeft.push_back (std::make_pair (523, -1.538));
602 maskSlopesRight.push_back (std::make_pair (1013, -1.538));
603 maskSlopesRight.push_back (std::make_pair (1025, -20.0));
604 maskSlopesRight.push_back (std::make_pair (1026, -20.0));
605 maskSlopesRight.push_back (std::make_pair (1030, -20.0));
606 maskSlopesRight.push_back (std::make_pair (1031, -20.032));
607 maskSlopesRight.push_back (std::make_pair (1280, -28.000));
608 maskSlopesRight.push_back (std::make_pair (1281, -28.066));
609 maskSlopesRight.push_back (std::make_pair (1536, -45.000));
611 40, maskSlopesLeft, maskSlopesRight, tol),
616 maskSlopesLeft.clear ();
617 maskSlopesRight.clear ();
618 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
619 maskSlopesLeft.push_back (std::make_pair (255, -28.047));
620 maskSlopesLeft.push_back (std::make_pair (256, -28.000));
621 maskSlopesLeft.push_back (std::make_pair (505, -20.032));
622 maskSlopesLeft.push_back (std::make_pair (506, -20.0));
623 maskSlopesLeft.push_back (std::make_pair (510, -20.0));
624 maskSlopesLeft.push_back (std::make_pair (511, -20.0));
625 maskSlopesLeft.push_back (std::make_pair (523, -1.538));
626 maskSlopesRight.push_back (std::make_pair (1013, -1.538));
627 maskSlopesRight.push_back (std::make_pair (1025, -20.0));
628 maskSlopesRight.push_back (std::make_pair (1026, -20.0));
629 maskSlopesRight.push_back (std::make_pair (1030, -20.0));
630 maskSlopesRight.push_back (std::make_pair (1031, -20.032));
631 maskSlopesRight.push_back (std::make_pair (1280, -28.000));
632 maskSlopesRight.push_back (std::make_pair (1281, -28.047));
633 maskSlopesRight.push_back (std::make_pair (1536, -40.0));
635 40, maskSlopesLeft, maskSlopesRight, tol),
640 maskSlopesLeft.clear ();
641 maskSlopesRight.clear ();
642 maskSlopesLeft.push_back (std::make_pair (0, -45.000));
643 maskSlopesLeft.push_back (std::make_pair (511, -28.033));
644 maskSlopesLeft.push_back (std::make_pair (512, -28.000));
645 maskSlopesLeft.push_back (std::make_pair (1017, -20.016));
646 maskSlopesLeft.push_back (std::make_pair (1018, -20.0));
647 maskSlopesLeft.push_back (std::make_pair (1022, -20.0));
648 maskSlopesLeft.push_back (std::make_pair (1023, -20.0));
649 maskSlopesLeft.push_back (std::make_pair (1035, -1.538));
650 maskSlopesRight.push_back (std::make_pair (2037, -1.538));
651 maskSlopesRight.push_back (std::make_pair (2049, -20.0));
652 maskSlopesRight.push_back (std::make_pair (2050, -20.0));
653 maskSlopesRight.push_back (std::make_pair (2054, -20.0));
654 maskSlopesRight.push_back (std::make_pair (2055, -20.016));
655 maskSlopesRight.push_back (std::make_pair (2560, -28.000));
656 maskSlopesRight.push_back (std::make_pair (2561, -28.033));
657 maskSlopesRight.push_back (std::make_pair (3072, -45.000));
659 80, maskSlopesLeft, maskSlopesRight, tol),
664 maskSlopesLeft.clear ();
665 maskSlopesRight.clear ();
666 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
667 maskSlopesLeft.push_back (std::make_pair (511, -28.023));
668 maskSlopesLeft.push_back (std::make_pair (512, -28.000));
669 maskSlopesLeft.push_back (std::make_pair (1017, -20.016));
670 maskSlopesLeft.push_back (std::make_pair (1018, -20.0));
671 maskSlopesLeft.push_back (std::make_pair (1022, -20.0));
672 maskSlopesLeft.push_back (std::make_pair (1023, -20.0));
673 maskSlopesLeft.push_back (std::make_pair (1035, -1.538));
674 maskSlopesRight.push_back (std::make_pair (2037, -1.538));
675 maskSlopesRight.push_back (std::make_pair (2049, -20.0));
676 maskSlopesRight.push_back (std::make_pair (2050, -20.0));
677 maskSlopesRight.push_back (std::make_pair (2054, -20.0));
678 maskSlopesRight.push_back (std::make_pair (2055, -20.016));
679 maskSlopesRight.push_back (std::make_pair (2560, -28.000));
680 maskSlopesRight.push_back (std::make_pair (2561, -28.023));
681 maskSlopesRight.push_back (std::make_pair (3072, -40.0));
683 80, maskSlopesLeft, maskSlopesRight, tol),
690 maskSlopesLeft.clear ();
691 maskSlopesRight.clear ();
692 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
693 maskSlopesLeft.push_back (std::make_pair (1023, -28.012));
694 maskSlopesLeft.push_back (std::make_pair (1024, -28.000));
695 maskSlopesLeft.push_back (std::make_pair (2041, -20.008));
696 maskSlopesLeft.push_back (std::make_pair (2042, -20.0));
697 maskSlopesLeft.push_back (std::make_pair (2046, -20.0));
698 maskSlopesLeft.push_back (std::make_pair (2047, -20.0));
699 maskSlopesLeft.push_back (std::make_pair (2059, -1.538));
700 maskSlopesRight.push_back (std::make_pair (4085, -1.538));
701 maskSlopesRight.push_back (std::make_pair (4097, -20.0));
702 maskSlopesRight.push_back (std::make_pair (4098, -20.0));
703 maskSlopesRight.push_back (std::make_pair (4102, -20.0));
704 maskSlopesRight.push_back (std::make_pair (4103, -20.008));
705 maskSlopesRight.push_back (std::make_pair (5120, -28.000));
706 maskSlopesRight.push_back (std::make_pair (5121, -28.012));
707 maskSlopesRight.push_back (std::make_pair (6144, -40.0));
709 160, maskSlopesLeft, maskSlopesRight, tol),
ERP-OFDM PHY (Clause 19, Section 19.5)
Ptr< SpectrumValue > m_actualSpectrum
actual spectrum value
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
Test suite for checking the consistency of different OFDM-based transmit masks.
IndexPowerVect m_expectedLeftPsd
expected power values for left guard bandwidth
double m_tolerance
tolerance (in dB)
Test checks if Wifi spectrum values for OFDM are generated properly.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
std::pair< uint32_t, double > IndexPowerPair
typedef for a pair of sub-band index and relative power value (dBr)
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Values::const_iterator ConstValuesBegin() const
static void InterpolateAndAppendValues(IndexPowerVect &vect, IndexPowerPair start, IndexPowerPair stop, double tol)
Interpolate PSD values for indexes between provided start and stop and append to provided vector...
WifiPhyStandard
Identifies the PHY specification that a Wifi device is configured to use.
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
bool TestDoubleIsEqual(const double x1, const double x2, const double epsilon)
Compare two double precision floating point numbers and declare them equal if they are within some ep...
OFDM PHY (Clause 17 - amendment for 10 MHz and 5 MHz channels)
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
#define NS_TEST_EXPECT_MSG_EQ_TOL(actual, limit, tol, msg)
Test that actual and expected (limit) values are equal to plus or minus some tolerance and report if ...
IndexPowerVect m_expectedRightPsd
expected power values for right guard bandwidth
WifiOfdmMaskSlopesTestCase(const char *str, WifiPhyStandard standard, WifiPhyBand band, uint8_t bw, IndexPowerVect maskRefsLeft, IndexPowerVect maskRefsRight, double tol)
Constructor.
This is intended to be the configuration used in this paper: Gavin Holland, Nitin Vaidya and Paramvir...
virtual ~WifiOfdmMaskSlopesTestCase()
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Values::const_iterator ConstValuesEnd() const
WifiTransmitMaskTestSuite()
std::vector< IndexPowerPair > IndexPowerVect
typedef for a vector of pairs of sub-band index and relative power value (dBr)
WifiPhyBand
Identifies the PHY band.
static WifiTransmitMaskTestSuite g_WifiTransmitMaskTestSuite
virtual void DoRun(void)
Implementation to actually run this TestCase.