View | Details | Raw Unified | Return to bug 2533
Collapse All | Expand All

(-)a/src/wifi/model/interference-helper.cc (-44 / +67 lines)
 Lines 36-48    Link Here 
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
 Lines 98-103    Link Here 
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
 Lines 149-155    Link Here 
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
 Lines 157-163    Link Here 
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
}
 Lines 168-174    Link Here 
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
 Lines 195-200    Link Here 
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
{
 Lines 275-281    Link Here 
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
    {
 Lines 283-288    Link Here 
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
}
 Lines 302-307    Link Here 
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
    {
 Lines 315-321    Link Here 
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
        }
 Lines 326-332    Link Here 
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
 Lines 366-371    Link Here 
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
    {
 Lines 389-395    Link Here 
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
            }
 Lines 400-406    Link Here 
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
            }
 Lines 416-422    Link Here 
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)
 Lines 426-432    Link Here 
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
                }
 Lines 437-443    Link Here 
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
                }
 Lines 449-455    Link Here 
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)
 Lines 459-465    Link Here 
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
                }
 Lines 470-476    Link Here 
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
                }
 Lines 486-492    Link Here 
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
                }
 Lines 497-503    Link Here 
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
                }
 Lines 517-523    Link Here 
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
                }
 Lines 528-540    Link Here 
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
                }
 Lines 545-557    Link Here 
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
                }
 Lines 568-580    Link Here 
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
                }
 Lines 585-597    Link Here 
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
                }
 Lines 608-614    Link Here 
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
                }
 Lines 619-631    Link Here 
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
                }
 Lines 637-643    Link Here 
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
            }
 Lines 655-661    Link Here 
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
                }
 Lines 666-678    Link Here 
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
                }
 Lines 684-696    Link Here 
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
                }
 Lines 707-719    Link Here 
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
                }
 Lines 724-736    Link Here 
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
                }
 Lines 747-753    Link Here 
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
                }
 Lines 758-770    Link Here 
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
                }
 Lines 778-784    Link Here 
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
            }
(-)a/src/wifi/model/interference-helper.h (-3 / +23 lines)
 Lines 58-64    Link Here 
58
     */
58
     */
59
    Event (uint32_t size, WifiTxVector txVector,
59
    Event (uint32_t size, WifiTxVector txVector,
60
           enum WifiPreamble preamble,
60
           enum WifiPreamble preamble,
61
           Time duration, double rxPower);
61
           Time duration, double rxPower,
62
           uint8_t nbOfTxAntennas);
62
    ~Event ();
63
    ~Event ();
63
64
64
    /**
65
    /**
 Lines 109-114    Link Here 
109
     * \return the preamble type of the packet
110
     * \return the preamble type of the packet
110
     */
111
     */
111
    enum WifiPreamble GetPreambleType (void) const;
112
    enum WifiPreamble GetPreambleType (void) const;
113
    /**
114
     * Return the number of TX antennas of the device used to transmit the packet.
115
     *
116
     * \return the number of TX antennas of the device used to transmit the packet
117
     */
118
    uint8_t GetNbOfTxAntennas (void) const;
112
119
113
120
114
private:
121
private:
 Lines 118-123    Link Here 
118
    Time m_startTime;
125
    Time m_startTime;
119
    Time m_endTime;
126
    Time m_endTime;
120
    double m_rxPowerW;
127
    double m_rxPowerW;
128
    uint8_t m_nbOfTxAntennas;
121
  };
129
  };
122
130
123
  /**
131
  /**
 Lines 157-162    Link Here 
157
   * \return Error rate model
165
   * \return Error rate model
158
   */
166
   */
159
  Ptr<ErrorRateModel> GetErrorRateModel (void) const;
167
  Ptr<ErrorRateModel> GetErrorRateModel (void) const;
168
  
169
  /**
170
   * Set the number of RX antennas in the receiver corresponding to this
171
   * interference helper.
172
   *
173
   * \param the number of RX antennas
174
   */
175
  void SetNumberOfReceiveAntennas (uint32_t rx);
160
176
161
  /**
177
  /**
162
   * \param energyW the minimum energy (W) requested
178
   * \param energyW the minimum energy (W) requested
 Lines 175-186    Link Here 
175
   * \param preamble Wi-Fi preamble for the packet
191
   * \param preamble Wi-Fi preamble for the packet
176
   * \param duration the duration of the signal
192
   * \param duration the duration of the signal
177
   * \param rxPower receive power (W)
193
   * \param rxPower receive power (W)
194
   * \param nbOfTxAntennas number of TX antennas of the device used to transmit the packet
178
   *
195
   *
179
   * \return InterferenceHelper::Event
196
   * \return InterferenceHelper::Event
180
   */
