A Discrete-Event Network Simulator
API
interference-helper.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2005,2006 INRIA
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
19  */
20 
21 #ifndef INTERFERENCE_HELPER_H
22 #define INTERFERENCE_HELPER_H
23 
24 #include "ns3/nstime.h"
25 #include "ns3/packet.h"
26 #include "wifi-tx-vector.h"
27 #include "error-rate-model.h"
28 
29 namespace ns3 {
30 
36 {
37 public:
41  class Event : public SimpleRefCount<InterferenceHelper::Event>
42  {
43 public:
52  Event (Ptr<const Packet> packet, WifiTxVector txVector, Time duration, double rxPower);
53  ~Event ();
54 
59  Ptr<const Packet> GetPacket (void) const;
65  Time GetDuration (void) const;
71  Time GetStartTime (void) const;
77  Time GetEndTime (void) const;
83  double GetRxPowerW (void) const;
89  WifiTxVector GetTxVector (void) const;
95  WifiMode GetPayloadMode (void) const;
96 
97 
98 private:
103  double m_rxPowerW;
104  };
105 
109  struct SnrPer
110  {
111  double snr;
112  double per;
113  };
114 
117 
123  void SetNoiseFigure (double value);
129  void SetErrorRateModel (const Ptr<ErrorRateModel> rate);
130 
136  double GetNoiseFigure (void) const;
149  void SetNumberOfReceiveAntennas (uint8_t rx);
150 
158  Time GetEnergyDuration (double energyW) const;
159 
170  Ptr<InterferenceHelper::Event> Add (Ptr<const Packet> packet, WifiTxVector txVector, Time duration, double rxPower);
171 
177  void AddForeignSignal (Time duration, double rxPower);
195  struct InterferenceHelper::SnrPer CalculatePlcpHeaderSnrPer (Ptr<InterferenceHelper::Event> event);
196 
200  void NotifyRxStart ();
204  void NotifyRxEnd ();
208  void EraseEvents (void);
209 
210 
211 private:
215  class NiChange
216  {
217 public:
225  NiChange (Time time, double delta, Ptr<InterferenceHelper::Event> event);
231  Time GetTime (void) const;
237  double GetDelta (void) const;
243  Ptr<InterferenceHelper::Event> GetEvent (void) const;
250  bool operator < (const NiChange& o) const;
251 
252 
253 private:
255  double m_delta;
257  };
261  typedef std::vector <NiChange> NiChanges;
262 
268  void AppendEvent (Ptr<Event> event);
277  double CalculateNoiseInterferenceW (Ptr<Event> event, NiChanges *ni) const;
288  double CalculateSnr (double signal, double noiseInterference, uint8_t channelWidth) const;
300  double CalculateChunkSuccessRate (double snir, Time duration, WifiMode mode, WifiTxVector txVector) const;
310  double CalculatePlcpPayloadPer (Ptr<const Event> event, NiChanges *ni) const;
320  double CalculatePlcpHeaderPer (Ptr<const Event> event, NiChanges *ni) const;
321 
322  double m_noiseFigure;
324  uint8_t m_numRxAntennas;
325  NiChanges m_niChanges;
327  double m_firstPower;
328  bool m_rxing;
329 
336  NiChanges::const_iterator GetPosition (Time moment);
342  void AddNiChangeEvent (NiChange change);
343 };
344 
345 } //namespace ns3
346 
347 #endif /* INTERFERENCE_HELPER_H */
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
void AddForeignSignal(Time duration, double rxPower)
Add a non-Wifi signal to interference helper.
A struct for both SNR and PER.
Ptr< InterferenceHelper::Event > Add(Ptr< const Packet > packet, WifiTxVector txVector, Time duration, double rxPower)
Add the packet-related signal to interference helper.
void SetNumberOfReceiveAntennas(uint8_t rx)
Set the number of RX antennas in the receiver corresponding to this interference helper.
Ptr< ErrorRateModel > GetErrorRateModel(void) const
Return the error rate model.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
Signal event for a packet.
std::vector< NiChange > NiChanges
typedef for a vector of NiChanges
handles interference calculations
Ptr< const Packet > m_packet
packet
void SetErrorRateModel(const Ptr< ErrorRateModel > rate)
Set the error rate model for this interference helper.
double CalculateChunkSuccessRate(double snir, Time duration, WifiMode mode, WifiTxVector txVector) const
Calculate the success rate of the chunk given the SINR, duration, and Wi-Fi mode. ...
double GetRxPowerW(void) const
Return the receive power (w).
Ptr< ErrorRateModel > m_errorRateModel
error rate model
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
Definition: wifi-mode.h:97
bool operator<(const EventId &a, const EventId &b)
Definition: event-id.h:153
Ptr< const Packet > GetPacket(void) const
Return the packet.
double CalculateNoiseInterferenceW(Ptr< Event > event, NiChanges *ni) const
Calculate noise and interference power in W.
Time GetStartTime(void) const
Return the start time of the signal.
Event(Ptr< const Packet > packet, WifiTxVector txVector, Time duration, double rxPower)
Create an Event with the given parameters.
WifiTxVector GetTxVector(void) const
Return the TXVECTOR of the packet.
Ptr< InterferenceHelper::Event > m_event
event
NiChanges m_niChanges
Experimental: needed for energy duration calculation.
void AddNiChangeEvent(NiChange change)
Add NiChange to the list at the appropriate position.
struct InterferenceHelper::SnrPer CalculatePlcpHeaderSnrPer(Ptr< InterferenceHelper::Event > event)
Calculate the SNIR at the start of the plcp header and accumulate all SNIR changes in the snir vector...
double CalculatePlcpPayloadPer(Ptr< const Event > event, NiChanges *ni) const
Calculate the error rate of the given plcp payload.
Time GetEnergyDuration(double energyW) const
double m_noiseFigure
noise figure (linear)
struct InterferenceHelper::SnrPer CalculatePlcpPayloadSnrPer(Ptr< InterferenceHelper::Event > event)
Calculate the SNIR at the start of the plcp payload and accumulate all SNIR changes in the snir vecto...
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void NotifyRxStart()
Notify that RX has started.
Noise and Interference (thus Ni) event.
void EraseEvents(void)
Erase all events.
double CalculatePlcpHeaderPer(Ptr< const Event > event, NiChanges *ni) const
Calculate the error rate of the plcp header.
uint8_t m_numRxAntennas
the number of RX antennas in the corresponding receiver
Time GetEndTime(void) const
Return the end time of the signal.
double m_rxPowerW
receive power in watts
WifiTxVector m_txVector
TXVECTOR.
void NotifyRxEnd()
Notify that RX has ended.
Time GetDuration(void) const
Return the duration of the signal.
void SetNoiseFigure(double value)
Set the noise figure.
double m_firstPower
first power
WifiMode GetPayloadMode(void) const
Return the Wi-Fi mode used for the payload.
NiChanges::const_iterator GetPosition(Time moment)
Returns a const iterator to the first nichange, which is later than moment.
void AppendEvent(Ptr< Event > event)
Append the given Event.
double GetNoiseFigure(void) const
Return the noise figure.
A template-based reference counting class.
double CalculateSnr(double signal, double noiseInterference, uint8_t channelWidth) const
Calculate SNR (linear ratio) from the given signal power and noise+interference power.
bool m_rxing
flag whether it is in receiving state