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,
66 std::size_t precision,
67 const std::vector<bool>& puncturedSubchannels = std::vector<bool>{});
72 void DoRun()
override;
101 const std::string& name,
105 const std::vector<MHz_u>& centerFrequencies,
108 std::size_t precision,
109 const std::vector<bool>& puncturedSubchannels)
111 m_standard{standard},
113 m_channelWidth{channelWidth},
114 m_centerFreqs{centerFrequencies},
115 m_puncturedSubchannels{puncturedSubchannels},
117 m_expectedPsd{maskRefs},
118 m_tolerance{tolerance},
119 m_precision{precision}
121 NS_LOG_FUNCTION(
this << name << standard << band << channelWidth << tolerance << precision
122 << puncturedSubchannels.size());
132 dBr_u outerBandMaximumRejection{0.0};
137 outerBandMaximumRejection =
dBr_u{-40};
143 outerBandMaximumRejection =
dBr_u{-40};
160 outerBandMaximumRejection);
173 outerBandMaximumRejection);
186 outerBandMaximumRejection);
198 outerBandMaximumRejection);
212 outerBandMaximumRejection);
227 outerBandMaximumRejection,
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};
265 dB_u val{start.second + slope * delta};
266 const auto multiplier = std::round(std::pow(10.0,
static_cast<double>(
m_precision)));
267 val =
dB_u{std::floor(val * multiplier + 0.5) / multiplier};
268 vect.emplace_back(i, val);
272 NS_ASSERT(vect.back().first == stop.first &&
280 dBr_u currentPower{0.0};
281 Watt_u maxPower{(*m_actualSpectrum)[0]};
286 maxPower = std::max(maxPower,
Watt_u{*vit});
290 for (
const auto& [subcarrier, expectedValue] :
m_expectedPsd)
293 NS_LOG_LOGIC(
"For " << subcarrier <<
", expected: " << expectedValue
294 <<
" vs obtained: " << currentPower);
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.
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