363 if (previous >= plcpPayloadStart) |
368 if (previous >= plcpPayloadStart) |
364 { |
369 { |
365 psr *= 1; |
370 psr *= 1; |
366 NS_LOG_DEBUG ("Case 1 - previous and current after playload start: nothing to do"); |
371 NS_LOG_DEBUG ("Case 1 - previous and current after playload start: nothing to do"); |
367 } |
372 } |
368 //Case 2: previous is in HT-SIG or in HT training: Non HT will not enter here since it didn't enter in the last two and they are all the same for non HT |
373 //Case 2: previous is in (V)HT training or in VHT-SIG-B: Non (V)HT will not enter here since it didn't enter in the last two and they are all the same for non (V)HT |
369 else if (previous >= plcpHsigHeaderStart) |
374 else if (previous >= plcpHtTrainingSymbolsStart) |
370 { |
375 { |
371 NS_ASSERT ((preamble != WIFI_PREAMBLE_LONG) && (preamble != WIFI_PREAMBLE_SHORT)); |
376 NS_ASSERT ((preamble != WIFI_PREAMBLE_LONG) && (preamble != WIFI_PREAMBLE_SHORT)); |
372 //Case 2a: current after payload start |
377 //Case 2a: current after payload start |
373 if (current >= plcpPayloadStart) |
378 if (current >= plcpPayloadStart) |
374 { |
379 { |
375 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
380 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
376 noiseInterferenceW, |
381 noiseInterferenceW, |
377 htHeaderMode), |
382 event->GetTxVector ().GetChannelWidth ()), |
378 plcpPayloadStart - previous, |
383 plcpPayloadStart - previous, |
379 htHeaderMode); |
384 htHeaderMode, event->GetTxVector ()); |
380 |
385 |
381 NS_LOG_DEBUG ("Case 2a - previous is in HT-SIG or in HT training and current after payload start: mode=" << htHeaderMode << ", psr=" << psr); |
386 NS_LOG_DEBUG ("Case 2a - previous is in (V)HT training or in VHT-SIG-B and current after payload start: mode=" << htHeaderMode << ", psr=" << psr); |
382 } |
387 } |
383 //Case 2b: current is in HT-SIG or in HT training |
388 //Case 2b: current is in (V)HT training or in VHT-SIG-B |
384 else |
389 else |
385 { |
390 { |
386 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
391 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
387 noiseInterferenceW, |
392 noiseInterferenceW, |
388 htHeaderMode), |
393 event->GetTxVector ().GetChannelWidth ()), |
389 current - previous, |
394 current - previous, |
390 htHeaderMode); |
395 htHeaderMode, event->GetTxVector ()); |
391 |
396 |
392 NS_LOG_DEBUG ("Case 2b - previous is in HT-SIG or in HT training and current is in HT-SIG or in HT training: mode=" << htHeaderMode << ", psr=" << psr); |
397 NS_LOG_DEBUG ("Case 2b - previous is in (V)HT training or in VHT-SIG-B and current is in (V)HT training or in VHT-SIG-B: mode=" << htHeaderMode << ", psr=" << psr); |
393 } |
398 } |
394 } |
399 } |
395 //Case 3: previous in L-SIG: GF will not reach here because it will execute the previous if and exit |
400 //Case 3: previous is in HT-SIG or VHT-SIG-A: Non (V)HT will not enter here since it didn't enter in the last two and they are all the same for non (V)HT |
396 else if (previous >= plcpHeaderStart) |
401 else if (previous >= plcpHsigHeaderStart) |
397 { |
402 { |
398 NS_ASSERT (preamble != WIFI_PREAMBLE_HT_GF); |
403 NS_ASSERT ((preamble != WIFI_PREAMBLE_LONG) && (preamble != WIFI_PREAMBLE_SHORT)); |
399 //Case 3a: current after payload start |
404 //Case 3a: current after payload start |
400 if (current >= plcpPayloadStart) |
405 if (current >= plcpPayloadStart) |
401 { |
406 { |
402 //Case 3ai: Non HT format (No HT-SIG or Training Symbols) |
|
403 if (preamble == WIFI_PREAMBLE_LONG || preamble == WIFI_PREAMBLE_SHORT) |
|
404 { |
|
405 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
406 noiseInterferenceW, |
|
407 headerMode), |
|
408 plcpPayloadStart - previous, |
|
409 headerMode); |
|
410 |
|
411 NS_LOG_DEBUG ("Case 3ai - previous in L-SIG and current after payload start: mode=" << headerMode << ", psr=" << psr); |
|
412 } |
|
413 //Case 3aii: HT mixed format |
|
414 else |
|
415 { |
|
416 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
417 noiseInterferenceW, |
|
418 htHeaderMode), |
|
419 plcpPayloadStart - plcpHsigHeaderStart, |
|
420 htHeaderMode); |
|
421 |
|
422 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
423 noiseInterferenceW, |
|
424 headerMode), |
|
425 plcpHsigHeaderStart - previous, |
|
426 headerMode); |
|
427 |
|
428 NS_LOG_DEBUG ("Case 3aii - previous in L-SIG and current after payload start: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
|
429 } |
|
430 } |
|
431 //Case 3b: current in HT-SIG or in HT training symbol. Non HT will not come here since it went in previous if or if the previous if is not true this will be not true |
|
432 else if (current >= plcpHsigHeaderStart) |
|
433 { |
|
434 NS_ASSERT ((preamble != WIFI_PREAMBLE_LONG) && (preamble != WIFI_PREAMBLE_SHORT)); |
|
435 |
|
436 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
407 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
437 noiseInterferenceW, |
408 noiseInterferenceW, |
438 htHeaderMode), |
409 event->GetTxVector ().GetChannelWidth ()), |
439 current - plcpHsigHeaderStart, |
410 plcpPayloadStart - plcpHtTrainingSymbolsStart, |
440 htHeaderMode); |
411 htHeaderMode, event->GetTxVector ()); |
|
412 |
|
413 //Case 3ai: VHT format |
|
414 if (preamble == WIFI_PREAMBLE_VHT) |
|
415 { |
|
416 //VHT-SIG-A is sent using legacy OFDM modulation |
|
417 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
418 noiseInterferenceW, |
|
419 event->GetTxVector ().GetChannelWidth ()), |
|
420 plcpHtTrainingSymbolsStart - previous, |
|
421 headerMode, event->GetTxVector ()); |
|
422 |
|
423 NS_LOG_DEBUG ("Case 3ai - previous is in VHT-SIG-A and current after payload start: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr); |
|
424 } |
|
425 //Case 3aii: HT mixed format of HT greenfield |
|
426 else |
|
427 { |
|
428 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
429 noiseInterferenceW, |
|
430 event->GetTxVector ().GetChannelWidth ()), |
|
431 plcpHtTrainingSymbolsStart - previous, |
|
432 htHeaderMode, event->GetTxVector ()); |
|
433 |
|
434 NS_LOG_DEBUG ("Case 3aii - previous is in HT-SIG and current after payload start: mode=" << htHeaderMode << ", psr=" << psr); |
|
435 } |
|
436 } |
|
437 //Case 3b: current is in (V)HT training or in VHT-SIG-B |
|
438 else if (current >= plcpHtTrainingSymbolsStart) |
|
439 { |
441 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
440 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
442 noiseInterferenceW, |
441 noiseInterferenceW, |
443 headerMode), |
442 event->GetTxVector ().GetChannelWidth ()), |
444 plcpHsigHeaderStart - previous, |
443 current - plcpHtTrainingSymbolsStart, |
445 headerMode); |
444 htHeaderMode, event->GetTxVector ()); |
446 |
445 |
447 NS_LOG_DEBUG ("Case 3b - previous in L-SIG and current in HT-SIG or in HT training symbol: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
446 //Case 3bi: VHT format |
448 } |
447 if (preamble == WIFI_PREAMBLE_VHT) |
449 //Case 3c: current with previous in L-SIG |
448 { |
|
449 //VHT-SIG-A is sent using legacy OFDM modulation |
|
450 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
451 noiseInterferenceW, |
|
452 event->GetTxVector ().GetChannelWidth ()), |
|
453 plcpHtTrainingSymbolsStart - previous, |
|
454 headerMode, event->GetTxVector ()); |
|
455 |
|
456 NS_LOG_DEBUG ("Case 3bi - previous is in VHT-SIG-A and current is in VHT training or in VHT-SIG-B: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr); |
|
457 } |
|
458 //Case 3bii: HT mixed format of HT greenfield |
|
459 else |
|
460 { |
|
461 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
462 noiseInterferenceW, |
|
463 event->GetTxVector ().GetChannelWidth ()), |
|
464 plcpHtTrainingSymbolsStart - previous, |
|
465 htHeaderMode, event->GetTxVector ()); |
|
466 |
|
467 NS_LOG_DEBUG ("Case 3bii - previous is in HT-SIG and current is in HT training: mode=" << htHeaderMode << ", psr=" << psr); |
|
468 } |
|
469 } |
|
470 //Case 3c: current with previous in HT-SIG or VHT-SIG-A |
|
471 else |
|
472 { |
|
473 //Case 3bi: VHT format |
|
474 if (preamble == WIFI_PREAMBLE_VHT) |
|
475 { |
|
476 //VHT-SIG-A is sent using legacy OFDM modulation |
|
477 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
478 noiseInterferenceW, |
|
479 event->GetTxVector ().GetChannelWidth ()), |
|
480 current - previous, |
|
481 headerMode, event->GetTxVector ()); |
|
482 |
|
483 NS_LOG_DEBUG ("Case 3ci - previous with current in VHT-SIG-A: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr); |
|
484 } |
|
485 //Case 3bii: HT mixed format of HT greenfield |
|
486 else |
|
487 { |
|
488 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
489 noiseInterferenceW, |
|
490 event->GetTxVector ().GetChannelWidth ()), |
|
491 current - previous, |
|
492 htHeaderMode, event->GetTxVector ()); |
|
493 |
|
494 NS_LOG_DEBUG ("Case 3cii - previous with current in HT-SIG: mode=" << htHeaderMode << ", psr=" << psr); |
|
495 } |
|
496 } |
|
497 } |
|
498 //Case 4: previous in L-SIG: HT GF will not reach here because it will execute the previous if and exit |
|
499 else if (previous >= plcpHeaderStart) |
|
500 { |
|
501 NS_ASSERT (preamble != WIFI_PREAMBLE_HT_GF); |
|
502 //Case 4a: current after payload start |
|
503 if (current >= plcpPayloadStart) |
|
504 { |
|
505 //Case 4ai: Non (V)HT format |
|
506 if (preamble == WIFI_PREAMBLE_LONG || preamble == WIFI_PREAMBLE_SHORT) |
|
507 { |
|
508 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
509 noiseInterferenceW, |
|
510 event->GetTxVector ().GetChannelWidth ()), |
|
511 plcpPayloadStart - previous, |
|
512 headerMode, event->GetTxVector ()); |
|
513 |
|
514 NS_LOG_DEBUG ("Case 4ai - previous in L-SIG and current after payload start: mode=" << headerMode << ", psr=" << psr); |
|
515 } |
|
516 //Case 4aii: VHT format |
|
517 else if (preamble == WIFI_PREAMBLE_VHT) |
|
518 { |
|
519 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
520 noiseInterferenceW, |
|
521 event->GetTxVector ().GetChannelWidth ()), |
|
522 plcpPayloadStart - plcpHtTrainingSymbolsStart, |
|
523 htHeaderMode, event->GetTxVector ()); |
|
524 |
|
525 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
526 noiseInterferenceW, |
|
527 event->GetTxVector ().GetChannelWidth ()), |
|
528 plcpHtTrainingSymbolsStart - previous, |
|
529 headerMode, event->GetTxVector ()); |
|
530 |
|
531 NS_LOG_DEBUG ("Case 4aii - previous is in L-SIG and current after payload start: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr); |
|
532 } |
|
533 //Case 4aiii: HT mixed format |
|
534 else |
|
535 { |
|
536 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
537 noiseInterferenceW, |
|
538 event->GetTxVector ().GetChannelWidth ()), |
|
539 plcpPayloadStart - plcpHsigHeaderStart, |
|
540 htHeaderMode, event->GetTxVector ()); |
|
541 |
|
542 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
543 noiseInterferenceW, |
|
544 event->GetTxVector ().GetChannelWidth ()), |
|
545 plcpHsigHeaderStart - previous, |
|
546 headerMode, event->GetTxVector ()); |
|
547 |
|
548 NS_LOG_DEBUG ("Case 4aiii - previous in L-SIG and current after payload start: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
|
549 } |
|
550 } |
|
551 //Case 4b: current is in (V)HT training or in VHT-SIG-B. Non (V)HT will not come here since it went in previous if or if the previous if is not true this will be not true |
|
552 else if (current >= plcpHtTrainingSymbolsStart) |
|
553 { |
|
554 NS_ASSERT ((preamble != WIFI_PREAMBLE_LONG) && (preamble != WIFI_PREAMBLE_SHORT)); |
|
555 |
|
556 //Case 4bi: VHT format |
|
557 if (preamble == WIFI_PREAMBLE_VHT) |
|
558 { |
|
559 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
560 noiseInterferenceW, |
|
561 event->GetTxVector ().GetChannelWidth ()), |
|
562 current - plcpHtTrainingSymbolsStart, |
|
563 htHeaderMode, event->GetTxVector ()); |
|
564 |
|
565 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
566 noiseInterferenceW, |
|
567 event->GetTxVector ().GetChannelWidth ()), |
|
568 plcpHtTrainingSymbolsStart - previous, |
|
569 headerMode, event->GetTxVector ()); |
|
570 |
|
571 NS_LOG_DEBUG ("Case 4bi - previous is in L-SIG and current in VHT training or in VHT-SIG-B: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr); |
|
572 } |
|
573 //Case 4bii: HT mixed format |
|
574 else |
|
575 { |
|
576 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
577 noiseInterferenceW, |
|
578 event->GetTxVector ().GetChannelWidth ()), |
|
579 current - plcpHsigHeaderStart, |
|
580 htHeaderMode, event->GetTxVector ()); |
|
581 |
|
582 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
583 noiseInterferenceW, |
|
584 event->GetTxVector ().GetChannelWidth ()), |
|
585 plcpHsigHeaderStart - previous, |
|
586 headerMode, event->GetTxVector ()); |
|
587 |
|
588 NS_LOG_DEBUG ("Case 4bii - previous in L-SIG and current in HT training: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
|
589 } |
|
590 } |
|
591 //Case 4c: current in HT-SIG or in VHT-SIG-A. Non (V)HT will not come here since it went in previous if or if the previous if is not true this will be not true |
|
592 else if (current >= plcpHsigHeaderStart) |
|
593 { |
|
594 NS_ASSERT ((preamble != WIFI_PREAMBLE_LONG) && (preamble != WIFI_PREAMBLE_SHORT)); |
|
595 |
|
596 //Case 4ci: VHT format |
|
597 if (preamble == WIFI_PREAMBLE_VHT) |
|
598 { |
|
599 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
600 noiseInterferenceW, |
|
601 event->GetTxVector ().GetChannelWidth ()), |
|
602 current - previous, |
|
603 headerMode, event->GetTxVector ()); |
|
604 |
|
605 NS_LOG_DEBUG ("Case 4ci - previous is in L-SIG and current in VHT-SIG-A: mode=" << headerMode << ", psr=" << psr); |
|
606 } |
|
607 //Case 4cii: HT mixed format |
|
608 else |
|
609 { |
|
610 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
611 noiseInterferenceW, |
|
612 event->GetTxVector ().GetChannelWidth ()), |
|
613 current - plcpHsigHeaderStart, |
|
614 htHeaderMode, event->GetTxVector ()); |
|
615 |
|
616 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
617 noiseInterferenceW, |
|
618 event->GetTxVector ().GetChannelWidth ()), |
|
619 plcpHsigHeaderStart - previous, |
|
620 headerMode, event->GetTxVector ()); |
|
621 |
|
622 NS_LOG_DEBUG ("Case 4cii - previous in L-SIG and current in HT-SIG: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
|
623 } |
|
624 } |
|
625 //Case 4d: current with previous in L-SIG |
450 else |
626 else |
451 { |
627 { |
452 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
628 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
453 noiseInterferenceW, |
629 noiseInterferenceW, |
454 headerMode), |
630 event->GetTxVector ().GetChannelWidth ()), |
455 current - previous, |
631 current - previous, |
456 headerMode); |
632 headerMode, event->GetTxVector ()); |
457 |
633 |
458 NS_LOG_DEBUG ("Case 3c - current with previous in L-SIG: mode=" << headerMode << ", psr=" << psr); |
634 NS_LOG_DEBUG ("Case 3c - current with previous in L-SIG: mode=" << headerMode << ", psr=" << psr); |
459 } |
635 } |
460 } |
636 } |
461 //Case 4: previous is in the preamble works for all cases |
637 //Case 5: previous is in the preamble works for all cases |
462 else |
638 else |
463 { |
639 { |
|
640 //Case 5a: current after payload start |
464 if (current >= plcpPayloadStart) |
641 if (current >= plcpPayloadStart) |
465 { |
642 { |
466 //Non HT format (No HT-SIG or Training Symbols) |
643 //Case 5ai: Non HT format (No HT-SIG or Training Symbols) |
467 if (preamble == WIFI_PREAMBLE_LONG || preamble == WIFI_PREAMBLE_SHORT) |
644 if (preamble == WIFI_PREAMBLE_LONG || preamble == WIFI_PREAMBLE_SHORT) |
468 { |
645 { |
469 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
646 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
470 noiseInterferenceW, |
647 noiseInterferenceW, |
471 headerMode), |
648 event->GetTxVector ().GetChannelWidth ()), |
472 plcpPayloadStart - plcpHeaderStart, |
649 plcpPayloadStart - plcpHeaderStart, |
473 headerMode); |
650 headerMode, event->GetTxVector ()); |
474 |
651 |
475 NS_LOG_DEBUG ("Case 4a - previous is in the preamble: mode=" << headerMode << ", psr=" << psr); |
652 NS_LOG_DEBUG ("Case 5a - previous is in the preamble and current is after payload start: mode=" << headerMode << ", psr=" << psr); |
476 } |
653 } |
477 //HT format |
654 //Case 5aii: VHT format |
|
655 else if (preamble == WIFI_PREAMBLE_VHT) |
|
656 { |
|
657 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
658 noiseInterferenceW, |
|
659 event->GetTxVector ().GetChannelWidth ()), |
|
660 plcpPayloadStart - plcpHtTrainingSymbolsStart, |
|
661 htHeaderMode, event->GetTxVector ()); |
|
662 |
|
663 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
664 noiseInterferenceW, |
|
665 event->GetTxVector ().GetChannelWidth ()), |
|
666 plcpHtTrainingSymbolsStart - plcpHeaderStart, |
|
667 headerMode, event->GetTxVector ()); |
|
668 |
|
669 NS_LOG_DEBUG ("Case 5aii - previous is in the preamble and current is after payload start: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr); |
|
670 } |
|
671 |
|
672 //Case 5aiii: HT format |
478 else |
673 else |
479 { |
674 { |
480 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
675 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
481 noiseInterferenceW, |
676 noiseInterferenceW, |
482 htHeaderMode), |
677 event->GetTxVector ().GetChannelWidth ()), |
483 plcpPayloadStart - plcpHsigHeaderStart, |
678 plcpPayloadStart - plcpHsigHeaderStart, |
484 htHeaderMode); |
679 htHeaderMode, event->GetTxVector ()); |
485 |
680 |
486 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
681 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
487 noiseInterferenceW, |
682 noiseInterferenceW, |
488 headerMode), |
683 event->GetTxVector ().GetChannelWidth ()), |
489 plcpHsigHeaderStart - plcpHeaderStart, //HT GF: plcpHsigHeaderStart - plcpHeaderStart = 0 |
684 plcpHsigHeaderStart - plcpHeaderStart, //HT GF: plcpHsigHeaderStart - plcpHeaderStart = 0 |
490 headerMode); |
685 headerMode, event->GetTxVector ()); |
491 |
686 |
492 NS_LOG_DEBUG ("Case 4a - previous is in the preamble: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
687 NS_LOG_DEBUG ("Case 4a - previous is in the preamble and current is after payload start: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
493 } |
688 } |
494 } |
689 } |
495 //non HT will not come here |
690 //Case 5b: current is in (V)HT training or in VHT-SIG-B. Non (V)HT will not come here since it went in previous if or if the previous if is not true this will be not true |
|
691 else if (current >= plcpHtTrainingSymbolsStart) |
|
692 { |
|
693 NS_ASSERT ((preamble != WIFI_PREAMBLE_LONG) && (preamble != WIFI_PREAMBLE_SHORT)); |
|
694 |
|
695 //Case 5bi: VHT format |
|
696 if (preamble == WIFI_PREAMBLE_VHT) |
|
697 { |
|
698 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
699 noiseInterferenceW, |
|
700 event->GetTxVector ().GetChannelWidth ()), |
|
701 current - plcpHtTrainingSymbolsStart, |
|
702 htHeaderMode, event->GetTxVector ()); |
|
703 |
|
704 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
705 noiseInterferenceW, |
|
706 event->GetTxVector ().GetChannelWidth ()), |
|
707 plcpHtTrainingSymbolsStart - plcpHeaderStart, |
|
708 headerMode, event->GetTxVector ()); |
|
709 |
|
710 NS_LOG_DEBUG ("Case 5bi - previous is in the preamble and current in VHT training or in VHT-SIG-B: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr); |
|
711 } |
|
712 //Case 45ii: HT mixed format |
|
713 else |
|
714 { |
|
715 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
716 noiseInterferenceW, |
|
717 event->GetTxVector ().GetChannelWidth ()), |
|
718 current - plcpHsigHeaderStart, |
|
719 htHeaderMode, event->GetTxVector ()); |
|
720 |
|
721 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
722 noiseInterferenceW, |
|
723 event->GetTxVector ().GetChannelWidth ()), |
|
724 plcpHsigHeaderStart - plcpHeaderStart, |
|
725 headerMode, event->GetTxVector ()); |
|
726 |
|
727 NS_LOG_DEBUG ("Case 5bii - previous is in the preamble and current in HT training: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
|
728 } |
|
729 } |
|
730 //Case 5c: current in HT-SIG or in VHT-SIG-A. Non (V)HT will not come here since it went in previous if or if the previous if is not true this will be not true |
496 else if (current >= plcpHsigHeaderStart) |
731 else if (current >= plcpHsigHeaderStart) |
497 { |
732 { |
498 NS_ASSERT ((preamble != WIFI_PREAMBLE_LONG) && (preamble != WIFI_PREAMBLE_SHORT)); |
733 NS_ASSERT ((preamble != WIFI_PREAMBLE_LONG) && (preamble != WIFI_PREAMBLE_SHORT)); |
|
734 |
|
735 //Case 5ci: VHT format |
|
736 if (preamble == WIFI_PREAMBLE_VHT) |
|
737 { |
|
738 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
739 noiseInterferenceW, |
|
740 event->GetTxVector ().GetChannelWidth ()), |
|
741 current - plcpHeaderStart, |
|
742 headerMode, event->GetTxVector ()); |
|
743 |
|
744 NS_LOG_DEBUG ("Case 5ci - previous is in preamble and current in VHT-SIG-A: mode=" << headerMode << ", psr=" << psr); |
|
745 } |
|
746 //Case 5cii: HT mixed format |
|
747 else |
|
748 { |
|
749 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
750 noiseInterferenceW, |
|
751 event->GetTxVector ().GetChannelWidth ()), |
|
752 current - plcpHsigHeaderStart, |
|
753 htHeaderMode, event->GetTxVector ()); |
|
754 |
|
755 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
756 noiseInterferenceW, |
|
757 event->GetTxVector ().GetChannelWidth ()), |
|
758 plcpHsigHeaderStart - plcpHeaderStart, //HT GF: plcpHsigHeaderStart - plcpHeaderStart = 0 |
|
759 headerMode, event->GetTxVector ()); |
|
760 |
|
761 NS_LOG_DEBUG ("Case 5cii - previous in preamble and current in HT-SIG: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
|
762 } |
|
763 } |
|
764 //Case 5d: current is in L-SIG. HT GF will not come here |
|
765 else if (current >= plcpHeaderStart) |
|
766 { |
|
767 NS_ASSERT (preamble != WIFI_PREAMBLE_HT_GF); |
499 |
768 |
500 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
769 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
501 noiseInterferenceW, |
770 noiseInterferenceW, |
502 htHeaderMode), |
771 event->GetTxVector ().GetChannelWidth ()), |
503 current - plcpHsigHeaderStart, |
|
504 htHeaderMode); |
|
505 |
|
506 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
507 noiseInterferenceW, |
|
508 headerMode), |
|
509 plcpHsigHeaderStart - plcpHeaderStart, //HT GF: plcpHsigHeaderStart - plcpHeaderStart = 0 |
|
510 headerMode); |
|
511 |
|
512 NS_LOG_DEBUG ("Case 4b - previous is in the preamble: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
|
513 } |
|
514 //GF will not come here |
|
515 else if (current >= plcpHeaderStart) |
|
516 { |
|
517 NS_ASSERT (preamble != WIFI_PREAMBLE_HT_GF); |
|
518 |
|
519 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
|
520 noiseInterferenceW, |
|
521 headerMode), |
|
522 current - plcpHeaderStart, |
772 current - plcpHeaderStart, |
523 headerMode); |
773 headerMode, event->GetTxVector ()); |
524 |
774 |
525 NS_LOG_DEBUG ("Case 4c - previous is in the preamble: mode=" << headerMode << ", psr=" << psr); |
775 NS_LOG_DEBUG ("Case 5d - previous is in the preamble and current is in L-SIG: mode=" << headerMode << ", psr=" << psr); |
526 } |
776 } |
527 } |
777 } |
528 |
778 |
529 noiseInterferenceW += (*j).GetDelta (); |
779 noiseInterferenceW += (*j).GetDelta (); |
530 previous = (*j).GetTime (); |
780 previous = (*j).GetTime (); |