197
   */
181
  Ptr<InterferenceHelper::Event> Add (uint32_t size, WifiTxVector txVector,
198
  Ptr<InterferenceHelper::Event> Add (uint32_t size, WifiTxVector txVector,
182
                                      enum WifiPreamble preamble,
199
                                      enum WifiPreamble preamble,
183
                                      Time duration, double rxPower);
200
                                      Time duration, double rxPower,
201
                                      uint8_t nbOfTxAntennas);
184
202
185
  /**
203
  /**
186
   * Add a non-Wifi signal to interference helper.
204
   * Add a non-Wifi signal to interference helper.
 Lines 303-312    Link Here 
303
   * \param duration
321
   * \param duration
304
   * \param mode
322
   * \param mode
305
   * \param txVector
323
   * \param txVector
324
   * \param nbOfTxAntennas
306
   *
325
   *
307
   * \return the success rate
326
   * \return the success rate
308
   */
327
   */
309
  double CalculateChunkSuccessRate (double snir, Time duration, WifiMode mode, WifiTxVector txVector) const;
328
  double CalculateChunkSuccessRate (double snir, Time duration, WifiMode mode, WifiTxVector txVector, uint8_t nbOfTxAntennas) const;
310
  /**
329
  /**
311
   * Calculate the error rate of the given plcp payload. The plcp payload can be divided into
330
   * Calculate the error rate of the given plcp payload. The plcp payload can be divided into
312
   * multiple chunks (e.g. due to interference from other transmissions).
331
   * multiple chunks (e.g. due to interference from other transmissions).
 Lines 330-335    Link Here 
330
349
331
  double m_noiseFigure; /**< noise figure (linear) */
350
  double m_noiseFigure; /**< noise figure (linear) */
332
  Ptr<ErrorRateModel> m_errorRateModel;
351
  Ptr<ErrorRateModel> m_errorRateModel;
352
  uint32_t m_numRxAntennas; /**< the number of RX antennas in the corresponding receiver */
333
  /// Experimental: needed for energy duration calculation
353
  /// Experimental: needed for energy duration calculation
334
  NiChanges m_niChanges;
354
  NiChanges m_niChanges;
335
  double m_firstPower;
355
  double m_firstPower;
(-)a/src/wifi/model/spectrum-wifi-phy.cc (-2 / +3 lines)
 Lines 424-430    Link Here 
424
                              txVector,
424
                              txVector,
425
                              preamble,
425
                              preamble,
426
                              rxDuration,
426
                              rxDuration,
427
                              rxPowerW);
427
                              rxPowerW,
428
                              tag.GetNbOfTxAntennas ());
428
429
429
  switch (m_state->GetState ())
430
  switch (m_state->GetState ())
430
    {
431
    {
 Lines 712-718    Link Here 
712
  Ptr<Packet> newPacket = packet->Copy (); // obtain non-const Packet
713
  Ptr<Packet> newPacket = packet->Copy (); // obtain non-const Packet
713
  WifiPhyTag oldtag;
714
  WifiPhyTag oldtag;
714
  newPacket->RemovePacketTag (oldtag);
715
  newPacket->RemovePacketTag (oldtag);
715
  WifiPhyTag tag (txVector, preamble, mpdutype);
716
  WifiPhyTag tag (txVector, preamble, mpdutype, GetSupportedTxSpatialStreams ());
716
  newPacket->AddPacketTag (tag);
717
  newPacket->AddPacketTag (tag);
717
718
718
  NS_LOG_DEBUG ("Transmission signal power before antenna gain: " << GetPowerDbm (txVector.GetTxPowerLevel ()) << " dBm");
719
  NS_LOG_DEBUG ("Transmission signal power before antenna gain: " << GetPowerDbm (txVector.GetTxPowerLevel ()) << " dBm");
(-)a/src/wifi/model/wifi-phy-tag.cc (-3 / +12 lines)
 Lines 39-45    Link Here 
39
uint32_t
39
uint32_t
40
WifiPhyTag::GetSerializedSize (void) const
40
WifiPhyTag::GetSerializedSize (void) const
41
{
41
{
42
  return (4 + (6 * 1) + 4 + 2);
42
  return (4 + (6 * 1) + 4 + 2 + 1);
43
}
43
}
44
44
45
void
45
void
 Lines 54-59    Link Here 
54
  i.WriteU8 (m_wifiTxVector.IsStbc ());
54
  i.WriteU8 (m_wifiTxVector.IsStbc ());
55
  i.WriteU32 (m_wifiPreamble);
55
  i.WriteU32 (m_wifiPreamble);
56
  i.WriteU16 (m_mpduType);
56
  i.WriteU16 (m_mpduType);
57
  i.WriteU8 (m_nbOfTxAntennas);
57
}
58
}
58
59
59
void
60
void
 Lines 68-73    Link Here 
