/usr/include/ns3.17/ns3/interference-helper.h is in libns3-dev 3.17+dfsg-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2005,2006 INRIA
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
*/
#ifndef INTERFERENCE_HELPER_H
#define INTERFERENCE_HELPER_H
#include <stdint.h>
#include <vector>
#include <list>
#include "wifi-mode.h"
#include "wifi-preamble.h"
#include "wifi-phy-standard.h"
#include "ns3/nstime.h"
#include "ns3/simple-ref-count.h"
namespace ns3 {
class ErrorRateModel;
/**
* \ingroup wifi
* \brief handles interference calculations
*/
class InterferenceHelper
{
public:
class Event : public SimpleRefCount<InterferenceHelper::Event>
{
public:
Event (uint32_t size, WifiMode payloadMode,
enum WifiPreamble preamble,
Time duration, double rxPower);
~Event ();
Time GetDuration (void) const;
Time GetStartTime (void) const;
Time GetEndTime (void) const;
double GetRxPowerW (void) const;
uint32_t GetSize (void) const;
WifiMode GetPayloadMode (void) const;
enum WifiPreamble GetPreambleType (void) const;
private:
uint32_t m_size;
WifiMode m_payloadMode;
enum WifiPreamble m_preamble;
Time m_startTime;
Time m_endTime;
double m_rxPowerW;
};
struct SnrPer
{
double snr;
double per;
};
InterferenceHelper ();
~InterferenceHelper ();
void SetNoiseFigure (double value);
void SetErrorRateModel (Ptr<ErrorRateModel> rate);
double GetNoiseFigure (void) const;
Ptr<ErrorRateModel> GetErrorRateModel (void) const;
/**
* \param energyW the minimum energy (W) requested
* \returns the expected amount of time the observed
* energy on the medium will be higher than
* the requested threshold.
*/
Time GetEnergyDuration (double energyW);
Ptr<InterferenceHelper::Event> Add (uint32_t size, WifiMode payloadMode,
enum WifiPreamble preamble,
Time duration, double rxPower);
struct InterferenceHelper::SnrPer CalculateSnrPer (Ptr<InterferenceHelper::Event> event);
void NotifyRxStart ();
void NotifyRxEnd ();
void EraseEvents (void);
private:
class NiChange
{
public:
NiChange (Time time, double delta);
Time GetTime (void) const;
double GetDelta (void) const;
bool operator < (const NiChange& o) const;
private:
Time m_time;
double m_delta;
};
typedef std::vector <NiChange> NiChanges;
typedef std::list<Ptr<Event> > Events;
InterferenceHelper (const InterferenceHelper &o);
InterferenceHelper &operator = (const InterferenceHelper &o);
void AppendEvent (Ptr<Event> event);
double CalculateNoiseInterferenceW (Ptr<Event> event, NiChanges *ni) const;
double CalculateSnr (double signal, double noiseInterference, WifiMode mode) const;
double CalculateChunkSuccessRate (double snir, Time delay, WifiMode mode) const;
double CalculatePer (Ptr<const Event> event, NiChanges *ni) const;
double m_noiseFigure; /**< noise figure (linear) */
Ptr<ErrorRateModel> m_errorRateModel;
/// Experimental: needed for energy duration calculation
NiChanges m_niChanges;
double m_firstPower;
bool m_rxing;
/// Returns an iterator to the first nichange, which is later than moment
NiChanges::iterator GetPosition (Time moment);
void AddNiChangeEvent (NiChange change);
};
} // namespace ns3
#endif /* INTERFERENCE_HELPER_H */
|