handles interference calculations More...
#include "interference-helper.h"
Classes | |
class | NiChange |
Noise and Interference (thus Ni) event. More... | |
struct | SnrPer |
Signal event for a packet. More... | |
Public Member Functions | |
InterferenceHelper () | |
~InterferenceHelper () | |
Ptr< Event > | Add (Ptr< const Packet > packet, WifiTxVector txVector, Time duration, double rxPower) |
Add the packet-related signal to interference helper. More... | |
void | AddForeignSignal (Time duration, double rxPower) |
Add a non-Wifi signal to interference helper. More... | |
struct InterferenceHelper::SnrPer | CalculateLegacyPhyHeaderSnrPer (Ptr< Event > event) const |
Calculate the SNIR at the start of the legacy PHY header and accumulate all SNIR changes in the snir vector. More... | |
struct InterferenceHelper::SnrPer | CalculateNonLegacyPhyHeaderSnrPer (Ptr< Event > event) const |
Calculate the SNIR at the start of the non-legacy PHY header and accumulate all SNIR changes in the snir vector. More... | |
struct InterferenceHelper::SnrPer | CalculatePayloadSnrPer (Ptr< Event > event, std::pair< Time, Time > relativeMpduStartStop) const |
Calculate the SNIR at the start of the payload and accumulate all SNIR changes in the snir vector for each MPDU of an A-MPDU. More... | |
double | CalculateSnr (Ptr< Event > event) const |
Calculate the SNIR for the event (starting from now until the event end). More... | |
void | EraseEvents (void) |
Erase all events. More... | |
Time | GetEnergyDuration (double energyW) const |
Ptr< ErrorRateModel > | GetErrorRateModel (void) const |
Return the error rate model. More... | |
void | NotifyRxEnd () |
Notify that RX has ended. More... | |
void | NotifyRxStart () |
Notify that RX has started. More... | |
void | SetErrorRateModel (const Ptr< ErrorRateModel > rate) |
Set the error rate model for this interference helper. More... | |
void | SetNoiseFigure (double value) |
Set the noise figure. More... | |
void | SetNumberOfReceiveAntennas (uint8_t rx) |
Set the number of RX antennas in the receiver corresponding to this interference helper. More... | |
Private Types | |
typedef std::multimap< Time, NiChange > | NiChanges |
typedef for a multimap of NiChanges More... | |
Private Member Functions | |
NiChanges::iterator | AddNiChangeEvent (Time moment, NiChange change) |
Add NiChange to the list at the appropriate position and return the iterator of the new event. More... | |
void | AppendEvent (Ptr< Event > event) |
Append the given Event. More... | |
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. More... | |
double | CalculateLegacyPhyHeaderPer (Ptr< const Event > event, NiChanges *ni) const |
Calculate the error rate of the legacy PHY header. More... | |
double | CalculateNoiseInterferenceW (Ptr< Event > event, NiChanges *ni) const |
Calculate noise and interference power in W. More... | |
double | CalculateNonLegacyPhyHeaderPer (Ptr< const Event > event, NiChanges *ni) const |
Calculate the error rate of the non-legacy PHY header. More... | |
double | CalculatePayloadPer (Ptr< const Event > event, NiChanges *ni, std::pair< Time, Time > window) const |
Calculate the error rate of the given PLCP payload only in the provided time window (thus enabling per MPDU PER information). More... | |
double | CalculateSnr (double signal, double noiseInterference, uint16_t channelWidth) const |
Calculate SNR (linear ratio) from the given signal power and noise+interference power. More... | |
NiChanges::const_iterator | GetNextPosition (Time moment) const |
Returns an iterator to the first nichange that is later than moment. More... | |
NiChanges::const_iterator | GetPreviousPosition (Time moment) const |
Returns an iterator to the first nichange that is later than moment. More... | |
Private Attributes | |
Ptr< ErrorRateModel > | m_errorRateModel |
error rate model More... | |
double | m_firstPower |
first power More... | |
NiChanges | m_niChanges |
Experimental: needed for energy duration calculation. More... | |
double | m_noiseFigure |
noise figure (linear) More... | |
uint8_t | m_numRxAntennas |
the number of RX antennas in the corresponding receiver More... | |
bool | m_rxing |
flag whether it is in receiving state More... | |
handles interference calculations
Definition at line 101 of file interference-helper.h.
|
private |
typedef for a multimap of NiChanges
Definition at line 270 of file interference-helper.h.
ns3::InterferenceHelper::InterferenceHelper | ( | ) |
Definition at line 122 of file interference-helper.cc.
References AddNiChangeEvent().
ns3::InterferenceHelper::~InterferenceHelper | ( | ) |
Definition at line 132 of file interference-helper.cc.
References EraseEvents(), and m_errorRateModel.
Ptr< Event > ns3::InterferenceHelper::Add | ( | Ptr< const Packet > | packet, |
WifiTxVector | txVector, | ||
Time | duration, | ||
double | rxPower | ||
) |
Add the packet-related signal to interference helper.
packet | the packet |
txVector | TXVECTOR of the packet |
duration | the duration of the signal |
rxPower | receive power (W) |
Definition at line 139 of file interference-helper.cc.
References AppendEvent().
Referenced by AddForeignSignal(), and ns3::WifiPhy::StartReceivePreamble().
void ns3::InterferenceHelper::AddForeignSignal | ( | Time | duration, |
double | rxPower | ||
) |
Add a non-Wifi signal to interference helper.
duration | the duration of the signal |
rxPower | receive power (W) |
Definition at line 147 of file interference-helper.cc.
References Add().
Referenced by ns3::SpectrumWifiPhy::StartRx().
|
private |
Add NiChange to the list at the appropriate position and return the iterator of the new event.
moment | |
change |
Definition at line 947 of file interference-helper.cc.
References GetNextPosition(), and m_niChanges.
Referenced by AppendEvent(), EraseEvents(), and InterferenceHelper().
Append the given Event.
event |
Definition at line 199 of file interference-helper.cc.
References AddNiChangeEvent(), GetNextPosition(), GetPreviousPosition(), m_firstPower, m_niChanges, m_rxing, and NS_LOG_FUNCTION.
Referenced by Add().
|
private |
Calculate the success rate of the chunk given the SINR, duration, and Wi-Fi mode.
The duration and mode are used to calculate how many bits are present in the chunk.
snir | SINR |
duration | |
mode | |
txVector |
Definition at line 259 of file interference-helper.cc.
References ns3::WifiMode::GetDataRate(), ns3::WifiTxVector::GetMode(), ns3::WifiMode::GetModulationClass(), ns3::WifiTxVector::GetNss(), ns3::WifiTxVector::GetNTx(), ns3::Time::GetSeconds(), ns3::Time::IsZero(), m_errorRateModel, m_numRxAntennas, NS_LOG_DEBUG, ns3::WIFI_MOD_CLASS_HE, ns3::WIFI_MOD_CLASS_HT, and ns3::WIFI_MOD_CLASS_VHT.
Referenced by CalculateLegacyPhyHeaderPer(), CalculateNonLegacyPhyHeaderPer(), and CalculatePayloadPer().
|
private |
Calculate the error rate of the legacy PHY header.
The legacy PHY header can be divided into multiple chunks (e.g. due to interference from other transmissions).
event | |
ni |
Definition at line 337 of file interference-helper.cc.
References CalculateChunkSuccessRate(), CalculateSnr(), ns3::WifiTxVector::GetChannelWidth(), ns3::WifiPhy::GetPlcpHeaderDuration(), ns3::WifiPhy::GetPlcpHeaderMode(), ns3::WifiPhy::GetPlcpHtSigHeaderDuration(), ns3::WifiPhy::GetPlcpPreambleDuration(), ns3::WifiPhy::GetPlcpSigA1Duration(), ns3::WifiPhy::GetPlcpSigA2Duration(), ns3::WifiPhy::GetPlcpSigBDuration(), ns3::WifiPhy::GetPlcpTrainingSymbolDuration(), ns3::WifiTxVector::GetPreambleType(), m_firstPower, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::WIFI_PREAMBLE_HT_GF, ns3::WIFI_PREAMBLE_LONG, and ns3::WIFI_PREAMBLE_SHORT.
Referenced by CalculateLegacyPhyHeaderSnrPer().
struct InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculateLegacyPhyHeaderSnrPer | ( | Ptr< Event > | event | ) | const |
Calculate the SNIR at the start of the legacy PHY header and accumulate all SNIR changes in the snir vector.
event | the event corresponding to the first time the corresponding packet arrives |
Definition at line 881 of file interference-helper.cc.
References CalculateLegacyPhyHeaderPer(), CalculateNoiseInterferenceW(), CalculateSnr(), ns3::InterferenceHelper::SnrPer::per, and ns3::InterferenceHelper::SnrPer::snr.
Referenced by ns3::WifiPhy::ContinueReceiveHeader(), and ns3::WifiPhy::StartReceiveHeader().
|
private |
Calculate noise and interference power in W.
event | |
ni |
Definition at line 238 of file interference-helper.cc.
References m_firstPower, m_niChanges, ns3::Simulator::Now(), and NS_ASSERT_MSG().
Referenced by CalculateLegacyPhyHeaderSnrPer(), CalculateNonLegacyPhyHeaderSnrPer(), CalculatePayloadSnrPer(), and CalculateSnr().
|
private |
Calculate the error rate of the non-legacy PHY header.
The non-legacy PHY header can be divided into multiple chunks (e.g. due to interference from other transmissions).
event | |
ni |
Definition at line 481 of file interference-helper.cc.
References CalculateChunkSuccessRate(), CalculateSnr(), ns3::WifiTxVector::GetChannelWidth(), ns3::WifiPhy::GetHePlcpHeaderMode(), ns3::WifiPhy::GetHtPlcpHeaderMode(), ns3::WifiPhy::GetPlcpHeaderDuration(), ns3::WifiPhy::GetPlcpHeaderMode(), ns3::WifiPhy::GetPlcpHtSigHeaderDuration(), ns3::WifiPhy::GetPlcpPreambleDuration(), ns3::WifiPhy::GetPlcpSigA1Duration(), ns3::WifiPhy::GetPlcpSigA2Duration(), ns3::WifiPhy::GetPlcpSigBDuration(), ns3::WifiPhy::GetPlcpTrainingSymbolDuration(), ns3::WifiTxVector::GetPreambleType(), ns3::WifiPhy::GetVhtPlcpHeaderMode(), m_firstPower, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::WIFI_PREAMBLE_HE_MU, ns3::WIFI_PREAMBLE_HE_SU, ns3::WIFI_PREAMBLE_HT_GF, ns3::WIFI_PREAMBLE_HT_MF, ns3::WIFI_PREAMBLE_LONG, ns3::WIFI_PREAMBLE_SHORT, ns3::WIFI_PREAMBLE_VHT_MU, and ns3::WIFI_PREAMBLE_VHT_SU.
Referenced by CalculateNonLegacyPhyHeaderSnrPer().
struct InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculateNonLegacyPhyHeaderSnrPer | ( | Ptr< Event > | event | ) | const |
Calculate the SNIR at the start of the non-legacy PHY header and accumulate all SNIR changes in the snir vector.
event | the event corresponding to the first time the corresponding packet arrives |
Definition at line 901 of file interference-helper.cc.
References CalculateNoiseInterferenceW(), CalculateNonLegacyPhyHeaderPer(), CalculateSnr(), ns3::InterferenceHelper::SnrPer::per, and ns3::InterferenceHelper::SnrPer::snr.
Referenced by ns3::WifiPhy::StartReceivePayload().
|
private |
Calculate the error rate of the given PLCP payload only in the provided time window (thus enabling per MPDU PER information).
The PLCP payload can be divided into multiple chunks (e.g. due to interference from other transmissions).
event | |
ni | |
window | time window (pair of start and end times) of PLCP payload to focus on |
Definition at line 281 of file interference-helper.cc.
References CalculateChunkSuccessRate(), CalculateSnr(), ns3::WifiTxVector::GetChannelWidth(), ns3::WifiPhy::GetPlcpHeaderDuration(), ns3::WifiPhy::GetPlcpHtSigHeaderDuration(), ns3::WifiPhy::GetPlcpPreambleDuration(), ns3::WifiPhy::GetPlcpSigA1Duration(), ns3::WifiPhy::GetPlcpSigA2Duration(), ns3::WifiPhy::GetPlcpSigBDuration(), ns3::WifiPhy::GetPlcpTrainingSymbolDuration(), ns3::WifiTxVector::GetPreambleType(), m_firstPower, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, and visualizer.ipython_view::window.
Referenced by CalculatePayloadSnrPer().
struct InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculatePayloadSnrPer | ( | Ptr< Event > | event, |
std::pair< Time, Time > | relativeMpduStartStop | ||
) | const |
Calculate the SNIR at the start of the payload and accumulate all SNIR changes in the snir vector for each MPDU of an A-MPDU.
This workaround is required in order to provide one PER per MPDU, for reception success/failure evaluation, while hiding aggregation details from this class.
event | the event corresponding to the first time the corresponding packet arrives |
relativeMpduStartStop | the time window (pair of start and end times) of PLCP payload to focus on |
Definition at line 850 of file interference-helper.cc.
References CalculateNoiseInterferenceW(), CalculatePayloadPer(), CalculateSnr(), ns3::InterferenceHelper::SnrPer::per, and ns3::InterferenceHelper::SnrPer::snr.
Referenced by ns3::WifiPhy::GetReceptionStatus().
Calculate the SNIR for the event (starting from now until the event end).
event | the event corresponding to the first time the corresponding packet arrives |
Definition at line 870 of file interference-helper.cc.
References CalculateNoiseInterferenceW().
Referenced by CalculateLegacyPhyHeaderPer(), CalculateLegacyPhyHeaderSnrPer(), CalculateNonLegacyPhyHeaderPer(), CalculateNonLegacyPhyHeaderSnrPer(), CalculatePayloadPer(), CalculatePayloadSnrPer(), and ns3::WifiPhy::EndReceive().
|
private |
Calculate SNR (linear ratio) from the given signal power and noise+interference power.
signal | signal power, W |
noiseInterference | noise and interference power, W |
channelWidth | signal width in MHz |
Definition at line 223 of file interference-helper.cc.
References m_noiseFigure, NS_LOG_DEBUG, and ns3::RatioToDb().
void ns3::InterferenceHelper::EraseEvents | ( | void | ) |
Erase all events.
Definition at line 921 of file interference-helper.cc.
References AddNiChangeEvent(), m_firstPower, m_niChanges, and m_rxing.
Referenced by ns3::WifiPhy::DoChannelSwitch(), ns3::WifiPhy::DoFrequencySwitch(), and ~InterferenceHelper().
Time ns3::InterferenceHelper::GetEnergyDuration | ( | double | energyW | ) | const |
energyW | the minimum energy (W) requested |
Definition at line 181 of file interference-helper.cc.
References GetPreviousPosition(), m_niChanges, ns3::MicroSeconds(), and ns3::Simulator::Now().
Referenced by ns3::WifiPhy::MaybeCcaBusyDuration(), ns3::WifiPhy::ResumeFromOff(), ns3::WifiPhy::ResumeFromSleep(), and ns3::WifiPhy::SwitchMaybeToCcaBusy().
Ptr< ErrorRateModel > ns3::InterferenceHelper::GetErrorRateModel | ( | void | ) | const |
Return the error rate model.
Definition at line 169 of file interference-helper.cc.
References m_errorRateModel.
Referenced by ns3::WifiPhy::CalculateSnr().
|
private |
Returns an iterator to the first nichange that is later than moment.
moment | time to check from |
Definition at line 931 of file interference-helper.cc.
References m_niChanges.
Referenced by AddNiChangeEvent(), AppendEvent(), and GetPreviousPosition().
|
private |
Returns an iterator to the first nichange that is later than moment.
moment | time to check from |
moment | time to check from |
Definition at line 937 of file interference-helper.cc.
References GetNextPosition().
Referenced by AppendEvent(), and GetEnergyDuration().
void ns3::InterferenceHelper::NotifyRxEnd | ( | ) |
Notify that RX has ended.
Definition at line 960 of file interference-helper.cc.
References m_firstPower, m_niChanges, m_rxing, ns3::Simulator::Now(), and NS_LOG_FUNCTION.
Referenced by ns3::WifiPhy::AbortCurrentReception(), ns3::WifiPhy::EndReceive(), ns3::WifiPhy::SendPacket(), ns3::WifiPhy::StartReceiveHeader(), and ns3::WifiPhy::StartRx().
void ns3::InterferenceHelper::NotifyRxStart | ( | void | ) |
Notify that RX has started.
Definition at line 953 of file interference-helper.cc.
References m_rxing, and NS_LOG_FUNCTION.
Referenced by ns3::WifiPhy::StartRx().
void ns3::InterferenceHelper::SetErrorRateModel | ( | const Ptr< ErrorRateModel > | rate | ) |
Set the error rate model for this interference helper.
rate | Error rate model |
Definition at line 163 of file interference-helper.cc.
References m_errorRateModel.
Referenced by ns3::WifiPhy::SetErrorRateModel().
void ns3::InterferenceHelper::SetNoiseFigure | ( | double | value | ) |
Set the noise figure.
value | noise figure |
Definition at line 157 of file interference-helper.cc.
References m_noiseFigure.
Referenced by ns3::WifiPhy::SetRxNoiseFigure().
void ns3::InterferenceHelper::SetNumberOfReceiveAntennas | ( | uint8_t | rx | ) |
Set the number of RX antennas in the receiver corresponding to this interference helper.
rx | the number of RX antennas |
Definition at line 175 of file interference-helper.cc.
References m_numRxAntennas.
Referenced by ns3::WifiPhy::SetErrorRateModel(), ns3::WifiPhy::SetNumberOfAntennas(), and ns3::WifiPhy::SetRxNoiseFigure().
|
private |
error rate model
Definition at line 343 of file interference-helper.h.
Referenced by CalculateChunkSuccessRate(), GetErrorRateModel(), SetErrorRateModel(), and ~InterferenceHelper().
|
private |
first power
Definition at line 347 of file interference-helper.h.
Referenced by AppendEvent(), CalculateLegacyPhyHeaderPer(), CalculateNoiseInterferenceW(), CalculateNonLegacyPhyHeaderPer(), CalculatePayloadPer(), EraseEvents(), and NotifyRxEnd().
|
private |
Experimental: needed for energy duration calculation.
Definition at line 346 of file interference-helper.h.
Referenced by AddNiChangeEvent(), AppendEvent(), CalculateNoiseInterferenceW(), EraseEvents(), GetEnergyDuration(), GetNextPosition(), and NotifyRxEnd().
|
private |
noise figure (linear)
Definition at line 342 of file interference-helper.h.
Referenced by CalculateSnr(), and SetNoiseFigure().
|
private |
the number of RX antennas in the corresponding receiver
Definition at line 344 of file interference-helper.h.
Referenced by CalculateChunkSuccessRate(), and SetNumberOfReceiveAntennas().
|
private |
flag whether it is in receiving state
Definition at line 348 of file interference-helper.h.
Referenced by AppendEvent(), EraseEvents(), NotifyRxEnd(), and NotifyRxStart().