68
  m_wifiTxVector.SetStbc (i.ReadU8 ());
69
  m_wifiTxVector.SetStbc (i.ReadU8 ());
69
  m_wifiPreamble = i.ReadU32 ();
70
  m_wifiPreamble = i.ReadU32 ();
70
  m_mpduType = static_cast<enum mpduType> (i.ReadU16 ());
71
  m_mpduType = static_cast<enum mpduType> (i.ReadU16 ());
72
  m_nbOfTxAntennas = i.ReadU8 ();
71
}
73
}
72
void
74
void
73
WifiPhyTag::Print (std::ostream &os) const
75
WifiPhyTag::Print (std::ostream &os) const
 Lines 79-88    Link Here 
79
{
81
{
80
}
82
}
81
83
82
WifiPhyTag::WifiPhyTag (WifiTxVector txVector, WifiPreamble preamble, enum mpduType mpdutype)
84
WifiPhyTag::WifiPhyTag (WifiTxVector txVector, WifiPreamble preamble, enum mpduType mpdutype, uint8_t nbOfTxAntennas)
83
  : m_wifiTxVector (txVector),
85
  : m_wifiTxVector (txVector),
84
    m_wifiPreamble (preamble),
86
    m_wifiPreamble (preamble),
85
    m_mpduType (mpdutype)
87
    m_mpduType (mpdutype),
88
    m_nbOfTxAntennas (nbOfTxAntennas)
86
{
89
{
87
}
90
}
88
91
 Lines 104-107    Link Here 
104
  return m_mpduType;
107
  return m_mpduType;
105
}
108
}
106
109
110
uint8_t
111
WifiPhyTag::GetNbOfTxAntennas (void) const
112
{
113
  return m_nbOfTxAntennas;
114
}
115
107
} // namespace ns3
116
} // namespace ns3
(-)a/src/wifi/model/wifi-phy-tag.h (-1 / +7 lines)
 Lines 49-55    Link Here 
49
   * \param preamble the WifiPreamble
49
   * \param preamble the WifiPreamble
50
   * \param mpduType the mpduType
50
   * \param mpduType the mpduType
51
   */
51
   */
52
  WifiPhyTag (WifiTxVector txVector, WifiPreamble preamble, enum mpduType mpdutype);
52
  WifiPhyTag (WifiTxVector txVector, WifiPreamble preamble, enum mpduType mpdutype, uint8_t nbOfTxAntennas);
53
  /**
53
  /**
54
   * Getter for WifiTxVector parameter
54
   * Getter for WifiTxVector parameter
55
   * \return the WifiTxVector
55
   * \return the WifiTxVector
 Lines 65-70    Link Here 
65
   * \return mpduType the mpduType
65
   * \return mpduType the mpduType
66
   */
66
   */
67
  enum mpduType GetMpduType (void) const;
67
  enum mpduType GetMpduType (void) const;
68
  /**
69
   * Getter for nbOfTxAntennas parameter
70
   * \return nbOfTxAntennas the number of TX antennas
71
   */
72
  uint8_t GetNbOfTxAntennas (void) const;
68
73
69
  // From class Tag
74
  // From class Tag
70
  virtual uint32_t GetSerializedSize (void) const;
75
  virtual uint32_t GetSerializedSize (void) const;
 Lines 76-81    Link Here 
76
  WifiTxVector m_wifiTxVector;
81
  WifiTxVector m_wifiTxVector;
77
  int32_t m_wifiPreamble;
82
  int32_t m_wifiPreamble;
78
  enum mpduType m_mpduType;
83
  enum mpduType m_mpduType;
84
  uint8_t m_nbOfTxAntennas;
