|
|
| 36 |
|
36 |
|
| 37 |
InterferenceHelper::Event::Event (uint32_t size, WifiTxVector txVector, |
37 |
InterferenceHelper::Event::Event (uint32_t size, WifiTxVector txVector, |
| 38 |
enum WifiPreamble preamble, |
38 |
enum WifiPreamble preamble, |
| 39 |
Time duration, double rxPower) |
39 |
Time duration, double rxPower, |
|
|
40 |
uint8_t nbOfTxAntennas) |
| 40 |
: m_size (size), |
41 |
: m_size (size), |
| 41 |
m_txVector (txVector), |
42 |
m_txVector (txVector), |
| 42 |
m_preamble (preamble), |
43 |
m_preamble (preamble), |
| 43 |
m_startTime (Simulator::Now ()), |
44 |
m_startTime (Simulator::Now ()), |
| 44 |
m_endTime (m_startTime + duration), |
45 |
m_endTime (m_startTime + duration), |
| 45 |
m_rxPowerW (rxPower) |
46 |
m_rxPowerW (rxPower), |
|
|
47 |
m_nbOfTxAntennas (nbOfTxAntennas) |
| 46 |
{ |
48 |
{ |
| 47 |
} |
49 |
} |
| 48 |
|
50 |
|
|
|
| 98 |
return m_preamble; |
100 |
return m_preamble; |
| 99 |
} |
101 |
} |
| 100 |
|
102 |
|
|
|
103 |
uint8_t |
| 104 |
InterferenceHelper::Event::GetNbOfTxAntennas (void) const |
| 105 |
{ |
| 106 |
return m_nbOfTxAntennas; |
| 107 |
} |
| 108 |
|
| 101 |
|
109 |
|
| 102 |
/**************************************************************** |
110 |
/**************************************************************** |
| 103 |
* Class which records SNIR change events for a |
111 |
* Class which records SNIR change events for a |
|
|
| 149 |
Ptr<InterferenceHelper::Event> |
157 |
Ptr<InterferenceHelper::Event> |
| 150 |
InterferenceHelper::Add (uint32_t size, WifiTxVector txVector, |
158 |
InterferenceHelper::Add (uint32_t size, WifiTxVector txVector, |
| 151 |
enum WifiPreamble preamble, |
159 |
enum WifiPreamble preamble, |
| 152 |
Time duration, double rxPowerW) |
160 |
Time duration, double rxPowerW, |
|
|
161 |
uint8_t nbOfTxAntennas) |
| 153 |
{ |
162 |
{ |
| 154 |
Ptr<InterferenceHelper::Event> event; |
163 |
Ptr<InterferenceHelper::Event> event; |
| 155 |
|
164 |
|
|
|
| 157 |
txVector, |
166 |
txVector, |
| 158 |
preamble, |
167 |
preamble, |
| 159 |
duration, |
168 |
duration, |
| 160 |
rxPowerW); |
169 |
rxPowerW, |
|
|
170 |
nbOfTxAntennas); |
| 161 |
AppendEvent (event); |
171 |
AppendEvent (event); |
| 162 |
return event; |
172 |
return event; |
| 163 |
} |
173 |
} |
|
|
| 168 |
// Parameters other than duration and rxPowerW are unused for this type |
178 |
// Parameters other than duration and rxPowerW are unused for this type |
| 169 |
// of signal, so we provide dummy versions |
179 |
// of signal, so we provide dummy versions |
| 170 |
WifiTxVector fakeTxVector; |
180 |
WifiTxVector fakeTxVector; |
| 171 |
Add (0, fakeTxVector, WIFI_PREAMBLE_NONE, duration, rxPowerW); |
181 |
Add (0, fakeTxVector, WIFI_PREAMBLE_NONE, duration, rxPowerW, 1); |
| 172 |
} |
182 |
} |
| 173 |
|
183 |
|
| 174 |
void |
184 |
void |
|
|
| 195 |
return m_errorRateModel; |
205 |
return m_errorRateModel; |
| 196 |
} |
206 |
} |
| 197 |
|
207 |
|
|
|
208 |
void |
| 209 |
InterferenceHelper::SetNumberOfReceiveAntennas (uint32_t rx) |
| 210 |
{ |
| 211 |
m_numRxAntennas = rx; |
| 212 |
} |
| 213 |
|
| 198 |
Time |
214 |
Time |
| 199 |
InterferenceHelper::GetEnergyDuration (double energyW) |
215 |
InterferenceHelper::GetEnergyDuration (double energyW) |
| 200 |
{ |
216 |
{ |
|
|
| 275 |
} |
291 |
} |
| 276 |
|
292 |
|
| 277 |
double |
293 |
double |
| 278 |
InterferenceHelper::CalculateChunkSuccessRate (double snir, Time duration, WifiMode mode, WifiTxVector txVector) const |
294 |
InterferenceHelper::CalculateChunkSuccessRate (double snir, Time duration, WifiMode mode, WifiTxVector txVector, uint8_t nbOfTxAntennas) const |
| 279 |
{ |
295 |
{ |
| 280 |
if (duration == NanoSeconds (0)) |
296 |
if (duration == NanoSeconds (0)) |
| 281 |
{ |
297 |
{ |
|
|
| 283 |
} |
299 |
} |
| 284 |
uint32_t rate = mode.GetPhyRate (txVector); |
300 |
uint32_t rate = mode.GetPhyRate (txVector); |
| 285 |
uint64_t nbits = (uint64_t)(rate * duration.GetSeconds ()); |
301 |
uint64_t nbits = (uint64_t)(rate * duration.GetSeconds ()); |
|
|
302 |
if (txVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_HT || txVector.GetMode ().GetModulationClass () == WIFI_MOD_CLASS_VHT) |
| 303 |
{ |
| 304 |
nbits /= txVector.GetNss (); // divide effective number of bits by NSS to achieve same chunk error rate as SISO for AWGN |
| 305 |
snir *= (nbOfTxAntennas * m_numRxAntennas); // compute gain offered by MIMO, SIMO or MISO compared to SISO for AWGN |
| 306 |
} |
| 286 |
double csr = m_errorRateModel->GetChunkSuccessRate (mode, txVector, snir, (uint32_t)nbits); |
307 |
double csr = m_errorRateModel->GetChunkSuccessRate (mode, txVector, snir, (uint32_t)nbits); |
| 287 |
return csr; |
308 |
return csr; |
| 288 |
} |
309 |
} |
|
|
| 302 |
Time plcpPayloadStart = plcpHtTrainingSymbolsStart + WifiPhy::GetPlcpHtTrainingSymbolDuration (preamble, event->GetTxVector ()) + WifiPhy::GetPlcpVhtSigBDuration (preamble); //packet start time + preamble + L-SIG + HT-SIG or VHT-SIG-A (A1 + A2) + (V)HT Training + VHT-SIG-B |
323 |
Time plcpPayloadStart = plcpHtTrainingSymbolsStart + WifiPhy::GetPlcpHtTrainingSymbolDuration (preamble, event->GetTxVector ()) + WifiPhy::GetPlcpVhtSigBDuration (preamble); //packet start time + preamble + L-SIG + HT-SIG or VHT-SIG-A (A1 + A2) + (V)HT Training + VHT-SIG-B |
| 303 |
double noiseInterferenceW = (*j).GetDelta (); |
324 |
double noiseInterferenceW = (*j).GetDelta (); |
| 304 |
double powerW = event->GetRxPowerW (); |
325 |
double powerW = event->GetRxPowerW (); |
|
|
326 |
uint8_t nbOfTxAntennas = event->GetNbOfTxAntennas (); |
| 305 |
j++; |
327 |
j++; |
| 306 |
while (ni->end () != j) |
328 |
while (ni->end () != j) |
| 307 |
{ |
329 |
{ |
|
|
| 315 |
noiseInterferenceW, |
337 |
noiseInterferenceW, |
| 316 |
event->GetTxVector ().GetChannelWidth ()), |
338 |
event->GetTxVector ().GetChannelWidth ()), |
| 317 |
current - previous, |
339 |
current - previous, |
| 318 |
payloadMode, event->GetTxVector ()); |
340 |
payloadMode, event->GetTxVector (), nbOfTxAntennas); |
| 319 |
|
341 |
|
| 320 |
NS_LOG_DEBUG ("Both previous and current point to the payload: mode=" << payloadMode << ", psr=" << psr); |
342 |
NS_LOG_DEBUG ("Both previous and current point to the payload: mode=" << payloadMode << ", psr=" << psr); |
| 321 |
} |
343 |
} |
|
|
| 326 |
noiseInterferenceW, |
348 |
noiseInterferenceW, |
| 327 |
event->GetTxVector ().GetChannelWidth ()), |
349 |
event->GetTxVector ().GetChannelWidth ()), |
| 328 |
current - plcpPayloadStart, |
350 |
current - plcpPayloadStart, |
| 329 |
payloadMode, event->GetTxVector ()); |
351 |
payloadMode, event->GetTxVector (), nbOfTxAntennas); |
| 330 |
NS_LOG_DEBUG ("previous is before payload and current is in the payload: mode=" << payloadMode << ", psr=" << psr); |
352 |
NS_LOG_DEBUG ("previous is before payload and current is in the payload: mode=" << payloadMode << ", psr=" << psr); |
| 331 |
} |
353 |
} |
| 332 |
|
354 |
|
|
|
| 366 |
Time plcpPayloadStart = plcpHtTrainingSymbolsStart + WifiPhy::GetPlcpHtTrainingSymbolDuration (preamble, event->GetTxVector ()) + WifiPhy::GetPlcpVhtSigBDuration (preamble); //packet start time + preamble + L-SIG + HT-SIG or VHT-SIG-A (A1 + A2) + (V)HT Training + VHT-SIG-B |
388 |
Time plcpPayloadStart = plcpHtTrainingSymbolsStart + WifiPhy::GetPlcpHtTrainingSymbolDuration (preamble, event->GetTxVector ()) + WifiPhy::GetPlcpVhtSigBDuration (preamble); //packet start time + preamble + L-SIG + HT-SIG or VHT-SIG-A (A1 + A2) + (V)HT Training + VHT-SIG-B |
| 367 |
double noiseInterferenceW = (*j).GetDelta (); |
389 |
double noiseInterferenceW = (*j).GetDelta (); |
| 368 |
double powerW = event->GetRxPowerW (); |
390 |
double powerW = event->GetRxPowerW (); |
|
|
391 |
uint8_t nbOfTxAntennas = event->GetNbOfTxAntennas (); |
| 369 |
j++; |
392 |
j++; |
| 370 |
while (ni->end () != j) |
393 |
while (ni->end () != j) |
| 371 |
{ |
394 |
{ |
|
|
| 389 |
noiseInterferenceW, |
412 |
noiseInterferenceW, |
| 390 |
event->GetTxVector ().GetChannelWidth ()), |
413 |
event->GetTxVector ().GetChannelWidth ()), |
| 391 |
plcpPayloadStart - previous, |
414 |
plcpPayloadStart - previous, |
| 392 |
htHeaderMode, event->GetTxVector ()); |
415 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 393 |
|
416 |
|
| 394 |
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); |
417 |
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); |
| 395 |
} |
418 |
} |
|
|
| 400 |
noiseInterferenceW, |
423 |
noiseInterferenceW, |
| 401 |
event->GetTxVector ().GetChannelWidth ()), |
424 |
event->GetTxVector ().GetChannelWidth ()), |
| 402 |
current - previous, |
425 |
current - previous, |
| 403 |
htHeaderMode, event->GetTxVector ()); |
426 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 404 |
|
427 |
|
| 405 |
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); |
428 |
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); |
| 406 |
} |
429 |
} |
|
|
| 416 |
noiseInterferenceW, |
439 |
noiseInterferenceW, |
| 417 |
event->GetTxVector ().GetChannelWidth ()), |
440 |
event->GetTxVector ().GetChannelWidth ()), |
| 418 |
plcpPayloadStart - plcpHtTrainingSymbolsStart, |
441 |
plcpPayloadStart - plcpHtTrainingSymbolsStart, |
| 419 |
htHeaderMode, event->GetTxVector ()); |
442 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 420 |
|
443 |
|
| 421 |
//Case 3ai: VHT format |
444 |
//Case 3ai: VHT format |
| 422 |
if (preamble == WIFI_PREAMBLE_VHT) |
445 |
if (preamble == WIFI_PREAMBLE_VHT) |
|
|
| 426 |
noiseInterferenceW, |
449 |
noiseInterferenceW, |
| 427 |
event->GetTxVector ().GetChannelWidth ()), |
450 |
event->GetTxVector ().GetChannelWidth ()), |
| 428 |
plcpHtTrainingSymbolsStart - previous, |
451 |
plcpHtTrainingSymbolsStart - previous, |
| 429 |
headerMode, event->GetTxVector ()); |
452 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 430 |
|
453 |
|
| 431 |
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); |
454 |
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); |
| 432 |
} |
455 |
} |
|
|
| 437 |
noiseInterferenceW, |
460 |
noiseInterferenceW, |
| 438 |
event->GetTxVector ().GetChannelWidth ()), |
461 |
event->GetTxVector ().GetChannelWidth ()), |
| 439 |
plcpHtTrainingSymbolsStart - previous, |
462 |
plcpHtTrainingSymbolsStart - previous, |
| 440 |
htHeaderMode, event->GetTxVector ()); |
463 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 441 |
|
464 |
|
| 442 |
NS_LOG_DEBUG ("Case 3aii - previous is in HT-SIG and current after payload start: mode=" << htHeaderMode << ", psr=" << psr); |
465 |
NS_LOG_DEBUG ("Case 3aii - previous is in HT-SIG and current after payload start: mode=" << htHeaderMode << ", psr=" << psr); |
| 443 |
} |
466 |
} |
|
|
| 449 |
noiseInterferenceW, |
472 |
noiseInterferenceW, |
| 450 |
event->GetTxVector ().GetChannelWidth ()), |
473 |
event->GetTxVector ().GetChannelWidth ()), |
| 451 |
current - plcpHtTrainingSymbolsStart, |
474 |
current - plcpHtTrainingSymbolsStart, |
| 452 |
htHeaderMode, event->GetTxVector ()); |
475 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 453 |
|
476 |
|
| 454 |
//Case 3bi: VHT format |
477 |
//Case 3bi: VHT format |
| 455 |
if (preamble == WIFI_PREAMBLE_VHT) |
478 |
if (preamble == WIFI_PREAMBLE_VHT) |
|
|
| 459 |
noiseInterferenceW, |
482 |
noiseInterferenceW, |
| 460 |
event->GetTxVector ().GetChannelWidth ()), |
483 |
event->GetTxVector ().GetChannelWidth ()), |
| 461 |
plcpHtTrainingSymbolsStart - previous, |
484 |
plcpHtTrainingSymbolsStart - previous, |
| 462 |
headerMode, event->GetTxVector ()); |
485 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 463 |
|
486 |
|
| 464 |
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); |
487 |
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); |
| 465 |
} |
488 |
} |
|
|
| 470 |
noiseInterferenceW, |
493 |
noiseInterferenceW, |
| 471 |
event->GetTxVector ().GetChannelWidth ()), |
494 |
event->GetTxVector ().GetChannelWidth ()), |
| 472 |
plcpHtTrainingSymbolsStart - previous, |
495 |
plcpHtTrainingSymbolsStart - previous, |
| 473 |
htHeaderMode, event->GetTxVector ()); |
496 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 474 |
|
497 |
|
| 475 |
NS_LOG_DEBUG ("Case 3bii - previous is in HT-SIG and current is in HT training: mode=" << htHeaderMode << ", psr=" << psr); |
498 |
NS_LOG_DEBUG ("Case 3bii - previous is in HT-SIG and current is in HT training: mode=" << htHeaderMode << ", psr=" << psr); |
| 476 |
} |
499 |
} |
|
|
| 486 |
noiseInterferenceW, |
509 |
noiseInterferenceW, |
| 487 |
event->GetTxVector ().GetChannelWidth ()), |
510 |
event->GetTxVector ().GetChannelWidth ()), |
| 488 |
current - previous, |
511 |
current - previous, |
| 489 |
headerMode, event->GetTxVector ()); |
512 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 490 |
|
513 |
|
| 491 |
NS_LOG_DEBUG ("Case 3ci - previous with current in VHT-SIG-A: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr); |
514 |
NS_LOG_DEBUG ("Case 3ci - previous with current in VHT-SIG-A: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr); |
| 492 |
} |
515 |
} |
|
|
| 497 |
noiseInterferenceW, |
520 |
noiseInterferenceW, |
| 498 |
event->GetTxVector ().GetChannelWidth ()), |
521 |
event->GetTxVector ().GetChannelWidth ()), |
| 499 |
current - previous, |
522 |
current - previous, |
| 500 |
htHeaderMode, event->GetTxVector ()); |
523 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 501 |
|
524 |
|
| 502 |
NS_LOG_DEBUG ("Case 3cii - previous with current in HT-SIG: mode=" << htHeaderMode << ", psr=" << psr); |
525 |
NS_LOG_DEBUG ("Case 3cii - previous with current in HT-SIG: mode=" << htHeaderMode << ", psr=" << psr); |
| 503 |
} |
526 |
} |
|
|
| 517 |
noiseInterferenceW, |
540 |
noiseInterferenceW, |
| 518 |
event->GetTxVector ().GetChannelWidth ()), |
541 |
event->GetTxVector ().GetChannelWidth ()), |
| 519 |
plcpPayloadStart - previous, |
542 |
plcpPayloadStart - previous, |
| 520 |
headerMode, event->GetTxVector ()); |
543 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 521 |
|
544 |
|
| 522 |
NS_LOG_DEBUG ("Case 4ai - previous in L-SIG and current after payload start: mode=" << headerMode << ", psr=" << psr); |
545 |
NS_LOG_DEBUG ("Case 4ai - previous in L-SIG and current after payload start: mode=" << headerMode << ", psr=" << psr); |
| 523 |
} |
546 |
} |
|
|
| 528 |
noiseInterferenceW, |
551 |
noiseInterferenceW, |
| 529 |
event->GetTxVector ().GetChannelWidth ()), |
552 |
event->GetTxVector ().GetChannelWidth ()), |
| 530 |
plcpPayloadStart - plcpHtTrainingSymbolsStart, |
553 |
plcpPayloadStart - plcpHtTrainingSymbolsStart, |
| 531 |
htHeaderMode, event->GetTxVector ()); |
554 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 532 |
|
555 |
|
| 533 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
556 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
| 534 |
noiseInterferenceW, |
557 |
noiseInterferenceW, |
| 535 |
event->GetTxVector ().GetChannelWidth ()), |
558 |
event->GetTxVector ().GetChannelWidth ()), |
| 536 |
plcpHtTrainingSymbolsStart - previous, |
559 |
plcpHtTrainingSymbolsStart - previous, |
| 537 |
headerMode, event->GetTxVector ()); |
560 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 538 |
|
561 |
|
| 539 |
NS_LOG_DEBUG ("Case 4aii - previous is in L-SIG and current after payload start: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr); |
562 |
NS_LOG_DEBUG ("Case 4aii - previous is in L-SIG and current after payload start: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr); |
| 540 |
} |
563 |
} |
|
|
| 545 |
noiseInterferenceW, |
568 |
noiseInterferenceW, |
| 546 |
event->GetTxVector ().GetChannelWidth ()), |
569 |
event->GetTxVector ().GetChannelWidth ()), |
| 547 |
plcpPayloadStart - plcpHsigHeaderStart, |
570 |
plcpPayloadStart - plcpHsigHeaderStart, |
| 548 |
htHeaderMode, event->GetTxVector ()); |
571 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 549 |
|
572 |
|
| 550 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
573 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
| 551 |
noiseInterferenceW, |
574 |
noiseInterferenceW, |
| 552 |
event->GetTxVector ().GetChannelWidth ()), |
575 |
event->GetTxVector ().GetChannelWidth ()), |
| 553 |
plcpHsigHeaderStart - previous, |
576 |
plcpHsigHeaderStart - previous, |
| 554 |
headerMode, event->GetTxVector ()); |
577 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 555 |
|
578 |
|
| 556 |
NS_LOG_DEBUG ("Case 4aiii - previous in L-SIG and current after payload start: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
579 |
NS_LOG_DEBUG ("Case 4aiii - previous in L-SIG and current after payload start: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
| 557 |
} |
580 |
} |
|
|
| 568 |
noiseInterferenceW, |
591 |
noiseInterferenceW, |
| 569 |
event->GetTxVector ().GetChannelWidth ()), |
592 |
event->GetTxVector ().GetChannelWidth ()), |
| 570 |
current - plcpHtTrainingSymbolsStart, |
593 |
current - plcpHtTrainingSymbolsStart, |
| 571 |
htHeaderMode, event->GetTxVector ()); |
594 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 572 |
|
595 |
|
| 573 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
596 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
| 574 |
noiseInterferenceW, |
597 |
noiseInterferenceW, |
| 575 |
event->GetTxVector ().GetChannelWidth ()), |
598 |
event->GetTxVector ().GetChannelWidth ()), |
| 576 |
plcpHtTrainingSymbolsStart - previous, |
599 |
plcpHtTrainingSymbolsStart - previous, |
| 577 |
headerMode, event->GetTxVector ()); |
600 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 578 |
|
601 |
|
| 579 |
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); |
602 |
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); |
| 580 |
} |
603 |
} |
|
|
| 585 |
noiseInterferenceW, |
608 |
noiseInterferenceW, |
| 586 |
event->GetTxVector ().GetChannelWidth ()), |
609 |
event->GetTxVector ().GetChannelWidth ()), |
| 587 |
current - plcpHsigHeaderStart, |
610 |
current - plcpHsigHeaderStart, |
| 588 |
htHeaderMode, event->GetTxVector ()); |
611 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 589 |
|
612 |
|
| 590 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
613 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
| 591 |
noiseInterferenceW, |
614 |
noiseInterferenceW, |
| 592 |
event->GetTxVector ().GetChannelWidth ()), |
615 |
event->GetTxVector ().GetChannelWidth ()), |
| 593 |
plcpHsigHeaderStart - previous, |
616 |
plcpHsigHeaderStart - previous, |
| 594 |
headerMode, event->GetTxVector ()); |
617 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 595 |
|
618 |
|
| 596 |
NS_LOG_DEBUG ("Case 4bii - previous in L-SIG and current in HT training: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
619 |
NS_LOG_DEBUG ("Case 4bii - previous in L-SIG and current in HT training: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
| 597 |
} |
620 |
} |
|
|
| 608 |
noiseInterferenceW, |
631 |
noiseInterferenceW, |
| 609 |
event->GetTxVector ().GetChannelWidth ()), |
632 |
event->GetTxVector ().GetChannelWidth ()), |
| 610 |
current - previous, |
633 |
current - previous, |
| 611 |
headerMode, event->GetTxVector ()); |
634 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 612 |
|
635 |
|
| 613 |
NS_LOG_DEBUG ("Case 4ci - previous is in L-SIG and current in VHT-SIG-A: mode=" << headerMode << ", psr=" << psr); |
636 |
NS_LOG_DEBUG ("Case 4ci - previous is in L-SIG and current in VHT-SIG-A: mode=" << headerMode << ", psr=" << psr); |
| 614 |
} |
637 |
} |
|
|
| 619 |
noiseInterferenceW, |
642 |
noiseInterferenceW, |
| 620 |
event->GetTxVector ().GetChannelWidth ()), |
643 |
event->GetTxVector ().GetChannelWidth ()), |
| 621 |
current - plcpHsigHeaderStart, |
644 |
current - plcpHsigHeaderStart, |
| 622 |
htHeaderMode, event->GetTxVector ()); |
645 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 623 |
|
646 |
|
| 624 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
647 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
| 625 |
noiseInterferenceW, |
648 |
noiseInterferenceW, |
| 626 |
event->GetTxVector ().GetChannelWidth ()), |
649 |
event->GetTxVector ().GetChannelWidth ()), |
| 627 |
plcpHsigHeaderStart - previous, |
650 |
plcpHsigHeaderStart - previous, |
| 628 |
headerMode, event->GetTxVector ()); |
651 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 629 |
|
652 |
|
| 630 |
NS_LOG_DEBUG ("Case 4cii - previous in L-SIG and current in HT-SIG: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
653 |
NS_LOG_DEBUG ("Case 4cii - previous in L-SIG and current in HT-SIG: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
| 631 |
} |
654 |
} |
|
|
| 637 |
noiseInterferenceW, |
660 |
noiseInterferenceW, |
| 638 |
event->GetTxVector ().GetChannelWidth ()), |
661 |
event->GetTxVector ().GetChannelWidth ()), |
| 639 |
current - previous, |
662 |
current - previous, |
| 640 |
headerMode, event->GetTxVector ()); |
663 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 641 |
|
664 |
|
| 642 |
NS_LOG_DEBUG ("Case 3c - current with previous in L-SIG: mode=" << headerMode << ", psr=" << psr); |
665 |
NS_LOG_DEBUG ("Case 3c - current with previous in L-SIG: mode=" << headerMode << ", psr=" << psr); |
| 643 |
} |
666 |
} |
|
|
| 655 |
noiseInterferenceW, |
678 |
noiseInterferenceW, |
| 656 |
event->GetTxVector ().GetChannelWidth ()), |
679 |
event->GetTxVector ().GetChannelWidth ()), |
| 657 |
plcpPayloadStart - plcpHeaderStart, |
680 |
plcpPayloadStart - plcpHeaderStart, |
| 658 |
headerMode, event->GetTxVector ()); |
681 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 659 |
|
682 |
|
| 660 |
NS_LOG_DEBUG ("Case 5a - previous is in the preamble and current is after payload start: mode=" << headerMode << ", psr=" << psr); |
683 |
NS_LOG_DEBUG ("Case 5a - previous is in the preamble and current is after payload start: mode=" << headerMode << ", psr=" << psr); |
| 661 |
} |
684 |
} |
|
|
| 666 |
noiseInterferenceW, |
689 |
noiseInterferenceW, |
| 667 |
event->GetTxVector ().GetChannelWidth ()), |
690 |
event->GetTxVector ().GetChannelWidth ()), |
| 668 |
plcpPayloadStart - plcpHtTrainingSymbolsStart, |
691 |
plcpPayloadStart - plcpHtTrainingSymbolsStart, |
| 669 |
htHeaderMode, event->GetTxVector ()); |
692 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 670 |
|
693 |
|
| 671 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
694 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
| 672 |
noiseInterferenceW, |
695 |
noiseInterferenceW, |
| 673 |
event->GetTxVector ().GetChannelWidth ()), |
696 |
event->GetTxVector ().GetChannelWidth ()), |
| 674 |
plcpHtTrainingSymbolsStart - plcpHeaderStart, |
697 |
plcpHtTrainingSymbolsStart - plcpHeaderStart, |
| 675 |
headerMode, event->GetTxVector ()); |
698 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 676 |
|
699 |
|
| 677 |
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); |
700 |
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); |
| 678 |
} |
701 |
} |
|
|
| 684 |
noiseInterferenceW, |
707 |
noiseInterferenceW, |
| 685 |
event->GetTxVector ().GetChannelWidth ()), |
708 |
event->GetTxVector ().GetChannelWidth ()), |
| 686 |
plcpPayloadStart - plcpHsigHeaderStart, |
709 |
plcpPayloadStart - plcpHsigHeaderStart, |
| 687 |
htHeaderMode, event->GetTxVector ()); |
710 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 688 |
|
711 |
|
| 689 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
712 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
| 690 |
noiseInterferenceW, |
713 |
noiseInterferenceW, |
| 691 |
event->GetTxVector ().GetChannelWidth ()), |
714 |
event->GetTxVector ().GetChannelWidth ()), |
| 692 |
plcpHsigHeaderStart - plcpHeaderStart, //HT GF: plcpHsigHeaderStart - plcpHeaderStart = 0 |
715 |
plcpHsigHeaderStart - plcpHeaderStart, //HT GF: plcpHsigHeaderStart - plcpHeaderStart = 0 |
| 693 |
headerMode, event->GetTxVector ()); |
716 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 694 |
|
717 |
|
| 695 |
NS_LOG_DEBUG ("Case 5aiii - previous is in the preamble and current is after payload start: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
718 |
NS_LOG_DEBUG ("Case 5aiii - previous is in the preamble and current is after payload start: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
| 696 |
} |
719 |
} |
|
|
| 707 |
noiseInterferenceW, |
730 |
noiseInterferenceW, |
| 708 |
event->GetTxVector ().GetChannelWidth ()), |
731 |
event->GetTxVector ().GetChannelWidth ()), |
| 709 |
current - plcpHtTrainingSymbolsStart, |
732 |
current - plcpHtTrainingSymbolsStart, |
| 710 |
htHeaderMode, event->GetTxVector ()); |
733 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 711 |
|
734 |
|
| 712 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
735 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
| 713 |
noiseInterferenceW, |
736 |
noiseInterferenceW, |
| 714 |
event->GetTxVector ().GetChannelWidth ()), |
737 |
event->GetTxVector ().GetChannelWidth ()), |
| 715 |
plcpHtTrainingSymbolsStart - plcpHeaderStart, |
738 |
plcpHtTrainingSymbolsStart - plcpHeaderStart, |
| 716 |
headerMode, event->GetTxVector ()); |
739 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 717 |
|
740 |
|
| 718 |
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); |
741 |
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); |
| 719 |
} |
742 |
} |
|
|
| 724 |
noiseInterferenceW, |
747 |
noiseInterferenceW, |
| 725 |
event->GetTxVector ().GetChannelWidth ()), |
748 |
event->GetTxVector ().GetChannelWidth ()), |
| 726 |
current - plcpHsigHeaderStart, |
749 |
current - plcpHsigHeaderStart, |
| 727 |
htHeaderMode, event->GetTxVector ()); |
750 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 728 |
|
751 |
|
| 729 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
752 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
| 730 |
noiseInterferenceW, |
753 |
noiseInterferenceW, |
| 731 |
event->GetTxVector ().GetChannelWidth ()), |
754 |
event->GetTxVector ().GetChannelWidth ()), |
| 732 |
plcpHsigHeaderStart - plcpHeaderStart, |
755 |
plcpHsigHeaderStart - plcpHeaderStart, |
| 733 |
headerMode, event->GetTxVector ()); |
756 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 734 |
|
757 |
|
| 735 |
NS_LOG_DEBUG ("Case 5bii - previous is in the preamble and current in HT training: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
758 |
NS_LOG_DEBUG ("Case 5bii - previous is in the preamble and current in HT training: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
| 736 |
} |
759 |
} |
|
|
| 747 |
noiseInterferenceW, |
770 |
noiseInterferenceW, |
| 748 |
event->GetTxVector ().GetChannelWidth ()), |
771 |
event->GetTxVector ().GetChannelWidth ()), |
| 749 |
current - plcpHeaderStart, |
772 |
current - plcpHeaderStart, |
| 750 |
headerMode, event->GetTxVector ()); |
773 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 751 |
|
774 |
|
| 752 |
NS_LOG_DEBUG ("Case 5ci - previous is in preamble and current in VHT-SIG-A: mode=" << headerMode << ", psr=" << psr); |
775 |
NS_LOG_DEBUG ("Case 5ci - previous is in preamble and current in VHT-SIG-A: mode=" << headerMode << ", psr=" << psr); |
| 753 |
} |
776 |
} |
|
|
| 758 |
noiseInterferenceW, |
781 |
noiseInterferenceW, |
| 759 |
event->GetTxVector ().GetChannelWidth ()), |
782 |
event->GetTxVector ().GetChannelWidth ()), |
| 760 |
current - plcpHsigHeaderStart, |
783 |
current - plcpHsigHeaderStart, |
| 761 |
htHeaderMode, event->GetTxVector ()); |
784 |
htHeaderMode, event->GetTxVector (), nbOfTxAntennas); |
| 762 |
|
785 |
|
| 763 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
786 |
psr *= CalculateChunkSuccessRate (CalculateSnr (powerW, |
| 764 |
noiseInterferenceW, |
787 |
noiseInterferenceW, |
| 765 |
event->GetTxVector ().GetChannelWidth ()), |
788 |
event->GetTxVector ().GetChannelWidth ()), |
| 766 |
plcpHsigHeaderStart - plcpHeaderStart, //HT GF: plcpHsigHeaderStart - plcpHeaderStart = 0 |
789 |
plcpHsigHeaderStart - plcpHeaderStart, //HT GF: plcpHsigHeaderStart - plcpHeaderStart = 0 |
| 767 |
headerMode, event->GetTxVector ()); |
790 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 768 |
|
791 |
|
| 769 |
NS_LOG_DEBUG ("Case 5cii - previous in preamble and current in HT-SIG: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
792 |
NS_LOG_DEBUG ("Case 5cii - previous in preamble and current in HT-SIG: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr); |
| 770 |
} |
793 |
} |
|
|
| 778 |
noiseInterferenceW, |
801 |
noiseInterferenceW, |
| 779 |
event->GetTxVector ().GetChannelWidth ()), |
802 |
event->GetTxVector ().GetChannelWidth ()), |
| 780 |
current - plcpHeaderStart, |
803 |
current - plcpHeaderStart, |
| 781 |
headerMode, event->GetTxVector ()); |
804 |
headerMode, event->GetTxVector (), nbOfTxAntennas); |
| 782 |
|
805 |
|
| 783 |
NS_LOG_DEBUG ("Case 5d - previous is in the preamble and current is in L-SIG: mode=" << headerMode << ", psr=" << psr); |
806 |
NS_LOG_DEBUG ("Case 5d - previous is in the preamble and current is in L-SIG: mode=" << headerMode << ", psr=" << psr); |
| 784 |
} |
807 |
} |