23 #include "ns3/simulator.h"
39 m_payloadMode (payloadMode),
40 m_preamble (preamble),
42 m_endTime (m_startTime + duration),
54 return m_endTime - m_startTime;
117 return (m_time < o.
m_time);
143 event = Create<InterferenceHelper::Event> (size,
182 double noiseInterferenceW = 0.0;
187 noiseInterferenceW += i->GetDelta ();
193 if (noiseInterferenceW < energyW)
198 return end > now ? end - now : MicroSeconds (0);
207 NiChanges::iterator nowIterator =
GetPosition (now);
208 for (NiChanges::iterator i =
m_niChanges.begin (); i != nowIterator; i++)
228 static const double BOLTZMANN = 1.3803e-23;
233 double noise = noiseFloor + noiseInterference;
234 double snr = signal / noise;
245 if ((event->GetEndTime () == i->GetTime ()) && event->GetRxPowerW () == -i->GetDelta ())
251 ni->insert (ni->begin (),
NiChange (event->GetStartTime (), noiseInterference));
252 ni->push_back (
NiChange (event->GetEndTime (), 0));
253 return noiseInterference;
259 if (duration == NanoSeconds (0))
264 uint64_t nbits = (uint64_t)(rate * duration.
GetSeconds ());
273 NiChanges::iterator j = ni->begin ();
274 Time previous = (*j).GetTime ();
275 WifiMode payloadMode =
event->GetPayloadMode ();
288 double noiseInterferenceW = (*j).GetDelta ();
289 double powerW =
event->GetRxPowerW ();
291 while (ni->end () != j)
296 if (previous >= plcpPayloadStart)
305 else if (previous >= plcpHtTrainingSymbolsStart)
308 if (current >= plcpPayloadStart)
314 current - plcpPayloadStart,
320 else if (previous >=plcpHsigHeaderStart)
323 if (current >=plcpPayloadStart)
328 current - plcpPayloadStart,
334 plcpHtTrainingSymbolsStart - previous,
338 else if (current >=plcpHtTrainingSymbolsStart)
343 plcpHtTrainingSymbolsStart - previous,
359 else if (previous >= plcpHeaderStart)
362 if (current >=plcpPayloadStart)
367 current - plcpPayloadStart,
375 plcpPayloadStart - previous,
383 plcpHtTrainingSymbolsStart - plcpHsigHeaderStart,
388 plcpHsigHeaderStart - previous,
393 else if (current >=plcpHtTrainingSymbolsStart)
398 plcpHtTrainingSymbolsStart - plcpHsigHeaderStart,
403 plcpHsigHeaderStart - previous,
407 else if (current >=plcpHsigHeaderStart)
412 current - plcpHsigHeaderStart,
417 plcpHsigHeaderStart - previous,
446 if (current >= plcpPayloadStart)
452 current - plcpPayloadStart,
460 plcpPayloadStart - plcpHeaderStart,
467 plcpHtTrainingSymbolsStart - plcpHsigHeaderStart,
473 plcpHsigHeaderStart-plcpHeaderStart,
476 else if (current >=plcpHtTrainingSymbolsStart )
483 plcpHtTrainingSymbolsStart - plcpHsigHeaderStart,
489 plcpHsigHeaderStart-plcpHeaderStart,
493 else if (current >=plcpHsigHeaderStart)
498 current- plcpHsigHeaderStart,
505 plcpHsigHeaderStart-plcpHeaderStart,
510 else if (current >= plcpHeaderStart)
517 current - plcpHeaderStart,
525 current - plcpHeaderStart,
531 noiseInterferenceW += (*j).GetDelta ();
532 previous = (*j).GetTime ();
536 double per = 1 - psr;
548 event->GetPayloadMode ());
568 InterferenceHelper::NiChanges::iterator