79
};
85
};
80
86
81
} // namespace ns3
87
} // namespace ns3
(-)a/src/wifi/model/wifi-phy.cc (+3 lines)
 Lines 456-461    Link Here 
456
{
456
{
457
  NS_LOG_FUNCTION (this << noiseFigureDb);
457
  NS_LOG_FUNCTION (this << noiseFigureDb);
458
  m_interference.SetNoiseFigure (DbToRatio (noiseFigureDb));
458
  m_interference.SetNoiseFigure (DbToRatio (noiseFigureDb));
459
  m_interference.SetNumberOfReceiveAntennas (GetNumberOfReceiveAntennas ());
459
}
460
}
460
461
461
double
462
double
 Lines 629-634    Link Here 
629
WifiPhy::SetErrorRateModel (Ptr<ErrorRateModel> rate)
630
WifiPhy::SetErrorRateModel (Ptr<ErrorRateModel> rate)
630
{
631
{
631
  m_interference.SetErrorRateModel (rate);
632
  m_interference.SetErrorRateModel (rate);
633
  m_interference.SetNumberOfReceiveAntennas (GetNumberOfReceiveAntennas ());
632
}
634
}
633
635
634
Ptr<ErrorRateModel>
636
Ptr<ErrorRateModel>
 Lines 1170-1175    Link Here 
1170
WifiPhy::SetNumberOfReceiveAntennas (uint32_t rx)
1172
WifiPhy::SetNumberOfReceiveAntennas (uint32_t rx)
1171
{
1173
{
1172
  m_numberOfReceivers = rx;
1174
  m_numberOfReceivers = rx;
1175
  m_interference.SetNumberOfReceiveAntennas (rx);
1173
}
1176
}
1174
1177
1175
uint32_t
1178
uint32_t
(-)a/src/wifi/model/yans-wifi-phy.cc (-2 / +3 lines)
 Lines 289-295    Link Here 
289
                              txVector,
289
                              txVector,
290
                              preamble,
290
                              preamble,
291
                              rxDuration,
291
                              rxDuration,
292
                              rxPowerW);
292
                              rxPowerW,
293
                              tag.GetNbOfTxAntennas ());
293
294
294
  switch (m_state->GetState ())
295
  switch (m_state->GetState ())
295
    {
296
    {
 Lines 524-530    Link Here 
524
  Ptr<Packet> newPacket = packet->Copy (); // obtain non-const Packet
525
  Ptr<Packet> newPacket = packet->Copy (); // obtain non-const Packet
525
  WifiPhyTag oldtag;
526
  WifiPhyTag oldtag;
526
  newPacket->RemovePacketTag (oldtag);
527
  newPacket->RemovePacketTag (oldtag);
527
  WifiPhyTag tag (txVector, preamble, mpdutype);
528
  WifiPhyTag tag (txVector, preamble, mpdutype, GetSupportedTxSpatialStreams ());
528
  newPacket->AddPacketTag (tag);
529
  newPacket->AddPacketTag (tag);
529
  m_channel->Send (this, newPacket, GetPowerDbm (txVector.GetTxPowerLevel ()) + GetTxGain (), txDuration);
530
  m_channel->Send (this, newPacket, GetPowerDbm (txVector.GetTxPowerLevel ()) + GetTxGain (), txDuration);
530
}
531
}
(-)a/src/wifi/test/spectrum-wifi-phy-test.cc (-1 / +1 lines)
 Lines 88-94    Link Here 
88
88
89
  pkt->AddHeader (hdr);
89
  pkt->AddHeader (hdr);
90
  pkt->AddTrailer (trailer);
90
  pkt->AddTrailer (trailer);
91
  WifiPhyTag tag (txVector, preamble, mpdutype);
91
  WifiPhyTag tag (txVector, preamble, mpdutype, 1);
92
  pkt->AddPacketTag (tag);
92
  pkt->AddPacketTag (tag);
93
  Ptr<SpectrumValue> txPowerSpectrum = WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity (FREQUENCY, CHANNEL_WIDTH, txPowerWatts);
93
  Ptr<SpectrumValue> txPowerSpectrum = WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity (FREQUENCY, CHANNEL_WIDTH, txPowerWatts);
94
  Ptr<WifiSpectrumSignalParameters> txParams = Create<WifiSpectrumSignalParameters> ();
94
  Ptr<WifiSpectrumSignalParameters> txParams = Create<WifiSpectrumSignalParameters> ();

Return to bug 2533