handles interference calculations More...
#include "interference-helper.h"
Classes | |
class | NiChange |
Noise and Interference (thus Ni) event. More... | |
struct | SnrPer |
Signal event for a PPDU. More... | |
Public Member Functions | |
InterferenceHelper () | |
~InterferenceHelper () | |
Ptr< Event > | Add (Ptr< const WifiPpdu > ppdu, WifiTxVector txVector, Time duration, double rxPower) |
Add the PPDU-related signal to interference helper. More... | |
void | AddForeignSignal (Time duration, double rxPower) |
Add a non-Wifi signal to interference helper. More... | |
struct InterferenceHelper::SnrPer | CalculateHtPhyHeaderSnrPer (Ptr< Event > event) const |
Calculate the SNIR at the start of the HT PHY header and accumulate all SNIR changes in the SNIR vector. More... | |
struct InterferenceHelper::SnrPer | CalculateNonHtPhyHeaderSnrPer (Ptr< Event > event) const |
Calculate the SNIR at the start of the non-HT 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... | |
Protected Member Functions | |
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 | CalculateSnr (double signal, double noiseInterference, WifiTxVector txVector) const |
Calculate SNR (linear ratio) from the given signal power and noise+interference power. 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 | CalculateHtPhyHeaderPer (Ptr< const Event > event, NiChanges *ni) const |
Calculate the error rate of the HT PHY header. More... | |
double | CalculateNoiseInterferenceW (Ptr< Event > event, NiChanges *ni) const |
Calculate noise and interference power in W. More... | |
double | CalculateNonHtPhyHeaderPer (Ptr< const Event > event, NiChanges *ni) const |
Calculate the error rate of the non-HT PHY header. More... | |
double | CalculatePayloadChunkSuccessRate (double snir, Time duration, WifiTxVector txVector) const |
Calculate the success rate of the payload chunk given the SINR, duration, and Wi-Fi mode. More... | |
double | CalculatePayloadPer (Ptr< const Event > event, NiChanges *ni, std::pair< Time, Time > window) const |
Calculate the error rate of the given PHY payload only in the provided time window (thus enabling per MPDU PER information). 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 in watts 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 119 of file interference-helper.h.
|
private |
typedef for a multimap of NiChanges
Definition at line 312 of file interference-helper.h.
ns3::InterferenceHelper::InterferenceHelper | ( | ) |
Definition at line 138 of file interference-helper.cc.
References AddNiChangeEvent().
ns3::InterferenceHelper::~InterferenceHelper | ( | ) |
Definition at line 148 of file interference-helper.cc.
References EraseEvents(), and m_errorRateModel.
Ptr< Event > ns3::InterferenceHelper::Add | ( | Ptr< const WifiPpdu > | ppdu, |
WifiTxVector | txVector, | ||
Time | duration, | ||
double | rxPower | ||
) |
Add the PPDU-related signal to interference helper.
ppdu | the PPDU |
txVector | the TXVECTOR |
rxPower | received power (W) |
Definition at line 155 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 | received power (W) |
Definition at line 163 of file interference-helper.cc.
References Add(), ns3::WifiMacHeader::SetType(), ns3::WIFI_MAC_QOSDATA, and ns3::WIFI_PHY_BAND_UNSPECIFIED.
Referenced by ns3::SpectrumWifiPhy::StartRx().
|
private |
Add NiChange to the list at the appropriate position and return the iterator of the new event.
moment | time to check from |
change | the NiChange to add |
Definition at line 837 of file interference-helper.cc.
References GetNextPosition(), and m_niChanges.
Referenced by AppendEvent(), EraseEvents(), and InterferenceHelper().
Append the given Event.
event |
Definition at line 217 of file interference-helper.cc.
References AddNiChangeEvent(), GetNextPosition(), GetPreviousPosition(), m_firstPower, m_niChanges, m_rxing, and NS_LOG_FUNCTION.
Referenced by Add().
|
protected |
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 | the SINR |
duration | the duration of the chunk |
mode | the WifiMode |
txVector | the TXVECTOR |
Definition at line 285 of file interference-helper.cc.
References ns3::WifiTxVector::GetChannelWidth(), ns3::WifiMode::GetDataRate(), ns3::Time::GetSeconds(), ns3::Time::IsZero(), and m_errorRateModel.
Referenced by CalculateHtPhyHeaderPer(), CalculateNonHtPhyHeaderPer(), and WifiErrorRateModelsTestCaseMimo::DoRun().
|
private |
Calculate the error rate of the HT PHY header.
TheHT PHY header can be divided into multiple chunks (e.g. due to interference from other transmissions).
event | the event |
ni | the NiChanges |
Definition at line 474 of file interference-helper.cc.
References CalculateChunkSuccessRate(), CalculateSnr(), ns3::WifiPhy::GetHePhyHeaderMode(), ns3::WifiPhy::GetHtPhyHeaderMode(), ns3::WifiPhy::GetPhyHeaderDuration(), ns3::WifiPhy::GetPhyHeaderMode(), ns3::WifiPhy::GetPhyHtSigHeaderDuration(), ns3::WifiPhy::GetPhyPreambleDuration(), ns3::WifiPhy::GetPhySigA1Duration(), ns3::WifiPhy::GetPhySigA2Duration(), ns3::WifiPhy::GetPhySigBDuration(), ns3::WifiPhy::GetPhyTrainingSymbolDuration(), ns3::WifiTxVector::GetPreambleType(), ns3::WifiPhy::GetVhtPhyHeaderMode(), 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 CalculateHtPhyHeaderSnrPer().
struct InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculateHtPhyHeaderSnrPer | ( | Ptr< Event > | event | ) | const |
Calculate the SNIR at the start of the HT PHY header and accumulate all SNIR changes in the SNIR vector.
event | the event corresponding to the first time the corresponding PPDU arrives |
Definition at line 791 of file interference-helper.cc.
References CalculateHtPhyHeaderPer(), CalculateNoiseInterferenceW(), CalculateSnr(), ns3::InterferenceHelper::SnrPer::per, and ns3::InterferenceHelper::SnrPer::snr.
Referenced by ns3::WifiPhy::StartReceivePayload().
|
private |
Calculate noise and interference power in W.
event | the event |
ni | the NiChanges |
Definition at line 264 of file interference-helper.cc.
References m_firstPower, m_niChanges, ns3::Simulator::Now(), and NS_ASSERT_MSG.
Referenced by CalculateHtPhyHeaderSnrPer(), CalculateNonHtPhyHeaderSnrPer(), CalculatePayloadSnrPer(), and CalculateSnr().
|
private |
Calculate the error rate of the non-HT PHY header.
The non-HT PHY header can be divided into multiple chunks (e.g. due to interference from other transmissions).
event | the event |
ni | the NiChanges |
Definition at line 361 of file interference-helper.cc.
References CalculateChunkSuccessRate(), CalculateSnr(), ns3::WifiPhy::GetPhyHeaderDuration(), ns3::WifiPhy::GetPhyHeaderMode(), ns3::WifiPhy::GetPhyHtSigHeaderDuration(), ns3::WifiPhy::GetPhyPreambleDuration(), ns3::WifiPhy::GetPhySigA1Duration(), ns3::WifiPhy::GetPhySigA2Duration(), ns3::WifiPhy::GetPhySigBDuration(), ns3::WifiPhy::GetPhyTrainingSymbolDuration(), 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 CalculateNonHtPhyHeaderSnrPer().
struct InterferenceHelper::SnrPer ns3::InterferenceHelper::CalculateNonHtPhyHeaderSnrPer | ( | Ptr< Event > | event | ) | const |
Calculate the SNIR at the start of the non-HT PHY header and accumulate all SNIR changes in the SNIR vector.
event | the event corresponding to the first time the corresponding PPDU arrives |
Definition at line 771 of file interference-helper.cc.
References CalculateNoiseInterferenceW(), CalculateNonHtPhyHeaderPer(), CalculateSnr(), ns3::InterferenceHelper::SnrPer::per, and ns3::InterferenceHelper::SnrPer::snr.
Referenced by ns3::WifiPhy::ContinueReceiveHeader(), and ns3::WifiPhy::StartReceiveHeader().
|
private |
Calculate the success rate of the payload 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 | the SINR |
duration | the duration of the chunk |
txVector | the TXVECTOR |
Definition at line 298 of file interference-helper.cc.
References ns3::WifiMode::GetDataRate(), ns3::WifiTxVector::GetMode(), ns3::WifiTxVector::GetNss(), ns3::Time::GetSeconds(), ns3::Time::IsZero(), and m_errorRateModel.
Referenced by CalculatePayloadPer().
|
private |
Calculate the error rate of the given PHY payload only in the provided time window (thus enabling per MPDU PER information).
The PHY payload can be divided into multiple chunks (e.g. due to interference from other transmissions).
event | the event |
ni | the NiChanges |
window | time window (pair of start and end times) of PHY payload to focus on |
Definition at line 313 of file interference-helper.cc.
References CalculatePayloadChunkSuccessRate(), CalculateSnr(), ns3::WifiPhy::GetPhyHeaderDuration(), ns3::WifiPhy::GetPhyHtSigHeaderDuration(), ns3::WifiPhy::GetPhyPreambleDuration(), ns3::WifiPhy::GetPhySigA1Duration(), ns3::WifiPhy::GetPhySigA2Duration(), ns3::WifiPhy::GetPhySigBDuration(), ns3::WifiPhy::GetPhyTrainingSymbolDuration(), ns3::WifiTxVector::GetPreambleType(), m_firstPower, ns3::Min(), 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 PPDU arrives |
relativeMpduStartStop | the time window (pair of start and end times) of PHY payload to focus on |
Definition at line 740 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 PPDU arrives |
Definition at line 760 of file interference-helper.cc.
References CalculateNoiseInterferenceW().
Referenced by CalculateHtPhyHeaderPer(), CalculateHtPhyHeaderSnrPer(), CalculateNonHtPhyHeaderPer(), CalculateNonHtPhyHeaderSnrPer(), CalculatePayloadPer(), CalculatePayloadSnrPer(), WifiErrorRateModelsTestCaseMimo::DoRun(), ns3::WifiPhy::EndOfMpdu(), and ns3::WifiPhy::EndReceive().
|
protected |
Calculate SNR (linear ratio) from the given signal power and noise+interference power.
signal | signal power, W |
noiseInterference | noise and interference power, W |
txVector | the TXVECTOR |
Definition at line 241 of file interference-helper.cc.
References ns3::WifiTxVector::GetChannelWidth(), ns3::WifiTxVector::GetNss(), m_noiseFigure, m_numRxAntennas, NS_LOG_DEBUG, and ns3::RatioToDb().
void ns3::InterferenceHelper::EraseEvents | ( | void | ) |
Erase all events.
Definition at line 811 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 199 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 187 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 821 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 827 of file interference-helper.cc.
References GetNextPosition().
Referenced by AppendEvent(), GetEnergyDuration(), and NotifyRxEnd().
void ns3::InterferenceHelper::NotifyRxEnd | ( | ) |
Notify that RX has ended.
Definition at line 850 of file interference-helper.cc.
References GetPreviousPosition(), m_firstPower, m_rxing, ns3::Simulator::Now(), and NS_LOG_FUNCTION.
Referenced by ns3::WifiPhy::AbortCurrentReception(), ns3::WifiPhy::EndReceive(), ns3::WifiPhy::ResetReceive(), ns3::WifiPhy::StartReceiveHeader(), and ns3::WifiPhy::StartRx().
void ns3::InterferenceHelper::NotifyRxStart | ( | void | ) |
Notify that RX has started.
Definition at line 843 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 181 of file interference-helper.cc.
References m_errorRateModel.
Referenced by WifiErrorRateModelsTestCaseMimo::DoRun(), and ns3::WifiPhy::SetErrorRateModel().
void ns3::InterferenceHelper::SetNoiseFigure | ( | double | value | ) |
Set the noise figure.
value | noise figure in linear scale |
Definition at line 175 of file interference-helper.cc.
References m_noiseFigure.
Referenced by WifiErrorRateModelsTestCaseMimo::DoRun(), and 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 193 of file interference-helper.cc.
References m_numRxAntennas.
Referenced by WifiErrorRateModelsTestCaseMimo::DoRun(), ns3::WifiPhy::SetErrorRateModel(), ns3::WifiPhy::SetNumberOfAntennas(), and ns3::WifiPhy::SetRxNoiseFigure().
|
private |
error rate model
Definition at line 374 of file interference-helper.h.
Referenced by CalculateChunkSuccessRate(), CalculatePayloadChunkSuccessRate(), GetErrorRateModel(), SetErrorRateModel(), and ~InterferenceHelper().
|
private |
first power in watts
Definition at line 378 of file interference-helper.h.
Referenced by AppendEvent(), CalculateHtPhyHeaderPer(), CalculateNoiseInterferenceW(), CalculateNonHtPhyHeaderPer(), CalculatePayloadPer(), EraseEvents(), and NotifyRxEnd().
|
private |
Experimental: needed for energy duration calculation.
Definition at line 377 of file interference-helper.h.
Referenced by AddNiChangeEvent(), AppendEvent(), CalculateNoiseInterferenceW(), EraseEvents(), GetEnergyDuration(), and GetNextPosition().
|
private |
noise figure (linear)
Definition at line 373 of file interference-helper.h.
Referenced by CalculateSnr(), and SetNoiseFigure().
|
private |
the number of RX antennas in the corresponding receiver
Definition at line 375 of file interference-helper.h.
Referenced by CalculateSnr(), and SetNumberOfReceiveAntennas().
|
private |
flag whether it is in receiving state
Definition at line 379 of file interference-helper.h.
Referenced by AppendEvent(), EraseEvents(), NotifyRxEnd(), and NotifyRxStart().