handles interference calculations More...
#include "interference-helper.h"
Classes | |
class | NiChange |
Noise and Interference (thus Ni) event. More... | |
Public Member Functions | |
InterferenceHelper () | |
~InterferenceHelper () | |
Ptr< Event > | Add (Ptr< const WifiPpdu > ppdu, const WifiTxVector &txVector, Time duration, RxPowerWattPerChannelBand rxPower, bool isStartOfdmaRxing=false) |
Add the PPDU-related signal to interference helper. More... | |
void | AddBand (WifiSpectrumBand band) |
Add a frequency band. More... | |
void | AddForeignSignal (Time duration, RxPowerWattPerChannelBand rxPower) |
Add a non-Wifi signal to interference helper. More... | |
struct PhyEntity::SnrPer | CalculatePayloadSnrPer (Ptr< Event > event, uint16_t channelWidth, WifiSpectrumBand band, uint16_t staId, 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... | |
struct PhyEntity::SnrPer | CalculatePhyHeaderSnrPer (Ptr< Event > event, uint16_t channelWidth, WifiSpectrumBand band, WifiPpduField header) const |
Calculate the SNIR at the start of the PHY header and accumulate all SNIR changes in the SNIR vector. More... | |
double | CalculateSnr (Ptr< Event > event, uint16_t channelWidth, uint8_t nss, WifiSpectrumBand band) 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, WifiSpectrumBand band) |
Ptr< ErrorRateModel > | GetErrorRateModel (void) const |
Return the error rate model. More... | |
void | NotifyRxEnd (Time endTime) |
Notify that RX has ended. More... | |
void | NotifyRxStart () |
Notify that RX has started. More... | |
void | RemoveBands (void) |
Remove the frequency bands. 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... | |
void | UpdateEvent (Ptr< Event > event, RxPowerWattPerChannelBand rxPower) |
Update event to scale its received power (W) per band. More... | |
Protected Member Functions | |
double | CalculateChunkSuccessRate (double snir, Time duration, WifiMode mode, const WifiTxVector &txVector, WifiPpduField field) const |
Calculate the success rate of the chunk given the SINR, duration, and TXVECTOR. More... | |
double | CalculatePayloadChunkSuccessRate (double snir, Time duration, const WifiTxVector &txVector, uint16_t staId=SU_STA_ID) const |
Calculate the success rate of the payload chunk given the SINR, duration, and TXVECTOR. More... | |
double | CalculateSnr (double signal, double noiseInterference, uint16_t channelWidth, uint8_t nss) 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 NiChange More... | |
typedef std::map< WifiSpectrumBand, NiChanges > | NiChangesPerBand |
Map of NiChanges per band. More... | |
Private Member Functions | |
NiChanges::iterator | AddNiChangeEvent (Time moment, NiChange change, WifiSpectrumBand band) |
Add NiChange to the list at the appropriate position and return the iterator of the new event. More... | |
void | AppendEvent (Ptr< Event > event, bool isStartOfdmaRxing) |
Append the given Event. More... | |
double | CalculateNoiseInterferenceW (Ptr< Event > event, NiChangesPerBand *nis, WifiSpectrumBand band) const |
Calculate noise and interference power in W. More... | |
double | CalculatePayloadPer (Ptr< const Event > event, uint16_t channelWidth, NiChangesPerBand *nis, WifiSpectrumBand band, uint16_t staId, 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... | |
double | CalculatePhyHeaderPer (Ptr< const Event > event, NiChangesPerBand *nis, uint16_t channelWidth, WifiSpectrumBand band, WifiPpduField header) const |
Calculate the error rate of the PHY header. More... | |
double | CalculatePhyHeaderSectionPsr (Ptr< const Event > event, NiChangesPerBand *nis, uint16_t channelWidth, WifiSpectrumBand band, PhyEntity::PhyHeaderSections phyHeaderSections) const |
Calculate the success rate of the PHY header sections for the provided event. More... | |
NiChanges::iterator | GetNextPosition (Time moment, WifiSpectrumBand band) |
Returns an iterator to the first NiChange that is later than moment. More... | |
NiChanges::iterator | GetPreviousPosition (Time moment, WifiSpectrumBand band) |
Returns an iterator to the last NiChange that is before than moment. More... | |
Private Attributes | |
Ptr< ErrorRateModel > | m_errorRateModel |
error rate model More... | |
std::map< WifiSpectrumBand, double > | m_firstPowerPerBand |
first power of each band in watts More... | |
NiChangesPerBand | m_niChangesPerBand |
NI Changes for each band. 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 131 of file interference-helper.h.
|
private |
typedef for a multimap of NiChange
Definition at line 352 of file interference-helper.h.
|
private |
Map of NiChanges per band.
Definition at line 357 of file interference-helper.h.
ns3::InterferenceHelper::InterferenceHelper | ( | ) |
Definition at line 176 of file interference-helper.cc.
ns3::InterferenceHelper::~InterferenceHelper | ( | ) |
Definition at line 183 of file interference-helper.cc.
References m_errorRateModel, and RemoveBands().
Ptr< Event > ns3::InterferenceHelper::Add | ( | Ptr< const WifiPpdu > | ppdu, |
const WifiTxVector & | txVector, | ||
Time | duration, | ||
RxPowerWattPerChannelBand | rxPower, | ||
bool | isStartOfdmaRxing = false |
||
) |
Add the PPDU-related signal to interference helper.
ppdu | the PPDU |
txVector | the TXVECTOR |
duration | the PPDU duration |
rxPower | received power per band (W) |
isStartOfdmaRxing | flag whether the event corresponds to the start of the OFDMA payload reception (only used for UL-OFDMA) //TODO simplify this once WifiPpdu is subclassed by adding an attribute |
Definition at line 190 of file interference-helper.cc.
References AppendEvent().
Referenced by AddForeignSignal(), ns3::PhyEntity::CreateInterferenceEvent(), and ns3::SpectrumWifiPhy::StartRx().
void ns3::InterferenceHelper::AddBand | ( | WifiSpectrumBand | band | ) |
Add a frequency band.
band | the band to be created |
Definition at line 223 of file interference-helper.cc.
References AddNiChangeEvent(), m_firstPowerPerBand, m_niChangesPerBand, NS_ASSERT, and NS_LOG_FUNCTION.
Referenced by ns3::YansWifiPhy::YansWifiPhy(), and ns3::SpectrumWifiPhy::UpdateInterferenceHelperBands().
void ns3::InterferenceHelper::AddForeignSignal | ( | Time | duration, |
RxPowerWattPerChannelBand | rxPower | ||
) |
Add a non-Wifi signal to interference helper.
duration | the duration of the signal |
rxPower | received power per band (W) |
Definition at line 198 of file interference-helper.cc.
References Add(), ns3::WifiMacHeader::SetQosTid(), ns3::WifiMacHeader::SetType(), and ns3::WIFI_MAC_QOSDATA.
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 |
band | identify the band to check |
Definition at line 630 of file interference-helper.cc.
References GetNextPosition(), m_niChangesPerBand, and NS_ASSERT.
Referenced by AddBand(), AppendEvent(), and EraseEvents().
Append the given Event.
event | the event to be appended |
isStartOfdmaRxing | flag whether event corresponds to the start of the OFDMA payload reception (only used for UL-OFDMA) |
Definition at line 279 of file interference-helper.cc.
References AddNiChangeEvent(), GetNextPosition(), GetPreviousPosition(), m_firstPowerPerBand, m_niChangesPerBand, m_rxing, NS_ASSERT, and NS_LOG_FUNCTION.
Referenced by Add().
|
protected |
Calculate the success rate of the chunk given the SINR, duration, and TXVECTOR.
The duration and TXVECTOR 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 |
field | the PPDU field to which the chunk belongs to |
Definition at line 390 of file interference-helper.cc.
References ns3::WifiTxVector::GetChannelWidth(), ns3::WifiMode::GetDataRate(), ns3::Time::GetSeconds(), ns3::Time::IsZero(), m_errorRateModel, and m_numRxAntennas.
Referenced by CalculatePhyHeaderSectionPsr().
|
private |
Calculate noise and interference power in W.
event | the event |
nis | the NiChanges |
band | the band |
Definition at line 361 of file interference-helper.cc.
References m_firstPowerPerBand, m_niChangesPerBand, ns3::Simulator::Now(), NS_ASSERT, NS_ASSERT_MSG, and NS_LOG_FUNCTION.
Referenced by CalculatePhyHeaderSnrPer().
|
protected |
Calculate the success rate of the payload chunk given the SINR, duration, and TXVECTOR.
The duration and TXVECTOR are used to calculate how many bits are present in the payload chunk.
snir | the SINR |
duration | the duration of the chunk |
txVector | the TXVECTOR |
staId | the station ID of the PSDU (only used for MU) |
Definition at line 403 of file interference-helper.cc.
References ns3::WifiMode::GetDataRate(), ns3::WifiTxVector::GetMode(), ns3::WifiTxVector::GetNss(), ns3::Time::GetSeconds(), ns3::Time::IsZero(), m_errorRateModel, m_numRxAntennas, and ns3::WIFI_PPDU_FIELD_DATA.
Referenced by CalculatePayloadPer(), and WifiErrorRateModelsTestCaseMimo::DoRun().
|
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 |
channelWidth | the channel width used to transmit the PSDU (in MHz) |
nis | the NiChanges |
band | identify the band used by the PSDU |
staId | the station ID of the PSDU (only used for MU) |
window | time window (pair of start and end times) of PHY payload to focus on |
Definition at line 418 of file interference-helper.cc.
References CalculatePayloadChunkSuccessRate(), ns3::WifiPhy::CalculatePhyPreambleAndHeaderDuration(), CalculateSnr(), m_firstPowerPerBand, ns3::Min(), NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::WIFI_PPDU_TYPE_UL_MU, and visualizer.ipython_view::window.
struct PhyEntity::SnrPer ns3::InterferenceHelper::CalculatePayloadSnrPer | ( | Ptr< Event > | event, |
uint16_t | channelWidth, | ||
WifiSpectrumBand | band, | ||
uint16_t | staId, | ||
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 |
channelWidth | the channel width used to transmit the PSDU (in MHz) |
band | identify the band used by the PSDU |
staId | the station ID of the PSDU (only used for MU) |
relativeMpduStartStop | the time window (pair of start and end times) of PHY payload to focus on |
Definition at line 521 of file interference-helper.cc.
References CalculatePhyHeaderSectionPsr(), ns3::WifiPhy::GetStaticPhyEntity(), and NS_LOG_FUNCTION.
Referenced by ns3::PhyEntity::GetReceptionStatus().
|
private |
Calculate the error rate of the PHY header.
The PHY header can be divided into multiple chunks (e.g. due to interference from other transmissions).
event | the event |
nis | the NiChanges |
channelWidth | the channel width (in MHz) for header measurement |
band | the band |
header | the PHY header to consider |
Definition at line 521 of file interference-helper.cc.
|
private |
Calculate the success rate of the PHY header sections for the provided event.
event | the event |
nis | the NiChanges |
channelWidth | the channel width (in MHz) for header measurement |
band | the band |
phyHeaderSections | the map of PHY header sections ( |
Definition at line 468 of file interference-helper.cc.
References ns3::Time::As(), CalculateChunkSuccessRate(), CalculateSnr(), ns3::Time::IsStrictlyPositive(), m_firstPowerPerBand, ns3::Max(), ns3::Min(), ns3::Time::NS, NS_ASSERT, NS_LOG_DEBUG, NS_LOG_FUNCTION, ns3::Seconds(), and visualizer.core::start().
Referenced by CalculatePayloadSnrPer().
struct PhyEntity::SnrPer ns3::InterferenceHelper::CalculatePhyHeaderSnrPer | ( | Ptr< Event > | event, |
uint16_t | channelWidth, | ||
WifiSpectrumBand | band, | ||
WifiPpduField | header | ||
) | const |
Calculate the SNIR at the start of the PHY header and accumulate all SNIR changes in the SNIR vector.
event | the event corresponding to the first time the corresponding PPDU arrives |
channelWidth | the channel width (in MHz) for header measurement |
band | identify the band used by the PSDU |
header | the PHY header to consider |
Definition at line 567 of file interference-helper.cc.
References CalculateNoiseInterferenceW(), and CalculateSnr().
Referenced by ns3::PhyEntity::GetPhyHeaderSnrPer().
|
protected |
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 (MHz) |
nss | the number of spatial streams |
Definition at line 335 of file interference-helper.cc.
References m_errorRateModel, m_noiseFigure, m_numRxAntennas, NS_LOG_DEBUG, NS_LOG_FUNCTION, and ns3::RatioToDb().
double ns3::InterferenceHelper::CalculateSnr | ( | Ptr< Event > | event, |
uint16_t | channelWidth, | ||
uint8_t | nss, | ||
WifiSpectrumBand | band | ||
) | const |
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 |
channelWidth | the channel width (in MHz) |
nss | the number of spatial streams |
band | identify the band used by the PSDU |
Definition at line 567 of file interference-helper.cc.
Referenced by CalculatePayloadPer(), CalculatePhyHeaderSectionPsr(), CalculatePhyHeaderSnrPer(), WifiErrorRateModelsTestCaseMimo::DoRun(), ns3::PhyEntity::EndOfMpdu(), ns3::PhyEntity::EndPreambleDetectionPeriod(), and ns3::PhyEntity::EndReceivePayload().
void ns3::InterferenceHelper::EraseEvents | ( | void | ) |
Erase all events.
Definition at line 599 of file interference-helper.cc.
References AddNiChangeEvent(), m_firstPowerPerBand, m_niChangesPerBand, and m_rxing.
Referenced by ns3::WifiPhy::DoChannelSwitch().
Time ns3::InterferenceHelper::GetEnergyDuration | ( | double | energyW, |
WifiSpectrumBand | band | ||
) |
energyW | the minimum energy (W) requested |
band | identify the requested band |
Definition at line 259 of file interference-helper.cc.
References GetPreviousPosition(), m_niChangesPerBand, ns3::MicroSeconds(), ns3::Simulator::Now(), and NS_ASSERT.
Referenced by OfdmaSpectrumWifiPhy::GetEnergyDuration(), 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 247 of file interference-helper.cc.
References m_errorRateModel.
Referenced by ns3::WifiPhy::AssignStreams(), and ns3::WifiPhy::CalculateSnr().
|
private |
Returns an iterator to the first NiChange that is later than moment.
moment | time to check from |
band | identify the band to check |
Definition at line 612 of file interference-helper.cc.
References m_niChangesPerBand, and NS_ASSERT.
Referenced by AddNiChangeEvent(), AppendEvent(), and GetPreviousPosition().
|
private |
Returns an iterator to the last NiChange that is before than moment.
moment | time to check from |
band | identify the band to check |
Definition at line 620 of file interference-helper.cc.
References GetNextPosition().
Referenced by AppendEvent(), GetEnergyDuration(), NotifyRxEnd(), and UpdateEvent().
void ns3::InterferenceHelper::NotifyRxEnd | ( | Time | endTime | ) |
Notify that RX has ended.
endTime | the end time of the signal |
Definition at line 645 of file interference-helper.cc.
References GetPreviousPosition(), m_firstPowerPerBand, m_niChangesPerBand, m_rxing, NS_ASSERT, and NS_LOG_FUNCTION.
Referenced by ns3::WifiPhy::AbortCurrentReception(), ns3::PhyEntity::EndPreambleDetectionPeriod(), ns3::PhyEntity::NotifyInterferenceRxEndAndClear(), and ns3::WifiPhy::ResetReceive().
void ns3::InterferenceHelper::NotifyRxStart | ( | void | ) |
Notify that RX has started.
Definition at line 638 of file interference-helper.cc.
References m_rxing, and NS_LOG_FUNCTION.
Referenced by ns3::PhyEntity::EndPreambleDetectionPeriod(), and ns3::PhyEntity::StartPreambleDetectionPeriod().
void ns3::InterferenceHelper::RemoveBands | ( | void | ) |
Remove the frequency bands.
Definition at line 211 of file interference-helper.cc.
References m_firstPowerPerBand, m_niChangesPerBand, and NS_LOG_FUNCTION.
Referenced by ~InterferenceHelper(), and ns3::SpectrumWifiPhy::UpdateInterferenceHelperBands().
void ns3::InterferenceHelper::SetErrorRateModel | ( | const Ptr< ErrorRateModel > | rate | ) |
Set the error rate model for this interference helper.
rate | Error rate model |
Definition at line 241 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 235 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 253 of file interference-helper.cc.
References m_numRxAntennas.
Referenced by WifiErrorRateModelsTestCaseMimo::DoRun(), ns3::WifiPhy::SetErrorRateModel(), ns3::WifiPhy::SetNumberOfAntennas(), and ns3::WifiPhy::SetRxNoiseFigure().
void ns3::InterferenceHelper::UpdateEvent | ( | Ptr< Event > | event, |
RxPowerWattPerChannelBand | rxPower | ||
) |
Update event to scale its received power (W) per band.
event | the event to be updated |
rxPower | the received power (W) per band to be added to the current event |
Definition at line 315 of file interference-helper.cc.
References GetPreviousPosition(), m_niChangesPerBand, NS_ASSERT, and NS_LOG_FUNCTION.
Referenced by ns3::PhyEntity::UpdateInterferenceEvent().
|
private |
error rate model
Definition at line 424 of file interference-helper.h.
Referenced by ~InterferenceHelper(), CalculateChunkSuccessRate(), CalculatePayloadChunkSuccessRate(), CalculateSnr(), GetErrorRateModel(), and SetErrorRateModel().
|
private |
first power of each band in watts
Definition at line 427 of file interference-helper.h.
Referenced by AddBand(), AppendEvent(), CalculateNoiseInterferenceW(), CalculatePayloadPer(), CalculatePhyHeaderSectionPsr(), EraseEvents(), NotifyRxEnd(), and RemoveBands().
|
private |
NI Changes for each band.
Definition at line 426 of file interference-helper.h.
Referenced by AddBand(), AddNiChangeEvent(), AppendEvent(), CalculateNoiseInterferenceW(), EraseEvents(), GetEnergyDuration(), GetNextPosition(), NotifyRxEnd(), RemoveBands(), and UpdateEvent().
|
private |
noise figure (linear)
Definition at line 423 of file interference-helper.h.
Referenced by CalculateSnr(), and SetNoiseFigure().
|
private |
the number of RX antennas in the corresponding receiver
Definition at line 425 of file interference-helper.h.
Referenced by CalculateChunkSuccessRate(), CalculatePayloadChunkSuccessRate(), CalculateSnr(), and SetNumberOfReceiveAntennas().
|
private |
flag whether it is in receiving state
Definition at line 428 of file interference-helper.h.
Referenced by AppendEvent(), EraseEvents(), NotifyRxEnd(), and NotifyRxStart().