9#include "ns3/fatal-error.h"
12#include "ns3/wifi-phy-band.h"
13#include "ns3/wifi-phy-common.h"
14#include "ns3/wifi-spectrum-value-helper.h"
15#include "ns3/wifi-standards.h"
63 const std::vector<MHz_u>& centerFrequencies,
72 void DoRun()
override;
101 const std::string& name,
105 const std::vector<MHz_u>& centerFrequencies,
111 m_standard{standard},
113 m_channelWidth{channelWidth},
114 m_centerFreqs{centerFrequencies},
250 NS_LOG_FUNCTION(start.first << start.second << stop.first << stop.second);
253 if (start.first == stop.first)
256 vect.push_back(start);
257 NS_LOG_LOGIC(
"Append (" << start.first <<
", " << stop.second <<
")");
261 const auto slope = (stop.second - start.second) / (stop.first - start.first);
262 for (
uint32_t i = start.first;
i <= stop.first;
i++)
264 const auto delta{
i - start.first};
298 "Spectrum value mismatch for subcarrier " <<
subcarrier);
333 std::make_pair(0,
dBr_u{-40.0}),
334 std::make_pair(31,
dBr_u{-28.375}),
335 std::make_pair(32,
dBr_u{-28.000}),
336 std::make_pair(60,
dBr_u{-20.276}),
337 std::make_pair(61,
dBr_u{-20.0}),
338 std::make_pair(63,
dBr_u{-20.0}),
339 std::make_pair(64,
dBr_u{-20.0}),
340 std::make_pair(69,
dBr_u{-3.333}),
341 std::make_pair(123,
dBr_u{-3.333}),
342 std::make_pair(128,
dBr_u{-20.0}),
343 std::make_pair(129,
dBr_u{-20.0}),
344 std::make_pair(131,
dBr_u{-20.0}),
345 std::make_pair(132,
dBr_u{-20.276}),
346 std::make_pair(160,
dBr_u{-28.000}),
347 std::make_pair(161,
dBr_u{-28.375}),
348 std::make_pair(192,
dBr_u{-40.0}),
359 TestCase::Duration::QUICK);
365 std::make_pair(0,
dBr_u{-40.0}),
366 std::make_pair(31,
dBr_u{-28.375}),
367 std::make_pair(32,
dBr_u{-28.000}),
368 std::make_pair(60,
dBr_u{-20.276}),
369 std::make_pair(61,
dBr_u{-20.0}),
370 std::make_pair(63,
dBr_u{-20.0}),
371 std::make_pair(64,
dBr_u{-20.0}),
372 std::make_pair(69,
dBr_u{-3.333}),
373 std::make_pair(123,
dBr_u{-3.333}),
374 std::make_pair(128,
dBr_u{-20.0}),
375 std::make_pair(129,
dBr_u{-20.0}),
376 std::make_pair(131,
dBr_u{-20.0}),
377 std::make_pair(132,
dBr_u{-20.276}),
378 std::make_pair(160,
dBr_u{-28.000}),
379 std::make_pair(161,
dBr_u{-28.375}),
380 std::make_pair(192,
dBr_u{-40.0}),
391 TestCase::Duration::QUICK);
397 std::make_pair(0,
dBr_u{-40.0}),
398 std::make_pair(31,
dBr_u{-28.375}),
399 std::make_pair(32,
dBr_u{-28.000}),
400 std::make_pair(60,
dBr_u{-20.276}),
401 std::make_pair(61,
dBr_u{-20.0}),
402 std::make_pair(63,
dBr_u{-20.0}),
403 std::make_pair(64,
dBr_u{-20.0}),
404 std::make_pair(69,
dBr_u{-3.333}),
405 std::make_pair(123,
dBr_u{-3.333}),
406 std::make_pair(128,
dBr_u{-20.0}),
407 std::make_pair(129,
dBr_u{-20.0}),
408 std::make_pair(131,
dBr_u{-20.0}),
409 std::make_pair(132,
dBr_u{-20.276}),
410 std::make_pair(160,
dBr_u{-28.000}),
411 std::make_pair(161,
dBr_u{-28.375}),
412 std::make_pair(192,
dBr_u{-40.0}),
423 TestCase::Duration::QUICK);
437 TestCase::Duration::QUICK);
443 std::make_pair(0,
dBr_u{-45.000}),
444 std::make_pair(31,
dBr_u{-28.531}),
445 std::make_pair(32,
dBr_u{-28.000}),
446 std::make_pair(60,
dBr_u{-20.276}),
447 std::make_pair(61,
dBr_u{-20.0}),
448 std::make_pair(61,
dBr_u{-20.0}),
449 std::make_pair(62,
dBr_u{-20.0}),
450 std::make_pair(67,
dBr_u{-3.333}),
451 std::make_pair(125,
dBr_u{-3.333}),
452 std::make_pair(130,
dBr_u{-20.0}),
453 std::make_pair(131,
dBr_u{-20.0}),
454 std::make_pair(131,
dBr_u{-20.0}),
455 std::make_pair(132,
dBr_u{-20.276}),
456 std::make_pair(160,
dBr_u{-28.000}),
457 std::make_pair(161,
dBr_u{-28.531}),
458 std::make_pair(192,
dBr_u{-45.000}),
469 TestCase::Duration::QUICK);
475 std::make_pair(0,
dBr_u{-40.0}),
476 std::make_pair(31,
dBr_u{-28.375}),
477 std::make_pair(32,
dBr_u{-28.000}),
478 std::make_pair(60,
dBr_u{-20.276}),
479 std::make_pair(61,
dBr_u{-20.0}),
480 std::make_pair(61,
dBr_u{-20.0}),
481 std::make_pair(62,
dBr_u{-20.0}),
482 std::make_pair(67,
dBr_u{-3.333}),
483 std::make_pair(125,
dBr_u{-3.333}),
484 std::make_pair(130,
dBr_u{-20.0}),
485 std::make_pair(131,
dBr_u{-20.0}),
486 std::make_pair(131,
dBr_u{-20.0}),
487 std::make_pair(132,
dBr_u{-20.276}),
488 std::make_pair(160,
dBr_u{-28.000}),
489 std::make_pair(161,
dBr_u{-28.375}),
490 std::make_pair(192,
dBr_u{-40.0}),
501 TestCase::Duration::QUICK);
507 std::make_pair(0,
dBr_u{-45.000}),
508 std::make_pair(63,
dBr_u{-28.266}),
509 std::make_pair(64,
dBr_u{-28.000}),
510 std::make_pair(124,
dBr_u{-20.131}),
511 std::make_pair(125,
dBr_u{-20.0}),
512 std::make_pair(125,
dBr_u{-20.0}),
513 std::make_pair(126,
dBr_u{-20.0}),
514 std::make_pair(131,
dBr_u{-3.333}),
515 std::make_pair(253,
dBr_u{-3.333}),
516 std::make_pair(258,
dBr_u{-20.0}),
517 std::make_pair(259,
dBr_u{-20.0}),
518 std::make_pair(259,
dBr_u{-20.0}),
519 std::make_pair(260,
dBr_u{-20.131}),
520 std::make_pair(320,
dBr_u{-28.000}),
521 std::make_pair(321,
dBr_u{-28.266}),
522 std::make_pair(384,
dBr_u{-45.000}),
533 TestCase::Duration::QUICK);
539 std::make_pair(0,
dBr_u{-40.0}),
540 std::make_pair(63,
dBr_u{-28.188}),
541 std::make_pair(64,
dBr_u{-28.000}),
542 std::make_pair(124,
dBr_u{-20.131}),
543 std::make_pair(125,
dBr_u{-20.0}),
544 std::make_pair(125,
dBr_u{-20.0}),
545 std::make_pair(126,
dBr_u{-20.0}),
546 std::make_pair(131,
dBr_u{-3.333}),
547 std::make_pair(253,
dBr_u{-3.333}),
548 std::make_pair(258,
dBr_u{-20.0}),
549 std::make_pair(259,
dBr_u{-20.0}),
550 std::make_pair(259,
dBr_u{-20.0}),
551 std::make_pair(260,
dBr_u{-20.131}),
552 std::make_pair(320,
dBr_u{-28.000}),
553 std::make_pair(321,
dBr_u{-28.188}),
554 std::make_pair(384,
dBr_u{-40.0}),
565 TestCase::Duration::QUICK);
571 std::make_pair(0,
dBr_u{-40.0}),
572 std::make_pair(31,
dBr_u{-28.375}),
573 std::make_pair(32,
dBr_u{-28.000}),
574 std::make_pair(60,
dBr_u{-20.276}),
575 std::make_pair(61,
dBr_u{-20.0}),
576 std::make_pair(61,
dBr_u{-20.0}),
577 std::make_pair(62,
dBr_u{-20.0}),
578 std::make_pair(67,
dBr_u{-3.333}),
579 std::make_pair(125,
dBr_u{-3.333}),
580 std::make_pair(130,
dBr_u{-20.0}),
581 std::make_pair(131,
dBr_u{-20.0}),
582 std::make_pair(131,
dBr_u{-20.0}),
583 std::make_pair(132,
dBr_u{-20.276}),
584 std::make_pair(160,
dBr_u{-28.000}),
585 std::make_pair(161,
dBr_u{-28.375}),
586 std::make_pair(192,
dBr_u{-40.0}),
597 TestCase::Duration::QUICK);
603 std::make_pair(0,
dBr_u{-40.0}),
604 std::make_pair(63,
dBr_u{-28.188}),
605 std::make_pair(64,
dBr_u{-28.000}),
606 std::make_pair(124,
dBr_u{-20.131}),
607 std::make_pair(125,
dBr_u{-20.0}),
608 std::make_pair(125,
dBr_u{-20.0}),
609 std::make_pair(126,
dBr_u{-20.0}),
610 std::make_pair(131,
dBr_u{-3.333}),
611 std::make_pair(253,
dBr_u{-3.333}),
612 std::make_pair(258,
dBr_u{-20.0}),
613 std::make_pair(259,
dBr_u{-20.0}),
614 std::make_pair(259,
dBr_u{-20.0}),
615 std::make_pair(260,
dBr_u{-20.131}),
616 std::make_pair(320,
dBr_u{-28.000}),
617 std::make_pair(321,
dBr_u{-28.188}),
618 std::make_pair(384,
dBr_u{-40.0}),
629 TestCase::Duration::QUICK);
635 std::make_pair(0,
dBr_u{-40.0}),
636 std::make_pair(127,
dBr_u{-28.094}),
637 std::make_pair(128,
dBr_u{-28.000}),
638 std::make_pair(252,
dBr_u{-20.064}),
639 std::make_pair(253,
dBr_u{-20.0}),
640 std::make_pair(253,
dBr_u{-20.0}),
641 std::make_pair(254,
dBr_u{-20.0}),
642 std::make_pair(259,
dBr_u{-3.333}),
643 std::make_pair(509,
dBr_u{-3.333}),
644 std::make_pair(514,
dBr_u{-20.0}),
645 std::make_pair(515,
dBr_u{-20.0}),
646 std::make_pair(515,
dBr_u{-20.0}),
647 std::make_pair(516,
dBr_u{-20.064}),
648 std::make_pair(640,
dBr_u{-28.000}),
649 std::make_pair(641,
dBr_u{-28.094}),
650 std::make_pair(768,
dBr_u{-40.0}),
661 TestCase::Duration::QUICK);
667 std::make_pair(0,
dBr_u{-40.0}),
668 std::make_pair(255,
dBr_u{-28.047}),
669 std::make_pair(256,
dBr_u{-28.000}),
670 std::make_pair(508,
dBr_u{-20.032}),
671 std::make_pair(509,
dBr_u{-20.0}),
672 std::make_pair(509,
dBr_u{-20.0}),
673 std::make_pair(510,
dBr_u{-20.0}),
674 std::make_pair(515,
dBr_u{-3.333}),
675 std::make_pair(1021,
dBr_u{-3.333}),
676 std::make_pair(1026,
dBr_u{-20.0}),
677 std::make_pair(1027,
dBr_u{-20.0}),
678 std::make_pair(1027,
dBr_u{-20.0}),
679 std::make_pair(1028,
dBr_u{-20.032}),
680 std::make_pair(1280,
dBr_u{-28.000}),
681 std::make_pair(1281,
dBr_u{-28.047}),
682 std::make_pair(1536,
dBr_u{-40.0}),
693 TestCase::Duration::QUICK);
699 std::make_pair(0,
dBr_u{-40.0}),
700 std::make_pair(127,
dBr_u{-28.094}),
701 std::make_pair(128,
dBr_u{-28.000}),
702 std::make_pair(252,
dBr_u{-20.064}),
703 std::make_pair(253,
dBr_u{-20.0}),
704 std::make_pair(253,
dBr_u{-20.0}),
705 std::make_pair(254,
dBr_u{-20.0}),
706 std::make_pair(259,
dBr_u{-3.333}),
707 std::make_pair(509,
dBr_u{-3.333}),
708 std::make_pair(514,
dBr_u{-20.0}),
709 std::make_pair(515,
dBr_u{-20.0}),
710 std::make_pair(515,
dBr_u{-20.0}),
711 std::make_pair(516,
dBr_u{-20.01}),
713 std::make_pair(516,
dBr_u{-20.01}),
715 std::make_pair(639,
dBr_u{-24.99}),
717 std::make_pair(639,
dBr_u{-24.99}),
719 std::make_pair(640,
dBr_u{-25.0}),
721 std::make_pair(640,
dBr_u{-25.0}),
723 std::make_pair(641,
dBr_u{-24.99}),
725 std::make_pair(641,
dBr_u{-24.99}),
727 std::make_pair(764,
dBr_u{-20.01}),
729 std::make_pair(764,
dBr_u{-20.01}),
731 std::make_pair(765,
dBr_u{-20.0}),
732 std::make_pair(765,
dBr_u{-20.0}),
733 std::make_pair(766,
dBr_u{-20.0}),
734 std::make_pair(771,
dBr_u{-3.333}),
735 std::make_pair(1021,
dBr_u{-3.333}),
736 std::make_pair(1026,
dBr_u{-20.0}),
737 std::make_pair(1027,
dBr_u{-20.0}),
738 std::make_pair(1027,
dBr_u{-20.0}),
739 std::make_pair(1028,
dBr_u{-20.016}),
740 std::make_pair(1152,
dBr_u{-28.000}),
741 std::make_pair(1153,
dBr_u{-28.023}),
742 std::make_pair(1280,
dBr_u{-40.0}),
753 TestCase::Duration::QUICK);
759 std::make_pair(0,
dBr_u{-45.000}),
760 std::make_pair(127,
dBr_u{-28.133}),
761 std::make_pair(128,
dBr_u{-28.000}),
762 std::make_pair(252,
dBr_u{-20.064}),
763 std::make_pair(253,
dBr_u{-20.0}),
764 std::make_pair(255,
dBr_u{-20.0}),
765 std::make_pair(256,
dBr_u{-20.0}),
766 std::make_pair(261,
dBr_u{-3.333}),
767 std::make_pair(262,
dBr_u{0.0}),
768 std::make_pair(382,
dBr_u{0.0}),
769 std::make_pair(383,
dBr_u{-20.0}),
770 std::make_pair(385,
dBr_u{-20.0}),
771 std::make_pair(386,
dBr_u{0.0}),
772 std::make_pair(506,
dBr_u{0.0}),
773 std::make_pair(507,
dBr_u{-3.333}),
774 std::make_pair(512,
dBr_u{-20.0}),
775 std::make_pair(513,
dBr_u{-20.0}),
776 std::make_pair(515,
dBr_u{-20.0}),
777 std::make_pair(516,
dBr_u{-20.064}),
778 std::make_pair(640,
dBr_u{-28.000}),
779 std::make_pair(641,
dBr_u{-28.133}),
780 std::make_pair(768,
dBr_u{-45.000}),
791 TestCase::Duration::QUICK);
797 std::make_pair(0,
dBr_u{-40.0}),
798 std::make_pair(127,
dBr_u{-28.094}),
799 std::make_pair(128,
dBr_u{-28.000}),
800 std::make_pair(252,
dBr_u{-20.064}),
801 std::make_pair(253,
dBr_u{-20.0}),
802 std::make_pair(255,
dBr_u{-20.0}),
803 std::make_pair(256,
dBr_u{-20.0}),
804 std::make_pair(261,
dBr_u{-3.333}),
805 std::make_pair(262,
dBr_u{0.0}),
806 std::make_pair(382,
dBr_u{0.0}),
807 std::make_pair(383,
dBr_u{-20.0}),
808 std::make_pair(385,
dBr_u{-20.0}),
809 std::make_pair(386,
dBr_u{0.0}),
810 std::make_pair(506,
dBr_u{0.0}),
811 std::make_pair(507,
dBr_u{-3.333}),
812 std::make_pair(512,
dBr_u{-20.0}),
813 std::make_pair(513,
dBr_u{-20.0}),
814 std::make_pair(515,
dBr_u{-20.0}),
815 std::make_pair(516,
dBr_u{-20.064}),
816 std::make_pair(640,
dBr_u{-28.000}),
817 std::make_pair(641,
dBr_u{-28.094}),
818 std::make_pair(768,
dBr_u{-40.0}),
829 TestCase::Duration::QUICK);
835 std::make_pair(0,
dBr_u{-45.000}),
836 std::make_pair(255,
dBr_u{-28.066}),
837 std::make_pair(256,
dBr_u{-28.000}),
838 std::make_pair(505,
dBr_u{-20.032}),
839 std::make_pair(506,
dBr_u{-20.0}),
840 std::make_pair(510,
dBr_u{-20.0}),
841 std::make_pair(511,
dBr_u{-20.0}),
842 std::make_pair(523,
dBr_u{-1.538}),
843 std::make_pair(524,
dBr_u{0.0}),
844 std::make_pair(765,
dBr_u{0.0}),
845 std::make_pair(766,
dBr_u{-20.0}),
846 std::make_pair(770,
dBr_u{-20.0}),
847 std::make_pair(771,
dBr_u{0.0}),
848 std::make_pair(1012,
dBr_u{0.0}),
849 std::make_pair(1013,
dBr_u{-1.538}),
850 std::make_pair(1025,
dBr_u{-20.0}),
851 std::make_pair(1026,
dBr_u{-20.0}),
852 std::make_pair(1030,
dBr_u{-20.0}),
853 std::make_pair(1031,
dBr_u{-20.032}),
854 std::make_pair(1280,
dBr_u{-28.000}),
855 std::make_pair(1281,
dBr_u{-28.066}),
856 std::make_pair(1536,
dBr_u{-45.000}),
867 TestCase::Duration::QUICK);
873 std::make_pair(0,
dBr_u{-40.0}),
874 std::make_pair(255,
dBr_u{-28.047}),
875 std::make_pair(256,
dBr_u{-28.000}),
876 std::make_pair(505,
dBr_u{-20.032}),
877 std::make_pair(506,
dBr_u{-20.0}),
878 std::make_pair(510,
dBr_u{-20.0}),
879 std::make_pair(511,
dBr_u{-20.0}),
880 std::make_pair(523,
dBr_u{-1.538}),
881 std::make_pair(524,
dBr_u{0.0}),
882 std::make_pair(765,
dBr_u{0.0}),
883 std::make_pair(766,
dBr_u{-20.0}),
884 std::make_pair(770,
dBr_u{-20.0}),
885 std::make_pair(771,
dBr_u{0.0}),
886 std::make_pair(1012,
dBr_u{0.0}),
887 std::make_pair(1013,
dBr_u{-1.538}),
888 std::make_pair(1025,
dBr_u{-20.0}),
889 std::make_pair(1026,
dBr_u{-20.0}),
890 std::make_pair(1030,
dBr_u{-20.0}),
891 std::make_pair(1031,
dBr_u{-20.032}),
892 std::make_pair(1280,
dBr_u{-28.000}),
893 std::make_pair(1281,
dBr_u{-28.047}),
894 std::make_pair(1536,
dBr_u{-40.0}),
905 TestCase::Duration::QUICK);
911 std::make_pair(0,
dBr_u{-40.0}),
912 std::make_pair(511,
dBr_u{-28.023}),
913 std::make_pair(512,
dBr_u{-28.000}),
914 std::make_pair(1017,
dBr_u{-20.016}),
915 std::make_pair(1018,
dBr_u{-20.0}),
916 std::make_pair(1022,
dBr_u{-20.0}),
917 std::make_pair(1023,
dBr_u{-20.0}),
918 std::make_pair(1035,
dBr_u{-1.538}),
919 std::make_pair(1036,
dBr_u{0.0}),
920 std::make_pair(1533,
dBr_u{0.0}),
921 std::make_pair(1534,
dBr_u{-20.0}),
922 std::make_pair(1538,
dBr_u{-20.0}),
923 std::make_pair(1539,
dBr_u{0.0}),
924 std::make_pair(2036,
dBr_u{0.0}),
925 std::make_pair(2037,
dBr_u{-1.538}),
926 std::make_pair(2049,
dBr_u{-20.0}),
927 std::make_pair(2050,
dBr_u{-20.0}),
928 std::make_pair(2054,
dBr_u{-20.0}),
929 std::make_pair(2055,
dBr_u{-20.016}),
930 std::make_pair(2560,
dBr_u{-28.000}),
931 std::make_pair(2561,
dBr_u{-28.023}),
932 std::make_pair(3072,
dBr_u{-40.0}),
943 TestCase::Duration::QUICK);
949 std::make_pair(0,
dBr_u{-40.0}),
950 std::make_pair(1023,
dBr_u{-28.012}),
951 std::make_pair(1024,
dBr_u{-28.000}),
952 std::make_pair(2041,
dBr_u{-20.008}),
953 std::make_pair(2042,
dBr_u{-20.0}),
954 std::make_pair(2046,
dBr_u{-20.0}),
955 std::make_pair(2047,
dBr_u{-20.0}),
956 std::make_pair(2059,
dBr_u{-1.538}),
957 std::make_pair(2060,
dBr_u{0.0}),
958 std::make_pair(2557,
dBr_u{0.0}),
959 std::make_pair(2558,
dBr_u{-20.0}),
960 std::make_pair(2562,
dBr_u{-20.0}),
961 std::make_pair(2563,
dBr_u{0.0}),
962 std::make_pair(3060,
dBr_u{0.0}),
963 std::make_pair(3061,
dBr_u{-20.0}),
964 std::make_pair(3083,
dBr_u{-20.0}),
965 std::make_pair(3084,
dBr_u{0.0}),
966 std::make_pair(3581,
dBr_u{0.0}),
967 std::make_pair(3582,
dBr_u{-20.0}),
968 std::make_pair(3586,
dBr_u{-20.0}),
969 std::make_pair(3587,
dBr_u{0.0}),
970 std::make_pair(4084,
dBr_u{0.0}),
971 std::make_pair(4085,
dBr_u{-1.538}),
972 std::make_pair(4097,
dBr_u{-20.0}),
973 std::make_pair(4098,
dBr_u{-20.0}),
974 std::make_pair(4102,
dBr_u{-20.0}),
975 std::make_pair(4103,
dBr_u{-20.008}),
976 std::make_pair(5120,
dBr_u{-28.000}),
977 std::make_pair(5121,
dBr_u{-28.012}),
978 std::make_pair(6144,
dBr_u{-40.0}),
989 TestCase::Duration::QUICK);
995 std::make_pair(0,
dBr_u{-40.0}),
996 std::make_pair(511,
dBr_u{-28.023}),
997 std::make_pair(512,
dBr_u{-28.000}),
998 std::make_pair(1017,
dBr_u{-20.016}),
999 std::make_pair(1018,
dBr_u{-20.0}),
1000 std::make_pair(1022,
dBr_u{-20.0}),
1001 std::make_pair(1023,
dBr_u{-20.0}),
1002 std::make_pair(1035,
dBr_u{-1.538}),
1003 std::make_pair(1036,
dBr_u{0.0}),
1004 std::make_pair(1533,
dBr_u{0.0}),
1005 std::make_pair(1534,
dBr_u{-20.0}),
1006 std::make_pair(1538,
dBr_u{-20.0}),
1007 std::make_pair(1539,
dBr_u{0.0}),
1008 std::make_pair(2036,
dBr_u{0.0}),
1009 std::make_pair(2037,
dBr_u{-1.538}),
1010 std::make_pair(2049,
dBr_u{-20.0}),
1011 std::make_pair(2050,
dBr_u{-20.0}),
1012 std::make_pair(2054,
dBr_u{-20.0}),
1013 std::make_pair(2055,
dBr_u{-20.01}),
1015 std::make_pair(2055,
dBr_u{-20.01}),
1017 std::make_pair(2559,
dBr_u{-24.99}),
1019 std::make_pair(2559,
dBr_u{-24.99}),
1021 std::make_pair(2560,
dBr_u{-25.0}),
1023 std::make_pair(2560,
dBr_u{-25.0}),
1025 std::make_pair(2561,
dBr_u{-24.99}),
1027 std::make_pair(2561,
dBr_u{-24.99}),
1029 std::make_pair(3065,
dBr_u{-20.01}),
1031 std::make_pair(3065,
dBr_u{-20.01}),
1033 std::make_pair(3066,
dBr_u{-20.0}),
1034 std::make_pair(3070,
dBr_u{-20.0}),
1035 std::make_pair(3071,
dBr_u{-20.0}),
1036 std::make_pair(3083,
dBr_u{-1.538}),
1037 std::make_pair(3084,
dBr_u{0.0}),
1038 std::make_pair(3581,
dBr_u{0.0}),
1039 std::make_pair(3582,
dBr_u{-20.0}),
1040 std::make_pair(3586,
dBr_u{-20.0}),
1041 std::make_pair(3587,
dBr_u{0.0}),
1042 std::make_pair(4084,
dBr_u{0.0}),
1043 std::make_pair(4085,
dBr_u{-1.538}),
1044 std::make_pair(4097,
dBr_u{-20.0}),
1045 std::make_pair(4098,
dBr_u{-20.0}),
1046 std::make_pair(4102,
dBr_u{-20.0}),
1047 std::make_pair(4103,
dBr_u{-20.016}),
1048 std::make_pair(4608,
dBr_u{-28.000}),
1049 std::make_pair(4609,
dBr_u{-28.023}),
1050 std::make_pair(5120,
dBr_u{-40.0}),
1061 TestCase::Duration::QUICK);
1065 NS_LOG_FUNCTION(
"Check slopes for 11ax 80+80MHz @ 5GHz with larger frequency separation "
1066 "between the two PSDs");
1068 std::make_pair(0,
dBr_u{-40.0}),
1069 std::make_pair(511,
dBr_u{-28.023}),
1070 std::make_pair(512,
dBr_u{-28.000}),
1071 std::make_pair(1017,
dBr_u{-20.016}),
1072 std::make_pair(1018,
dBr_u{-20.0}),
1073 std::make_pair(1022,
dBr_u{-20.0}),
1074 std::make_pair(1023,
dBr_u{-20.0}),
1075 std::make_pair(1035,
dBr_u{-1.538}),
1076 std::make_pair(1036,
dBr_u{0.0}),
1077 std::make_pair(1533,
dBr_u{0.0}),
1078 std::make_pair(1534,
dBr_u{-20.0}),
1079 std::make_pair(1538,
dBr_u{-20.0}),
1080 std::make_pair(1539,
dBr_u{0.0}),
1081 std::make_pair(2036,
dBr_u{0.0}),
1082 std::make_pair(2037,
dBr_u{-1.538}),
1083 std::make_pair(2049,
dBr_u{-20.0}),
1084 std::make_pair(2050,
dBr_u{-20.0}),
1085 std::make_pair(2054,
dBr_u{-20.0}),
1086 std::make_pair(2055,
dBr_u{-20.01}),
1088 std::make_pair(2055,
dBr_u{-20.01}),
1090 std::make_pair(3583,
dBr_u{-24.99}),
1092 std::make_pair(3583,
dBr_u{-24.99}),
1094 std::make_pair(3584,
dBr_u{-25.0}),
1096 std::make_pair(3584,
dBr_u{-25.0}),
1098 std::make_pair(3585,
dBr_u{-24.99}),
1100 std::make_pair(3585,
dBr_u{-24.99}),
1102 std::make_pair(5113,
dBr_u{-20.01}),
1104 std::make_pair(5113,
dBr_u{-20.01}),
1106 std::make_pair(5114,
dBr_u{-20.0}),
1107 std::make_pair(5118,
dBr_u{-20.0}),
1108 std::make_pair(5119,
dBr_u{-20.0}),
1109 std::make_pair(5131,
dBr_u{-1.538}),
1110 std::make_pair(5132,
dBr_u{0.0}),
1111 std::make_pair(5629,
dBr_u{0.0}),
1112 std::make_pair(5630,
dBr_u{-20.0}),
1113 std::make_pair(5634,
dBr_u{-20.0}),
1114 std::make_pair(5635,
dBr_u{0.0}),
1115 std::make_pair(6132,
dBr_u{0.0}),
1116 std::make_pair(6133,
dBr_u{-1.538}),
1117 std::make_pair(6145,
dBr_u{-20.0}),
1118 std::make_pair(6146,
dBr_u{-20.0}),
1119 std::make_pair(6150,
dBr_u{-20.0}),
1120 std::make_pair(6151,
dBr_u{-20.016}),
1121 std::make_pair(6656,
dBr_u{-28.000}),
1122 std::make_pair(6657,
dBr_u{-28.023}),
1123 std::make_pair(7168,
dBr_u{-40.0}),
1134 TestCase::Duration::QUICK);
1138 NS_LOG_FUNCTION(
"Check slopes for 11ax 80MHz @ 5GHz with first 20 MHz subchannel punctured");
1140 std::make_pair(0,
dBr_u{-40.0}),
1141 std::make_pair(511,
dBr_u{-28.023}),
1142 std::make_pair(512,
dBr_u{-28.000}),
1143 std::make_pair(1017,
dBr_u{-20.016}),
1144 std::make_pair(1018,
dBr_u{-20.0}),
1145 std::make_pair(1022,
dBr_u{-20.0}),
1146 std::make_pair(1023,
dBr_u{-20.0}),
1147 std::make_pair(1272,
dBr_u{-20.0}),
1148 std::make_pair(1273,
dBr_u{-20.0}),
1149 std::make_pair(1279,
dBr_u{0.0}),
1150 std::make_pair(1280,
dBr_u{0.0}),
1151 std::make_pair(1533,
dBr_u{0.0}),
1152 std::make_pair(1534,
dBr_u{-20.0}),
1153 std::make_pair(1538,
dBr_u{-20.0}),
1154 std::make_pair(1539,
dBr_u{0.0}),
1155 std::make_pair(2036,
dBr_u{0.0}),
1156 std::make_pair(2037,
dBr_u{-1.538}),
1157 std::make_pair(2049,
dBr_u{-20.0}),
1158 std::make_pair(2050,
dBr_u{-20.0}),
1159 std::make_pair(2054,
dBr_u{-20.0}),
1160 std::make_pair(2055,
dBr_u{-20.016}),
1161 std::make_pair(2560,
dBr_u{-28.000}),
1162 std::make_pair(2561,
dBr_u{-28.023}),
1163 std::make_pair(3072,
dBr_u{-40.0}),
1174 {
true,
false,
false,
false}),
1175 TestCase::Duration::QUICK);
1179 NS_LOG_FUNCTION(
"Check slopes for 11ax 80MHz @ 5GHz with second 20 MHz subchannel punctured");
1181 std::make_pair(0,
dBr_u{-40.0}),
1182 std::make_pair(511,
dBr_u{-28.023}),
1183 std::make_pair(512,
dBr_u{-28.000}),
1184 std::make_pair(1017,
dBr_u{-20.016}),
1185 std::make_pair(1018,
dBr_u{-20.0}),
1186 std::make_pair(1022,
dBr_u{-20.0}),
1187 std::make_pair(1023,
dBr_u{-20.0}),
1188 std::make_pair(1035,
dBr_u{-1.538}),
1189 std::make_pair(1036,
dBr_u{0.0}),
1190 std::make_pair(1279,
dBr_u{0.0}),
1191 std::make_pair(1280,
dBr_u{0.0}),
1192 std::make_pair(1286,
dBr_u{-20.0}),
1193 std::make_pair(1287,
dBr_u{-20.0}),
1194 std::make_pair(1528,
dBr_u{-20.0}),
1195 std::make_pair(1529,
dBr_u{-20.0}),
1196 std::make_pair(1533,
dBr_u{-6.667}),
1197 std::make_pair(1534,
dBr_u{-20.0}),
1198 std::make_pair(1538,
dBr_u{-20.0}),
1199 std::make_pair(1539,
dBr_u{0.0}),
1200 std::make_pair(2036,
dBr_u{0.0}),
1201 std::make_pair(2037,
dBr_u{-1.538}),
1202 std::make_pair(2049,
dBr_u{-20.0}),
1203 std::make_pair(2050,
dBr_u{-20.0}),
1204 std::make_pair(2054,
dBr_u{-20.0}),
1205 std::make_pair(2055,
dBr_u{-20.016}),
1206 std::make_pair(2560,
dBr_u{-28.000}),
1207 std::make_pair(2561,
dBr_u{-28.023}),
1208 std::make_pair(3072,
dBr_u{-40.0}),
1219 {
false,
true,
false,
false}),
1220 TestCase::Duration::QUICK);
1224 NS_LOG_FUNCTION(
"Check slopes for 11ax 80MHz @ 5GHz with third 20 MHz subchannel punctured");
1226 std::make_pair(0,
dBr_u{-40.0}),
1227 std::make_pair(511,
dBr_u{-28.023}),
1228 std::make_pair(512,
dBr_u{-28.000}),
1229 std::make_pair(1017,
dBr_u{-20.016}),
1230 std::make_pair(1018,
dBr_u{-20.0}),
1231 std::make_pair(1022,
dBr_u{-20.0}),
1232 std::make_pair(1023,
dBr_u{-20.0}),
1233 std::make_pair(1035,
dBr_u{-1.538}),
1234 std::make_pair(1036,
dBr_u{0.0}),
1235 std::make_pair(1533,
dBr_u{0.0}),
1236 std::make_pair(1534,
dBr_u{-20.0}),
1237 std::make_pair(1535,
dBr_u{-20.0}),
1238 std::make_pair(1539,
dBr_u{-10.0}),
1239 std::make_pair(1542,
dBr_u{-20.0}),
1240 std::make_pair(1543,
dBr_u{-20.0}),
1241 std::make_pair(1784,
dBr_u{-20.0}),
1242 std::make_pair(1785,
dBr_u{-20.0}),
1243 std::make_pair(1791,
dBr_u{0.0}),
1244 std::make_pair(1792,
dBr_u{0.0}),
1245 std::make_pair(2036,
dBr_u{0.0}),
1246 std::make_pair(2037,
dBr_u{-1.538}),
1247 std::make_pair(2049,
dBr_u{-20.0}),
1248 std::make_pair(2050,
dBr_u{-20.0}),
1249 std::make_pair(2054,
dBr_u{-20.0}),
1250 std::make_pair(2055,
dBr_u{-20.016}),
1251 std::make_pair(2560,
dBr_u{-28.000}),
1252 std::make_pair(2561,
dBr_u{-28.023}),
1253 std::make_pair(3072,
dBr_u{-40.0}),
1264 {
false,
false,
true,
false}),
1265 TestCase::Duration::QUICK);
1269 NS_LOG_FUNCTION(
"Check slopes for 11ax 80MHz @ 5GHz with last 20 MHz subchannel punctured");
1271 std::make_pair(0,
dBr_u{-40.0}),
1272 std::make_pair(511,
dBr_u{-28.023}),
1273 std::make_pair(512,
dBr_u{-28.000}),
1274 std::make_pair(1017,
dBr_u{-20.016}),
1275 std::make_pair(1018,
dBr_u{-20.0}),
1276 std::make_pair(1022,
dBr_u{-20.0}),
1277 std::make_pair(1023,
dBr_u{-20.0}),
1278 std::make_pair(1035,
dBr_u{-1.538}),
1279 std::make_pair(1036,
dBr_u{0.0}),
1280 std::make_pair(1533,
dBr_u{0.0}),
1281 std::make_pair(1534,
dBr_u{-20.0}),
1282 std::make_pair(1538,
dBr_u{-20.0}),
1283 std::make_pair(1539,
dBr_u{0.0}),
1284 std::make_pair(1791,
dBr_u{0.0}),
1285 std::make_pair(1792,
dBr_u{0.0}),
1286 std::make_pair(1798,
dBr_u{-20.0}),
1287 std::make_pair(1799,
dBr_u{-20.0}),
1288 std::make_pair(2049,
dBr_u{-20.0}),
1289 std::make_pair(2050,
dBr_u{-20.0}),
1290 std::make_pair(2054,
dBr_u{-20.0}),
1291 std::make_pair(2055,
dBr_u{-20.016}),
1292 std::make_pair(2560,
dBr_u{-28.000}),
1293 std::make_pair(2561,
dBr_u{-28.023}),
1294 std::make_pair(3072,
dBr_u{-40.0}),
1305 {
false,
false,
false,
true}),
1306 TestCase::Duration::QUICK);
1311 "Check slopes for 11ax 160MHz @ 5GHz with two first 20 MHz subchannels punctured");
1313 std::make_pair(0,
dBr_u{-40.0}),
1314 std::make_pair(1023,
dBr_u{-28.012}),
1315 std::make_pair(1024,
dBr_u{-28.000}),
1316 std::make_pair(2041,
dBr_u{-20.008}),
1317 std::make_pair(2042,
dBr_u{-20.0}),
1318 std::make_pair(2046,
dBr_u{-20.0}),
1319 std::make_pair(2047,
dBr_u{-20.0}),
1320 std::make_pair(2552,
dBr_u{-20.0}),
1321 std::make_pair(2553,
dBr_u{-20.0}),
1322 std::make_pair(2557,
dBr_u{-6.66667}),
1323 std::make_pair(2558,
dBr_u{-20.0}),
1324 std::make_pair(2562,
dBr_u{-20.0}),
1325 std::make_pair(2563,
dBr_u{0.0}),
1326 std::make_pair(3060,
dBr_u{0.0}),
1327 std::make_pair(3061,
dBr_u{-20.0}),
1328 std::make_pair(3083,
dBr_u{-20.0}),
1329 std::make_pair(3084,
dBr_u{0.0}),
1330 std::make_pair(3581,
dBr_u{0.0}),
1331 std::make_pair(3582,
dBr_u{-20.0}),
1332 std::make_pair(3586,
dBr_u{-20.0}),
1333 std::make_pair(3587,
dBr_u{0.0}),
1334 std::make_pair(4084,
dBr_u{0.0}),
1335 std::make_pair(4085,
dBr_u{-1.538}),
1336 std::make_pair(4097,
dBr_u{-20.0}),
1337 std::make_pair(4098,
dBr_u{-20.0}),
1338 std::make_pair(4102,
dBr_u{-20.0}),
1339 std::make_pair(4103,
dBr_u{-20.008}),
1340 std::make_pair(5120,
dBr_u{-28.000}),
1341 std::make_pair(5121,
dBr_u{-28.012}),
1342 std::make_pair(6144,
dBr_u{-40.0}),
1354 {
true,
true,
false,
false,
false,
false,
false,
false}),
1355 TestCase::Duration::QUICK);
1360 "Check slopes for 11ax 160MHz @ 5GHz with third and fourth 20 MHz subchannels punctured");
1362 std::make_pair(0,
dBr_u{-40.0}),
1363 std::make_pair(1023,
dBr_u{-28.012}),
1364 std::make_pair(1024,
dBr_u{-28.000}),
1365 std::make_pair(2041,
dBr_u{-20.008}),
1366 std::make_pair(2042,
dBr_u{-20.0}),
1367 std::make_pair(2046,
dBr_u{-20.0}),
1368 std::make_pair(2047,
dBr_u{-20.0}),
1369 std::make_pair(2059,
dBr_u{-1.538}),
1370 std::make_pair(2060,
dBr_u{0.0}),
1371 std::make_pair(2557,
dBr_u{0.0}),
1372 std::make_pair(2558,
dBr_u{-20.0}),
1373 std::make_pair(2562,
dBr_u{-20.0}),
1374 std::make_pair(2563,
dBr_u{-10.0}),
1375 std::make_pair(2566,
dBr_u{-20.0}),
1376 std::make_pair(2567,
dBr_u{-20.0}),
1377 std::make_pair(3060,
dBr_u{-20.0}),
1378 std::make_pair(3061,
dBr_u{-20.0}),
1379 std::make_pair(3083,
dBr_u{-20.0}),
1380 std::make_pair(3084,
dBr_u{0.0}),
1381 std::make_pair(3581,
dBr_u{0.0}),
1382 std::make_pair(3582,
dBr_u{-20.0}),
1383 std::make_pair(3586,
dBr_u{-20.0}),
1384 std::make_pair(3587,
dBr_u{0.0}),
1385 std::make_pair(4084,
dBr_u{0.0}),
1386 std::make_pair(4085,
dBr_u{-1.538}),
1387 std::make_pair(4097,
dBr_u{-20.0}),
1388 std::make_pair(4098,
dBr_u{-20.0}),
1389 std::make_pair(4102,
dBr_u{-20.0}),
1390 std::make_pair(4103,
dBr_u{-20.008}),
1391 std::make_pair(5120,
dBr_u{-28.000}),
1392 std::make_pair(5121,
dBr_u{-28.012}),
1393 std::make_pair(6144,
dBr_u{-40.0}),
1405 {
false,
false,
true,
true,
false,
false,
false,
false}),
1406 TestCase::Duration::QUICK);
1411 "Check slopes for 11ax 160MHz @ 5GHz with fifth and sixth 20 MHz subchannels punctured");
1413 std::make_pair(0,
dBr_u{-40.0}),
1414 std::make_pair(1023,
dBr_u{-28.012}),
1415 std::make_pair(1024,
dBr_u{-28.000}),
1416 std::make_pair(2041,
dBr_u{-20.008}),
1417 std::make_pair(2042,
dBr_u{-20.0}),
1418 std::make_pair(2046,
dBr_u{-20.0}),
1419 std::make_pair(2047,
dBr_u{-20.0}),
1420 std::make_pair(2059,
dBr_u{-1.538}),
1421 std::make_pair(2060,
dBr_u{0.0}),
1422 std::make_pair(2557,
dBr_u{0.0}),
1423 std::make_pair(2558,
dBr_u{-20.0}),
1424 std::make_pair(2562,
dBr_u{-20.0}),
1425 std::make_pair(2563,
dBr_u{0.0}),
1426 std::make_pair(3060,
dBr_u{0.0}),
1427 std::make_pair(3061,
dBr_u{-20.0}),
1428 std::make_pair(3083,
dBr_u{-20.0}),
1429 std::make_pair(3084,
dBr_u{-20.0}),
1430 std::make_pair(3576,
dBr_u{-20.0}),
1431 std::make_pair(3577,
dBr_u{-20.0}),
1432 std::make_pair(3581,
dBr_u{-6.667}),
1433 std::make_pair(3582,
dBr_u{-20.0}),
1434 std::make_pair(3586,
dBr_u{-20.0}),
1435 std::make_pair(3587,
dBr_u{0.0}),
1436 std::make_pair(4084,
dBr_u{0.0}),
1437 std::make_pair(4085,
dBr_u{-1.538}),
1438 std::make_pair(4097,
dBr_u{-20.0}),
1439 std::make_pair(4098,
dBr_u{-20.0}),
1440 std::make_pair(4102,
dBr_u{-20.0}),
1441 std::make_pair(4103,
dBr_u{-20.008}),
1442 std::make_pair(5120,
dBr_u{-28.000}),
1443 std::make_pair(5121,
dBr_u{-28.012}),
1444 std::make_pair(6144,
dBr_u{-40.0}),
1456 {
false,
false,
false,
false,
true,
true,
false,
false}),
1457 TestCase::Duration::QUICK);
1462 "Check slopes for 11ax 160MHz @ 5GHz with two last 20 MHz subchannels punctured");
1464 std::make_pair(0,
dBr_u{-40.0}),
1465 std::make_pair(1023,
dBr_u{-28.012}),
1466 std::make_pair(1024,
dBr_u{-28.000}),
1467 std::make_pair(2041,
dBr_u{-20.008}),
1468 std::make_pair(2042,
dBr_u{-20.0}),
1469 std::make_pair(2046,
dBr_u{-20.0}),
1470 std::make_pair(2047,
dBr_u{-20.0}),
1471 std::make_pair(2059,
dBr_u{-1.538}),
1472 std::make_pair(2060,
dBr_u{0.0}),
1473 std::make_pair(2557,
dBr_u{0.0}),
1474 std::make_pair(2558,
dBr_u{-20.0}),
1475 std::make_pair(2562,
dBr_u{-20.0}),
1476 std::make_pair(2563,
dBr_u{0.0}),
1477 std::make_pair(3060,
dBr_u{0.0}),
1478 std::make_pair(3061,
dBr_u{-20.0}),
1479 std::make_pair(3083,
dBr_u{-20.0}),
1480 std::make_pair(3084,
dBr_u{0.0}),
1481 std::make_pair(3581,
dBr_u{0.0}),
1482 std::make_pair(3582,
dBr_u{-20.0}),
1483 std::make_pair(3586,
dBr_u{-20.0}),
1484 std::make_pair(3587,
dBr_u{-10.0}),
1485 std::make_pair(3590,
dBr_u{-20.0}),
1486 std::make_pair(3591,
dBr_u{-20.0}),
1487 std::make_pair(4097,
dBr_u{-20.0}),
1488 std::make_pair(4098,
dBr_u{-20.0}),
1489 std::make_pair(4102,
dBr_u{-20.0}),
1490 std::make_pair(4103,
dBr_u{-20.008}),
1491 std::make_pair(5120,
dBr_u{-28.000}),
1492 std::make_pair(5121,
dBr_u{-28.012}),
1493 std::make_pair(6144,
dBr_u{-40.0}),
1505 {
false,
false,
false,
false,
false,
false,
true,
true}),
1506 TestCase::Duration::QUICK);
Test checks if Wifi spectrum values for OFDM are generated properly.
std::vector< IndexPowerPair > IndexPowerVect
typedef for a vector of pairs of sub-band index and relative power value
~WifiOfdmMaskSlopesTestCase() override=default
std::vector< bool > m_puncturedSubchannels
bitmap indicating whether a 20 MHz subchannel is punctured or not (only used for 802....
void DoSetup() override
Implementation to do any local setup required for this TestCase.
WifiPhyBand m_band
the wifi PHY band to test
std::vector< MHz_u > m_centerFreqs
the center frequency per contiguous segment to test
dB_u m_tolerance
tolerance
Ptr< SpectrumValue > m_actualSpectrum
actual spectrum value
MHz_u m_channelWidth
the total channel width to test
WifiOfdmMaskSlopesTestCase(const std::string &name, WifiStandard standard, WifiPhyBand band, MHz_u channelWidth, const std::vector< MHz_u > ¢erFrequencies, const IndexPowerVect &maskRefs, dB_u tolerance, std::size_t precision, const std::vector< bool > &puncturedSubchannels=std::vector< bool >{})
Constructor.
void InterpolateAndAppendValues(IndexPowerVect &vect, IndexPowerPair start, IndexPowerPair stop) const
Interpolate PSD values for indexes between provided start and stop and append to provided vector.
void DoRun() override
Implementation to actually run this TestCase.
std::pair< uint32_t, dBr_u > IndexPowerPair
typedef for a pair of sub-band index and relative power value
IndexPowerVect m_expectedPsd
expected power values
std::size_t m_precision
precision for double calculations (in decimals)
WifiStandard m_standard
the wifi standard to test
Test suite for checking the consistency of different OFDM-based transmit masks.
WifiTransmitMaskTestSuite()
Smart pointer class similar to boost::intrusive_ptr.
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
static Ptr< SpectrumValue > CreateHtOfdmTxPowerSpectralDensity(const std::vector< MHz_u > ¢erFrequencies, MHz_u channelWidth, Watt_u txPower, MHz_u guardBandwidth, dBr_u minInnerBand=dBr_u{-20}, dBr_u minOuterband=dBr_u{-28}, dBr_u lowestPoint=dBr_u{-40})
Create a transmit power spectral density corresponding to OFDM High Throughput (HT) (802....
static Ptr< SpectrumValue > CreateOfdmTxPowerSpectralDensity(MHz_u centerFrequency, MHz_u channelWidth, Watt_u txPower, MHz_u guardBandwidth, dBr_u minInnerBand=dBr_u{-20}, dBr_u minOuterband=dBr_u{-28}, dBr_u lowestPoint=dBr_u{-40})
Create a transmit power spectral density corresponding to OFDM (802.11a/g).
static Ptr< SpectrumValue > CreateHeOfdmTxPowerSpectralDensity(MHz_u centerFrequency, MHz_u channelWidth, Watt_u txPower, MHz_u guardBandwidth, dBr_u minInnerBand=dBr_u{-20}, dBr_u minOuterband=dBr_u{-28}, dBr_u lowestPoint=dBr_u{-40}, const std::vector< bool > &puncturedSubchannels={})
Create a transmit power spectral density corresponding to OFDM High Efficiency (HE) (802....
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
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...
#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 ...
WifiStandard
Identifies the IEEE 802.11 specifications that a Wifi device can be configured to use.
WifiPhyBand
Identifies the PHY band.
@ WIFI_PHY_BAND_6GHZ
The 6 GHz band.
@ WIFI_PHY_BAND_2_4GHZ
The 2.4 GHz band.
@ WIFI_PHY_BAND_5GHZ
The 5 GHz band.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static WifiTransmitMaskTestSuite g_WifiTransmitMaskTestSuite