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;
101 double outerBandMaximumRejection = -40;
108 m_actualSpectrum = WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity (freq, bw, refTxPowerW, bw, -20.0, -28.0, outerBandMaximumRejection);
118 m_actualSpectrum = WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity (freq, bw, refTxPowerW, bw, -20.0, -28.0, outerBandMaximumRejection);
125 freq = 2402 + (bw / 2);
126 outerBandMaximumRejection = -45;
129 m_actualSpectrum = WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity (freq, bw, refTxPowerW, bw, -20.0, -28.0, outerBandMaximumRejection);
134 NS_ASSERT (bw == 20 || bw == 40 || bw == 80 || bw == 160);
135 m_actualSpectrum = WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity (freq, bw, refTxPowerW, bw, -20.0, -28.0, outerBandMaximumRejection);
143 freq = 2402 + (bw / 2);
144 outerBandMaximumRejection = -45;
146 NS_ASSERT (bw == 20 || bw == 40 || bw == 80 || bw == 160);
147 m_actualSpectrum = WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity (freq, bw, refTxPowerW, bw, -20.0, -28.0, outerBandMaximumRejection);
157 for (uint32_t i = 0; i < maskRefsLeft.size (); i = i + 2)
164 for (uint32_t i = 0; i < maskRefsRight.size (); i = i + 2)
183 if (
start.first == stop.first)
186 vect.push_back (
start);
191 double slope = (stop.second -
start.second) / (stop.first -
start.first);
192 for (uint32_t i =
start.first; i <= stop.first; i++)
194 double val =
start.second + slope * (i -
start.first);
195 vect.push_back (std::make_pair (i, val));
198 NS_ASSERT (vect.back ().first == stop.first
206 double currentPowerDbr = 0.0;
207 double maxPowerW = (*m_actualSpectrum)[0];
210 maxPowerW =
std::max (maxPowerW, *vit);
216 currentPowerDbr = 10.0 * std::log10 ((*
m_actualSpectrum)[it->first] / maxPowerW);
217 NS_LOG_LOGIC (
"For " << it->first <<
", expected: " << it->second <<
" vs obtained: " << currentPowerDbr);
219 "Spectrum value mismatch for left guard band (" << it->first <<
")");
224 currentPowerDbr = 10.0 * std::log10 ((*
m_actualSpectrum)[it->first] / maxPowerW);
225 NS_LOG_LOGIC (
"For " << it->first <<
", expected: " << it->second <<
" vs obtained: " << currentPowerDbr);
227 "Spectrum value mismatch for right guard band (" << it->first <<
")");
254 NS_LOG_INFO (
"Creating WifiTransmitMaskTestSuite");
263 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
264 maskSlopesLeft.push_back (std::make_pair (31, -28.375));
265 maskSlopesLeft.push_back (std::make_pair (32, -28.000));
266 maskSlopesLeft.push_back (std::make_pair (60, -20.276));
267 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
268 maskSlopesLeft.push_back (std::make_pair (63, -20.0));
269 maskSlopesLeft.push_back (std::make_pair (64, -20.0));
270 maskSlopesLeft.push_back (std::make_pair (69, -3.333));
271 maskSlopesRight.push_back (std::make_pair (123, -3.333));
272 maskSlopesRight.push_back (std::make_pair (128, -20.0));
273 maskSlopesRight.push_back (std::make_pair (129, -20.0));
274 maskSlopesRight.push_back (std::make_pair (131, -20.0));
275 maskSlopesRight.push_back (std::make_pair (132, -20.276));
276 maskSlopesRight.push_back (std::make_pair (160, -28.000));
277 maskSlopesRight.push_back (std::make_pair (161, -28.375));
278 maskSlopesRight.push_back (std::make_pair (192, -40.0));
280 5, maskSlopesLeft, maskSlopesRight, tol),
285 maskSlopesLeft.clear ();
286 maskSlopesRight.clear ();
287 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
288 maskSlopesLeft.push_back (std::make_pair (31, -28.375));
289 maskSlopesLeft.push_back (std::make_pair (32, -28.000));
290 maskSlopesLeft.push_back (std::make_pair (60, -20.276));
291 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
292 maskSlopesLeft.push_back (std::make_pair (63, -20.0));
293 maskSlopesLeft.push_back (std::make_pair (64, -20.0));
294 maskSlopesLeft.push_back (std::make_pair (69, -3.333));
295 maskSlopesRight.push_back (std::make_pair (123, -3.333));
296 maskSlopesRight.push_back (std::make_pair (128, -20.0));
297 maskSlopesRight.push_back (std::make_pair (129, -20.0));
298 maskSlopesRight.push_back (std::make_pair (131, -20.0));
299 maskSlopesRight.push_back (std::make_pair (132, -20.276));
300 maskSlopesRight.push_back (std::make_pair (160, -28.000));
301 maskSlopesRight.push_back (std::make_pair (161, -28.375));
302 maskSlopesRight.push_back (std::make_pair (192, -40.0));
304 10, maskSlopesLeft, maskSlopesRight, tol),
311 maskSlopesLeft.clear ();
312 maskSlopesRight.clear ();
313 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
314 maskSlopesLeft.push_back (std::make_pair (31, -28.375));
315 maskSlopesLeft.push_back (std::make_pair (32, -28.000));
316 maskSlopesLeft.push_back (std::make_pair (60, -20.276));
317 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
318 maskSlopesLeft.push_back (std::make_pair (63, -20.0));
319 maskSlopesLeft.push_back (std::make_pair (64, -20.0));
320 maskSlopesLeft.push_back (std::make_pair (69, -3.333));
321 maskSlopesRight.push_back (std::make_pair (123, -3.333));
322 maskSlopesRight.push_back (std::make_pair (128, -20.0));
323 maskSlopesRight.push_back (std::make_pair (129, -20.0));
324 maskSlopesRight.push_back (std::make_pair (131, -20.0));
325 maskSlopesRight.push_back (std::make_pair (132, -20.276));
326 maskSlopesRight.push_back (std::make_pair (160, -28.000));
327 maskSlopesRight.push_back (std::make_pair (161, -28.375));
328 maskSlopesRight.push_back (std::make_pair (192, -40.0));
330 20, maskSlopesLeft, maskSlopesRight, tol),
337 20, maskSlopesLeft, maskSlopesRight, tol),
344 20, maskSlopesLeft, maskSlopesRight, tol),
351 maskSlopesLeft.clear ();
352 maskSlopesRight.clear ();
353 maskSlopesLeft.push_back (std::make_pair (0, -45.000));
354 maskSlopesLeft.push_back (std::make_pair (31, -28.531));
355 maskSlopesLeft.push_back (std::make_pair (32, -28.000));
356 maskSlopesLeft.push_back (std::make_pair (60, -20.276));
357 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
358 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
359 maskSlopesLeft.push_back (std::make_pair (62, -20.0));
360 maskSlopesLeft.push_back (std::make_pair (67, -3.333));
361 maskSlopesRight.push_back (std::make_pair (125, -3.333));
362 maskSlopesRight.push_back (std::make_pair (130, -20.0));
363 maskSlopesRight.push_back (std::make_pair (131, -20.0));
364 maskSlopesRight.push_back (std::make_pair (131, -20.0));
365 maskSlopesRight.push_back (std::make_pair (132, -20.276));
366 maskSlopesRight.push_back (std::make_pair (160, -28.000));
367 maskSlopesRight.push_back (std::make_pair (161, -28.531));
368 maskSlopesRight.push_back (std::make_pair (192, -45.000));
370 20, maskSlopesLeft, maskSlopesRight, tol),
375 maskSlopesLeft.clear ();
376 maskSlopesRight.clear ();
377 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
378 maskSlopesLeft.push_back (std::make_pair (31, -28.375));
379 maskSlopesLeft.push_back (std::make_pair (32, -28.000));
380 maskSlopesLeft.push_back (std::make_pair (60, -20.276));
381 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
382 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
383 maskSlopesLeft.push_back (std::make_pair (62, -20.0));
384 maskSlopesLeft.push_back (std::make_pair (67, -3.333));
385 maskSlopesRight.push_back (std::make_pair (125, -3.333));
386 maskSlopesRight.push_back (std::make_pair (130, -20.0));
387 maskSlopesRight.push_back (std::make_pair (131, -20.0));
388 maskSlopesRight.push_back (std::make_pair (131, -20.0));
389 maskSlopesRight.push_back (std::make_pair (132, -20.276));
390 maskSlopesRight.push_back (std::make_pair (160, -28.000));
391 maskSlopesRight.push_back (std::make_pair (161, -28.375));
392 maskSlopesRight.push_back (std::make_pair (192, -40.0));
394 20, maskSlopesLeft, maskSlopesRight, tol),
399 maskSlopesLeft.clear ();
400 maskSlopesRight.clear ();
401 maskSlopesLeft.push_back (std::make_pair (0, -45.000));
402 maskSlopesLeft.push_back (std::make_pair (63, -28.266));
403 maskSlopesLeft.push_back (std::make_pair (64, -28.000));
404 maskSlopesLeft.push_back (std::make_pair (124, -20.131));
405 maskSlopesLeft.push_back (std::make_pair (125, -20.0));
406 maskSlopesLeft.push_back (std::make_pair (125, -20.0));
407 maskSlopesLeft.push_back (std::make_pair (126, -20.0));
408 maskSlopesLeft.push_back (std::make_pair (131, -3.333));
409 maskSlopesRight.push_back (std::make_pair (253, -3.333));
410 maskSlopesRight.push_back (std::make_pair (258, -20.0));
411 maskSlopesRight.push_back (std::make_pair (259, -20.0));
412 maskSlopesRight.push_back (std::make_pair (259, -20.0));
413 maskSlopesRight.push_back (std::make_pair (260, -20.131));
414 maskSlopesRight.push_back (std::make_pair (320, -28.000));
415 maskSlopesRight.push_back (std::make_pair (321, -28.266));
416 maskSlopesRight.push_back (std::make_pair (384, -45.000));
418 40, maskSlopesLeft, maskSlopesRight, tol),
423 maskSlopesLeft.clear ();
424 maskSlopesRight.clear ();
425 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
426 maskSlopesLeft.push_back (std::make_pair (63, -28.188));
427 maskSlopesLeft.push_back (std::make_pair (64, -28.000));
428 maskSlopesLeft.push_back (std::make_pair (124, -20.131));
429 maskSlopesLeft.push_back (std::make_pair (125, -20.0));
430 maskSlopesLeft.push_back (std::make_pair (125, -20.0));
431 maskSlopesLeft.push_back (std::make_pair (126, -20.0));
432 maskSlopesLeft.push_back (std::make_pair (131, -3.333));
433 maskSlopesRight.push_back (std::make_pair (253, -3.333));
434 maskSlopesRight.push_back (std::make_pair (258, -20.0));
435 maskSlopesRight.push_back (std::make_pair (259, -20.0));
436 maskSlopesRight.push_back (std::make_pair (259, -20.0));
437 maskSlopesRight.push_back (std::make_pair (260, -20.131));
438 maskSlopesRight.push_back (std::make_pair (320, -28.000));
439 maskSlopesRight.push_back (std::make_pair (321, -28.188));
440 maskSlopesRight.push_back (std::make_pair (384, -40.0));
442 40, maskSlopesLeft, maskSlopesRight, tol),
449 maskSlopesLeft.clear ();
450 maskSlopesRight.clear ();
451 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
452 maskSlopesLeft.push_back (std::make_pair (31, -28.375));
453 maskSlopesLeft.push_back (std::make_pair (32, -28.000));
454 maskSlopesLeft.push_back (std::make_pair (60, -20.276));
455 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
456 maskSlopesLeft.push_back (std::make_pair (61, -20.0));
457 maskSlopesLeft.push_back (std::make_pair (62, -20.0));
458 maskSlopesLeft.push_back (std::make_pair (67, -3.333));
459 maskSlopesRight.push_back (std::make_pair (125, -3.333));
460 maskSlopesRight.push_back (std::make_pair (130, -20.0));
461 maskSlopesRight.push_back (std::make_pair (131, -20.0));
462 maskSlopesRight.push_back (std::make_pair (131, -20.0));
463 maskSlopesRight.push_back (std::make_pair (132, -20.276));
464 maskSlopesRight.push_back (std::make_pair (160, -28.000));
465 maskSlopesRight.push_back (std::make_pair (161, -28.375));
466 maskSlopesRight.push_back (std::make_pair (192, -40.0));
468 20, maskSlopesLeft, maskSlopesRight, tol),
473 maskSlopesLeft.clear ();
474 maskSlopesRight.clear ();
475 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
476 maskSlopesLeft.push_back (std::make_pair (63, -28.188));
477 maskSlopesLeft.push_back (std::make_pair (64, -28.000));
478 maskSlopesLeft.push_back (std::make_pair (124, -20.131));
479 maskSlopesLeft.push_back (std::make_pair (125, -20.0));
480 maskSlopesLeft.push_back (std::make_pair (125, -20.0));
481 maskSlopesLeft.push_back (std::make_pair (126, -20.0));
482 maskSlopesLeft.push_back (std::make_pair (131, -3.333));
483 maskSlopesRight.push_back (std::make_pair (253, -3.333));
484 maskSlopesRight.push_back (std::make_pair (258, -20.0));
485 maskSlopesRight.push_back (std::make_pair (259, -20.0));
486 maskSlopesRight.push_back (std::make_pair (259, -20.0));
487 maskSlopesRight.push_back (std::make_pair (260, -20.131));
488 maskSlopesRight.push_back (std::make_pair (320, -28.000));
489 maskSlopesRight.push_back (std::make_pair (321, -28.188));
490 maskSlopesRight.push_back (std::make_pair (384, -40.0));
492 40, maskSlopesLeft, maskSlopesRight, tol),
497 maskSlopesLeft.clear ();
498 maskSlopesRight.clear ();
499 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
500 maskSlopesLeft.push_back (std::make_pair (127, -28.094));
501 maskSlopesLeft.push_back (std::make_pair (128, -28.000));
502 maskSlopesLeft.push_back (std::make_pair (252, -20.064));
503 maskSlopesLeft.push_back (std::make_pair (253, -20.0));
504 maskSlopesLeft.push_back (std::make_pair (253, -20.0));
505 maskSlopesLeft.push_back (std::make_pair (254, -20.0));
506 maskSlopesLeft.push_back (std::make_pair (259, -3.333));
507 maskSlopesRight.push_back (std::make_pair (509, -3.333));
508 maskSlopesRight.push_back (std::make_pair (514, -20.0));
509 maskSlopesRight.push_back (std::make_pair (515, -20.0));
510 maskSlopesRight.push_back (std::make_pair (515, -20.0));
511 maskSlopesRight.push_back (std::make_pair (516, -20.064));
512 maskSlopesRight.push_back (std::make_pair (640, -28.000));
513 maskSlopesRight.push_back (std::make_pair (641, -28.094));
514 maskSlopesRight.push_back (std::make_pair (768, -40.0));
516 80, maskSlopesLeft, maskSlopesRight, tol),
521 maskSlopesLeft.clear ();
522 maskSlopesRight.clear ();
523 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
524 maskSlopesLeft.push_back (std::make_pair (255, -28.047));
525 maskSlopesLeft.push_back (std::make_pair (256, -28.000));
526 maskSlopesLeft.push_back (std::make_pair (508, -20.032));
527 maskSlopesLeft.push_back (std::make_pair (509, -20.0));
528 maskSlopesLeft.push_back (std::make_pair (509, -20.0));
529 maskSlopesLeft.push_back (std::make_pair (510, -20.0));
530 maskSlopesLeft.push_back (std::make_pair (515, -3.333));
531 maskSlopesRight.push_back (std::make_pair (1021, -3.333));
532 maskSlopesRight.push_back (std::make_pair (1026, -20.0));
533 maskSlopesRight.push_back (std::make_pair (1027, -20.0));
534 maskSlopesRight.push_back (std::make_pair (1027, -20.0));
535 maskSlopesRight.push_back (std::make_pair (1028, -20.032));
536 maskSlopesRight.push_back (std::make_pair (1280, -28.000));
537 maskSlopesRight.push_back (std::make_pair (1281, -28.047));
538 maskSlopesRight.push_back (std::make_pair (1536, -40.0));
540 160, maskSlopesLeft, maskSlopesRight, tol),
547 maskSlopesLeft.clear ();
548 maskSlopesRight.clear ();
549 maskSlopesLeft.push_back (std::make_pair (0, -45.000));
550 maskSlopesLeft.push_back (std::make_pair (127, -28.133));
551 maskSlopesLeft.push_back (std::make_pair (128, -28.000));
552 maskSlopesLeft.push_back (std::make_pair (252, -20.064));
553 maskSlopesLeft.push_back (std::make_pair (253, -20.0));
554 maskSlopesLeft.push_back (std::make_pair (255, -20.0));
555 maskSlopesLeft.push_back (std::make_pair (256, -20.0));
556 maskSlopesLeft.push_back (std::make_pair (261, -3.333));
557 maskSlopesRight.push_back (std::make_pair (507, -3.333));
558 maskSlopesRight.push_back (std::make_pair (512, -20.0));
559 maskSlopesRight.push_back (std::make_pair (513, -20.0));
560 maskSlopesRight.push_back (std::make_pair (515, -20.0));
561 maskSlopesRight.push_back (std::make_pair (516, -20.064));
562 maskSlopesRight.push_back (std::make_pair (640, -28.000));
563 maskSlopesRight.push_back (std::make_pair (641, -28.133));
564 maskSlopesRight.push_back (std::make_pair (768, -45.000));
566 20, maskSlopesLeft, maskSlopesRight, tol),
571 maskSlopesLeft.clear ();
572 maskSlopesRight.clear ();
573 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
574 maskSlopesLeft.push_back (std::make_pair (127, -28.094));
575 maskSlopesLeft.push_back (std::make_pair (128, -28.000));
576 maskSlopesLeft.push_back (std::make_pair (252, -20.064));
577 maskSlopesLeft.push_back (std::make_pair (253, -20.0));
578 maskSlopesLeft.push_back (std::make_pair (255, -20.0));
579 maskSlopesLeft.push_back (std::make_pair (256, -20.0));
580 maskSlopesLeft.push_back (std::make_pair (261, -3.333));
581 maskSlopesRight.push_back (std::make_pair (507, -3.333));
582 maskSlopesRight.push_back (std::make_pair (512, -20.0));
583 maskSlopesRight.push_back (std::make_pair (513, -20.0));
584 maskSlopesRight.push_back (std::make_pair (515, -20.0));
585 maskSlopesRight.push_back (std::make_pair (516, -20.064));
586 maskSlopesRight.push_back (std::make_pair (640, -28.000));
587 maskSlopesRight.push_back (std::make_pair (641, -28.094));
588 maskSlopesRight.push_back (std::make_pair (768, -40.0));
590 20, maskSlopesLeft, maskSlopesRight, tol),
595 maskSlopesLeft.clear ();
596 maskSlopesRight.clear ();
597 maskSlopesLeft.push_back (std::make_pair (0, -45.000));
598 maskSlopesLeft.push_back (std::make_pair (255, -28.066));
599 maskSlopesLeft.push_back (std::make_pair (256, -28.000));
600 maskSlopesLeft.push_back (std::make_pair (505, -20.032));
601 maskSlopesLeft.push_back (std::make_pair (506, -20.0));
602 maskSlopesLeft.push_back (std::make_pair (510, -20.0));
603 maskSlopesLeft.push_back (std::make_pair (511, -20.0));
604 maskSlopesLeft.push_back (std::make_pair (523, -1.538));
605 maskSlopesRight.push_back (std::make_pair (1013, -1.538));
606 maskSlopesRight.push_back (std::make_pair (1025, -20.0));
607 maskSlopesRight.push_back (std::make_pair (1026, -20.0));
608 maskSlopesRight.push_back (std::make_pair (1030, -20.0));
609 maskSlopesRight.push_back (std::make_pair (1031, -20.032));
610 maskSlopesRight.push_back (std::make_pair (1280, -28.000));
611 maskSlopesRight.push_back (std::make_pair (1281, -28.066));
612 maskSlopesRight.push_back (std::make_pair (1536, -45.000));
614 40, maskSlopesLeft, maskSlopesRight, tol),
619 maskSlopesLeft.clear ();
620 maskSlopesRight.clear ();
621 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
622 maskSlopesLeft.push_back (std::make_pair (255, -28.047));
623 maskSlopesLeft.push_back (std::make_pair (256, -28.000));
624 maskSlopesLeft.push_back (std::make_pair (505, -20.032));
625 maskSlopesLeft.push_back (std::make_pair (506, -20.0));
626 maskSlopesLeft.push_back (std::make_pair (510, -20.0));
627 maskSlopesLeft.push_back (std::make_pair (511, -20.0));
628 maskSlopesLeft.push_back (std::make_pair (523, -1.538));
629 maskSlopesRight.push_back (std::make_pair (1013, -1.538));
630 maskSlopesRight.push_back (std::make_pair (1025, -20.0));
631 maskSlopesRight.push_back (std::make_pair (1026, -20.0));
632 maskSlopesRight.push_back (std::make_pair (1030, -20.0));
633 maskSlopesRight.push_back (std::make_pair (1031, -20.032));
634 maskSlopesRight.push_back (std::make_pair (1280, -28.000));
635 maskSlopesRight.push_back (std::make_pair (1281, -28.047));
636 maskSlopesRight.push_back (std::make_pair (1536, -40.0));
638 40, maskSlopesLeft, maskSlopesRight, tol),
643 maskSlopesLeft.clear ();
644 maskSlopesRight.clear ();
645 maskSlopesLeft.push_back (std::make_pair (0, -45.000));
646 maskSlopesLeft.push_back (std::make_pair (511, -28.033));
647 maskSlopesLeft.push_back (std::make_pair (512, -28.000));
648 maskSlopesLeft.push_back (std::make_pair (1017, -20.016));
649 maskSlopesLeft.push_back (std::make_pair (1018, -20.0));
650 maskSlopesLeft.push_back (std::make_pair (1022, -20.0));
651 maskSlopesLeft.push_back (std::make_pair (1023, -20.0));
652 maskSlopesLeft.push_back (std::make_pair (1035, -1.538));
653 maskSlopesRight.push_back (std::make_pair (2037, -1.538));
654 maskSlopesRight.push_back (std::make_pair (2049, -20.0));
655 maskSlopesRight.push_back (std::make_pair (2050, -20.0));
656 maskSlopesRight.push_back (std::make_pair (2054, -20.0));
657 maskSlopesRight.push_back (std::make_pair (2055, -20.016));
658 maskSlopesRight.push_back (std::make_pair (2560, -28.000));
659 maskSlopesRight.push_back (std::make_pair (2561, -28.033));
660 maskSlopesRight.push_back (std::make_pair (3072, -45.000));
662 80, maskSlopesLeft, maskSlopesRight, tol),
667 maskSlopesLeft.clear ();
668 maskSlopesRight.clear ();
669 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
670 maskSlopesLeft.push_back (std::make_pair (511, -28.023));
671 maskSlopesLeft.push_back (std::make_pair (512, -28.000));
672 maskSlopesLeft.push_back (std::make_pair (1017, -20.016));
673 maskSlopesLeft.push_back (std::make_pair (1018, -20.0));
674 maskSlopesLeft.push_back (std::make_pair (1022, -20.0));
675 maskSlopesLeft.push_back (std::make_pair (1023, -20.0));
676 maskSlopesLeft.push_back (std::make_pair (1035, -1.538));
677 maskSlopesRight.push_back (std::make_pair (2037, -1.538));
678 maskSlopesRight.push_back (std::make_pair (2049, -20.0));
679 maskSlopesRight.push_back (std::make_pair (2050, -20.0));
680 maskSlopesRight.push_back (std::make_pair (2054, -20.0));
681 maskSlopesRight.push_back (std::make_pair (2055, -20.016));
682 maskSlopesRight.push_back (std::make_pair (2560, -28.000));
683 maskSlopesRight.push_back (std::make_pair (2561, -28.023));
684 maskSlopesRight.push_back (std::make_pair (3072, -40.0));
686 80, maskSlopesLeft, maskSlopesRight, tol),
693 maskSlopesLeft.clear ();
694 maskSlopesRight.clear ();
695 maskSlopesLeft.push_back (std::make_pair (0, -40.0));
696 maskSlopesLeft.push_back (std::make_pair (1023, -28.012));
697 maskSlopesLeft.push_back (std::make_pair (1024, -28.000));
698 maskSlopesLeft.push_back (std::make_pair (2041, -20.008));
699 maskSlopesLeft.push_back (std::make_pair (2042, -20.0));
700 maskSlopesLeft.push_back (std::make_pair (2046, -20.0));
701 maskSlopesLeft.push_back (std::make_pair (2047, -20.0));
702 maskSlopesLeft.push_back (std::make_pair (2059, -1.538));
703 maskSlopesRight.push_back (std::make_pair (4085, -1.538));
704 maskSlopesRight.push_back (std::make_pair (4097, -20.0));
705 maskSlopesRight.push_back (std::make_pair (4098, -20.0));
706 maskSlopesRight.push_back (std::make_pair (4102, -20.0));
707 maskSlopesRight.push_back (std::make_pair (4103, -20.008));
708 maskSlopesRight.push_back (std::make_pair (5120, -28.000));
709 maskSlopesRight.push_back (std::make_pair (5121, -28.012));
710 maskSlopesRight.push_back (std::make_pair (6144, -40.0));
712 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.