ns3::SatPhyRxCarrierPerWindow Class Reference

Inherited the functionality of ground station SatPhyRxCarriers and extended it with CRDSA functionality. More...

#include "satellite-phy-rx-carrier-per-window.h"

+ Inheritance diagram for ns3::SatPhyRxCarrierPerWindow:
+ Collaboration diagram for ns3::SatPhyRxCarrierPerWindow:

Classes

struct  essaPacketRxParams_s
 Struct for storing the E-SSA packet specific Rx parameters. More...
 

Public Types

typedef void(* WindowLoadTraceCallback) (double windowLoad)
 Callback signature for WindowLoadTrace trace source. More...
 
- Public Types inherited from ns3::SatPhyRxCarrier
enum  CarrierType {
  BASE , DEDICATED_ACCESS , RA_SLOTTED_ALOHA , RA_CRDSA ,
  RA_ESSA
}
 Possible carrier types. More...
 
typedef void(* LinkBudgetTraceCallback) (Ptr< SatSignalParameters > rxParams, Mac48Address receiverAddress, Mac48Address destinationAddress, double interference, double sinr)
 Callback signature for LinkBudgetTrace trace source. More...
 
typedef void(* LinkSinrTraceCallback) (double sinr, const Address &utAddress)
 Callback signature for LinkSinrTrace trace source. More...
 
typedef void(* PhyRxCollisionCallback) (uint32_t nPackets, const Address &utAddress, bool isCollided)
 Common callback signature for trace sources related to packets reception by PHY and its collision. More...
 
typedef void(* PhyRxErrorCallback) (uint32_t nPackets, const Address &utAddress, bool isError)
 Common callback signature for trace sources related to packets reception by PHY and its error. More...
 
typedef void(* RxPowerTraceCallback) (double rxPower, const Address &utAddress)
 Callback signature for RxPowerTrace trace source. More...
 
enum  State { IDLE , RX }
 Enum for PHY states. More...
 

Public Member Functions

 SatPhyRxCarrierPerWindow (uint32_t carrierId, Ptr< SatPhyRxCarrierConf > carrierConf, Ptr< SatWaveformConf > waveformConf, bool randomAccessEnabled)
 Constructor. More...
 
virtual ~SatPhyRxCarrierPerWindow ()
 Destructor. More...
 
void BeginEndScheduling ()
 Function for initializing the window end scheduling. More...
 
virtual CarrierType GetCarrierType ()
 Method for querying the type of the carrier. More...
 
- Public Member Functions inherited from ns3::SatPhyRxCarrierPerSlot
 SatPhyRxCarrierPerSlot (uint32_t carrierId, Ptr< SatPhyRxCarrierConf > carrierConf, Ptr< SatWaveformConf > waveformConf, bool randomAccessEnabled)
 Constructor. More...
 
virtual ~SatPhyRxCarrierPerSlot ()
 Destructor. More...
 
uint8_t GetRandomAccessAllocationChannelId () const
 Function for getting the random access allocation channel ID. More...
 
void SetRandomAccessAllocationChannelId (uint8_t randomAccessAllocationChannelId)
 Function for setting the random access allocation channel ID. More...
 
- Public Member Functions inherited from ns3::SatPhyRxCarrier
 SatPhyRxCarrier (uint32_t carrierId, Ptr< SatPhyRxCarrierConf > carrierConf, Ptr< SatWaveformConf > waveformConf, bool isRandomAccessEnabled)
 Constructor. More...
 
virtual ~SatPhyRxCarrier ()
 Destructor. More...
 
uint32_t GetBeamId ()
 Get ID the ID of the beam this carrier is attached to. More...
 
double GetRxTemperatureK ()
 Method for querying the temperature of the carrier. More...
 
uint32_t GetSatId ()
 Get ID the ID of the satellite this carrier is attached to. More...
 
void SetAverageNormalizedOfferedLoadCallback (SatPhyRx::AverageNormalizedOfferedLoadCallback callback)
 Function for setting the AverageNormalizedOfferedLoadCallback callback. More...
 
void SetBeamId (uint32_t beamId)
 Function for setting the beam id for all the transmissions from this SatPhyTx. More...
 
void SetCnoCb (SatPhyRx::CnoCallback cb)
 Function for settign the C/NO callback. More...
 
void SetNodeInfo (const Ptr< SatNodeInfo > nodeInfo)
 Function for setting the node info class. More...
 
void SetPhy (Ptr< SatPhy > phy)
 Function for setting the SatPhy module. More...
 
void SetReceiveCb (SatPhyRx::ReceiveCallback cb)
 Function for setting the receive callback. More...
 
void SetSatId (uint32_t satId)
 Function for setting the satellite id for all the transmissions from this SatPhyTx. More...
 
virtual bool StartRx (Ptr< SatSignalParameters > rxParams)
 Function for starting packet reception from the SatChannel. More...
 

Static Public Member Functions

static TypeId GetTypeId (void)
 Get the TypeId of the class. More...
 
- Static Public Member Functions inherited from ns3::SatPhyRxCarrierPerSlot
static TypeId GetTypeId (void)
 Get the TypeId of the class. More...
 
- Static Public Member Functions inherited from ns3::SatPhyRxCarrier
static TypeId GetTypeId (void)
 Function for gettign the NS-3 type ID. More...
 

Protected Member Functions

virtual void DoDispose ()
 Dispose implementation. More...
 
virtual void ReceiveSlot (SatPhyRxCarrier::rxParams_s packetRxParams, const uint32_t nPackets)
 Receive a slot. More...
 
- Protected Member Functions inherited from ns3::SatPhyRxCarrierPerSlot
double CalculateAverageNormalizedOfferedRandomAccessLoad ()
 Function for calculating the average normalized offered random access load. More...
 
virtual Ptr< SatInterference::InterferenceChangeEventCreateInterference (Ptr< SatSignalParameters > rxParams, Address rxAddress)
 Create an interference event based on Rx parameters and address. More...
 
virtual void EndRxData (uint32_t key)
 Function for ending the packet reception from the SatChannel. More...
 
SatPhyRxCarrierConf::RandomAccessCollisionModel GetRandomAccessCollisionModel () const
 Get the random access collision model of the carrier. More...
 
bool IsRandomAccessDynamicLoadControlEnabled () const
 Check if random access dynamic load control is enabled. More...
 
void SaveMeasuredRandomAccessLoad (double measuredRandomAccessLoad)
 Function for saving the measured random access load. More...
 
- Protected Member Functions inherited from ns3::SatPhyRxCarrier
double CalculateCompositeSinr (double sinr1, double sinr2)
 Function for calculating the composite SINR. More...
 
double CalculateSinr (double rxPowerW, double ifPowerW, double rxNoisePowerW, double rxAciIfPowerW, double rxExtNoisePowerW, double otherInterference)
 Function for calculating the SINR. More...
 
double CalculateSinr (double sinr, double otherInterference)
 Calculate final SINR with PHY specific parameters and given calculated SINR. More...
 
void ChangeState (State newState)
 Function for changing the receiver state. More...
 
bool CheckAgainstLinkResults (double cSinr, Ptr< SatSignalParameters > rxParams)
 Function for checking the SINR against the link results. More...
 
void CheckRxStateSanity ()
 Function for checking the Rx state sanity. More...
 
void DecreaseNumOfRxState (SatEnums::PacketType_t packetType)
 Function for decreasing the number of ongoing transmissions. More...
 
void DoCompositeSinrOutputTrace (double cSinr)
 Function for composite SINR output tracing. More...
 
virtual void DoCreateInterferenceEliminationModel (Ptr< SatPhyRxCarrierConf > carrierConf, uint32_t carrierId, Ptr< SatWaveformConf > waveformConf)
 Create an interference cancelation model for this carrier. More...
 
virtual void DoCreateInterferenceModel (Ptr< SatPhyRxCarrierConf > carrierConf, uint32_t carrierId, double rxBandwidthHz)
 Create an interference model for this carrier. More...
 
uint32_t GetCarrierId () const
 Get the ID of the carrier. More...
 
Ptr< SatChannelEstimationErrorContainerGetChannelEstimationErrorContainer ()
 Get a pointer to the channel estimation error container of the carrier. More...
 
virtual SatEnums::ChannelType_t GetChannelType ()
 Get the channel type. More...
 
virtual const bool GetDefaultReceiveMode ()
 Get the default receive mode for the carrier. More...
 
Ptr< SatInterferenceEliminationGetInterferenceEliminationModel ()
 Get pointer to the current interference elimination model. More...
 
Ptr< SatInterferenceGetInterferenceModel ()
 Get pointer to the current interference model. More...
 
virtual SatEnums::RegenerationMode_t GetLinkRegenerationMode ()
 Get the link regeneration mode. More...
 
Ptr< SatLinkResultsGetLinkResults ()
 Get pointer to the link results given by the carrier creation configuration. More...
 
Ptr< SatNodeInfoGetNodeInfo ()
 Get the satellite node info. More...
 
Mac48Address GetOwnAddress ()
 Get the MAC address of the carrier. More...
 
std::pair< bool, SatPhyRxCarrier::rxParams_sGetReceiveParams (Ptr< SatSignalParameters > rxParams)
 Rx parameter storage methods. More...
 
State GetState ()
 Get the state of the carrier. More...
 
rxParams_s GetStoredRxParams (uint32_t key)
 Get stored rxParams under a key. More...
 
double GetUniformRandomValue (double min, double max)
 A helper method for getting values form a uniform random variable in child classes. More...
 
Ptr< SatWaveformConfGetWaveformConf ()
 Get pointer to the waveform configuration. More...
 
double GetWorstSinr (double sinr1, double sinr2)
 Function for calculating the worst sinr between uplink and downlink. More...
 
void IncreaseNumOfRxState (SatEnums::PacketType_t packetType)
 Function for increasing the number of ongoing transmissions. More...
 
bool IsCompositeSinrOutputTraceEnabled () const
 Check if composite SINR output trace is enabled. More...
 
bool IsReceivingDedicatedAccess ()
 Check if the carrier is receiving a dedicated access packet. More...
 
void RemoveStoredRxParams (uint32_t key)
 Remove stored rxParams under a key. More...
 
void SetChannelType (SatEnums::ChannelType_t channelType)
 Set the channel type for the carrier. More...
 
void SetLinkRegenerationMode (SatEnums::RegenerationMode_t linkRegenerationMode)
 Set the link regeneration mode. More...
 
void StoreRxParams (uint32_t key, rxParams_s rxParams)
 Store rxParams under a key. More...
 

Protected Attributes

TracedCallback< uint32_t, const Address &, bool > m_essaRxCollisionTrace
 EssaRxError trace source. More...
 
TracedCallback< uint32_t, const Address &, bool > m_essaRxErrorTrace
 EssaRxError trace source. More...
 
TracedCallback< double > m_windowLoadTrace
 WindowLoad trace source. More...
 
- Protected Attributes inherited from ns3::SatPhyRxCarrierPerSlot
uint32_t m_randomAccessBitsInFrame
 The number of random access bits in current frame. More...
 
TracedCallback< uint32_t, const Address &, bool > m_slottedAlohaRxCollisionTrace
 SlottedAlohaRxCollision trace source. More...
 
TracedCallback< uint32_t, const Address &, bool > m_slottedAlohaRxErrorTrace
 SlottedAlohaRxError trace source. More...
 
- Protected Attributes inherited from ns3::SatPhyRxCarrier
SatPhyRxCarrierConf::AdditionalInterferenceCallback m_additionalInterferenceCallback
 Callback to get additional interference. More...
 
SatPhy::AverageNormalizedOfferedLoadCallback m_avgNormalizedOfferedLoadCallback
 Average normalized offered load callback. More...
 
SatPhy::CnoCallback m_cnoCallback
 The upper layer C/N0 receive callback. More...
 
TracedCallback< uint32_t, const Address & > m_daRxCarrierIdTrace
 
TracedCallback< uint32_t, const Address &, bool > m_daRxTrace
 DaRx trace source. More...
 
TracedCallback< Ptr< SatSignalParameters >, Mac48Address, Mac48Address, double, double > m_linkBudgetTrace
 The trace source on packet receptiong. More...
 
SatEnums::RegenerationMode_t m_linkRegenerationMode
 Link regeneration mode. More...
 
TracedCallback< double, const Address & > m_linkSinrTrace
 A callback for link specific SINR in dB. More...
 
const bool m_randomAccessEnabled
 Is random access enabled for this carrier. More...
 
double m_rxAciIfPowerW
 RX Adjacent channel interference. More...
 
double m_rxBandwidthHz
 RX Bandwidth in Hz. More...
 
SatPhyRx::ReceiveCallback m_rxCallback
 The upper layer package receive callback. More...
 
double m_rxExtNoisePowerW
 External noise power system RX noise. More...
 
double m_rxNoisePowerW
 RX noise. More...
 
TracedCallback< double, const Address & > m_rxPowerTrace
 A callback for received signal power in dBW. More...
 
double m_rxTemperatureK
 RX noise temperature in K. More...
 
TracedCallback< double, const Address & > m_sinrTrace
 A callback for transmission composite SINR at UT (BBFrame) or GW (time slot). More...
 

Private Types

typedef std::list< SatPhyRxCarrierPerWindow::essaPacketRxParams_spacketList_t
 

Private Member Functions

void AddEssaPacket (SatPhyRxCarrierPerWindow::essaPacketRxParams_s essaPacketParams)
 Function for storing the received E-SSA packets. More...
 
double CalculateNormalizedOfferedRandomAccessLoad ()
 Function for calculating the normalized offered random access load. More...
 
void CalculatePacketInterferenceVectors (SatPhyRxCarrierPerWindow::essaPacketRxParams_s &packet)
 Calculate gamma and Interference vectors for a single packet. More...
 
void CleanOldPackets (const Time windowStartTime)
 Remove old packets from packet container. More...
 
void DoSic (packetList_t::iterator processedPacket, std::pair< packetList_t::iterator, packetList_t::iterator > windowBounds)
 Perform SIC for a given decoded packet. More...
 
void DoWindowEnd ()
 Function called when a window ends. More...
 
void EliminatePreviousInterferences (SatPhyRxCarrierPerWindow::essaPacketRxParams_s &packet)
 Calculate gamma and Interference vectors for a single packet. More...
 
double GetEffectiveSnir (const SatPhyRxCarrierPerWindow::essaPacketRxParams_s &packet)
 Get the effective SNIR of the packet using the Mutual Information function. More...
 
packetList_t::iterator GetHighestSnirPacket (const std::pair< packetList_t::iterator, packetList_t::iterator > windowBounds)
 Get the packet with the highst SNIR on the list. More...
 
std::pair< double, double > GetNormalizedPacketInterferenceTime (const SatPhyRxCarrierPerWindow::essaPacketRxParams_s &packet, const SatPhyRxCarrierPerWindow::essaPacketRxParams_s &interferingPacket)
 Get the normalized start and end time between two interfering packets. More...
 
std::pair< packetList_t::iterator, packetList_t::iterator > GetWindowBounds (Time startTime, Time endTime)
 Get a pair of iterators, pointing to the first element in the window, and to the first after the window. More...
 
void MeasureRandomAccessLoad ()
 Function for measuring the random access load. More...
 
bool PacketCanBeDetected (const SatPhyRxCarrierPerWindow::essaPacketRxParams_s &packet)
 Function for processing a window. More...
 
void ProcessWindow (Time startTime, Time endTime)
 Function for processing a window. More...
 

Private Attributes

double m_detectionThreshold
 SNIR detection threshold for a packet (in magnitude) More...
 
packetList_t m_essaPacketContainer
 ESSA packet container. More...
 
Time m_firstWindow
 The time of the first window. More...
 
uint32_t m_payloadBytesInWindow
 The number of payload bytes in the window. More...
 
uint32_t m_sicEnabled
 Enable Sic. More...
 
uint32_t m_spreadingFactor
 The spreading factor of packets. More...
 
Time m_windowDelay
 The delay before processing a sliding window. More...
 
Time m_windowDuration
 The duration of the sliding window. More...
 
bool m_windowEndSchedulingInitialized
 Has the window end scheduling been initialized. More...
 
uint32_t m_windowSicIterations
 The number of SIC iterations performed on each window. More...
 
Time m_windowStep
 The step of the sliding window. More...
 

Detailed Description

Inherited the functionality of ground station SatPhyRxCarriers and extended it with CRDSA functionality.

Definition at line 49 of file satellite-phy-rx-carrier-per-window.h.

Member Typedef Documentation

◆ packetList_t

◆ WindowLoadTraceCallback

typedef void(* ns3::SatPhyRxCarrierPerWindow::WindowLoadTraceCallback) (double windowLoad)

Callback signature for WindowLoadTrace trace source.

Definition at line 111 of file satellite-phy-rx-carrier-per-window.h.

Constructor & Destructor Documentation

◆ SatPhyRxCarrierPerWindow()

ns3::SatPhyRxCarrierPerWindow::SatPhyRxCarrierPerWindow ( uint32_t  carrierId,
Ptr< SatPhyRxCarrierConf carrierConf,
Ptr< SatWaveformConf waveformConf,
bool  randomAccessEnabled 
)

Constructor.

Parameters
carrierIdID of the carrier
carrierConfCarrier configuration
waveformConfWaveform configuration
randomAccessEnabledIs this a RA carrier

Definition at line 47 of file satellite-phy-rx-carrier-per-window.cc.

References ns3::SatPhyRxCarrier::m_randomAccessEnabled.

◆ ~SatPhyRxCarrierPerWindow()

ns3::SatPhyRxCarrierPerWindow::~SatPhyRxCarrierPerWindow ( )
virtual

Destructor.

Definition at line 91 of file satellite-phy-rx-carrier-per-window.cc.

Member Function Documentation

◆ AddEssaPacket()

void ns3::SatPhyRxCarrierPerWindow::AddEssaPacket ( SatPhyRxCarrierPerWindow::essaPacketRxParams_s  essaPacketParams)
private

◆ BeginEndScheduling()

void ns3::SatPhyRxCarrierPerWindow::BeginEndScheduling ( void  )
virtual

Function for initializing the window end scheduling.

WARNING: if firstWindow is too large, too many packets may be stored before the first CleanOldPackets is called

Reimplemented from ns3::SatPhyRxCarrierPerSlot.

Definition at line 70 of file satellite-phy-rx-carrier-per-window.cc.

References DoWindowEnd(), ns3::SatPhyRxCarrier::GetNodeInfo(), m_firstWindow, m_windowDuration, and m_windowEndSchedulingInitialized.

+ Here is the call graph for this function:

◆ CalculateNormalizedOfferedRandomAccessLoad()

double ns3::SatPhyRxCarrierPerWindow::CalculateNormalizedOfferedRandomAccessLoad ( )
private

Function for calculating the normalized offered random access load.

Returns
Normalized offered load

Definition at line 852 of file satellite-phy-rx-carrier-per-window.cc.

References ns3::SatConstVariables::BITS_PER_BYTE, m_payloadBytesInWindow, ns3::SatPhyRxCarrier::m_rxBandwidthHz, and m_windowDuration.

Referenced by MeasureRandomAccessLoad().

+ Here is the caller graph for this function:

◆ CalculatePacketInterferenceVectors()

void ns3::SatPhyRxCarrierPerWindow::CalculatePacketInterferenceVectors ( SatPhyRxCarrierPerWindow::essaPacketRxParams_s packet)
private

Calculate gamma and Interference vectors for a single packet.

Calculate the SNR

Update probes (only the first time we access this method for this packet)

composite sinr output trace

Calculate the gamma vector

Consider both the interference per fragment in the satellite, and the interference per fragment in the feeder. Since interference at the feeder does not consider intrabeam interference, the fragments will always be a subset of fragments in satellite (TODO: CHECK THIS). TODO: optimize. Find a way to do this without creating copy.

TODO: verify. Since Interference in feeder is a subset, fragments will never be smaller than those in satellite.

For each iteration: gamma[k] = ( SNR^-1 + (C/Interference[k])^-1 )^-1

Calculate composite C/I = (C_u/I_u^-1 + C_d/I_d^-1)^-1

Calculate gamma[k]

For each iteration: gamma[k] = ( SNR^-1 + (C/Interference[k])^-1 )^-1

Calculate composite C/I = (C_u/I_u^-1 + C_d/I_d^-1)^-1

Calculate gamma[k]

Calculate the gamma vector for the preamble

Calculate the mean SNIR

Definition at line 276 of file satellite-phy-rx-carrier-per-window.cc.

References ns3::SatPhyRxCarrier::CalculateCompositeSinr(), ns3::SatPhyRxCarrier::CalculateSinr(), ns3::SatPhyRxCarrierPerWindow::essaPacketRxParams_s::destAddress, ns3::SatPhyRxCarrier::DoCompositeSinrOutputTrace(), ns3::SatPhyRxCarrierPerWindow::essaPacketRxParams_s::gamma, ns3::SatPhyRxCarrier::GetLinkRegenerationMode(), ns3::SatPhyRxCarrier::GetOwnAddress(), ns3::SatPhyRxCarrier::GetWaveformConf(), ns3::SatPhyRxCarrierPerWindow::essaPacketRxParams_s::hasBeenUpdated, ns3::SatPhyRxCarrier::IsCompositeSinrOutputTraceEnabled(), ns3::SatUtils::LinearToDb(), ns3::SatPhyRxCarrier::m_additionalInterferenceCallback, ns3::SatPhyRxCarrier::m_linkBudgetTrace, ns3::SatPhyRxCarrier::m_linkSinrTrace, ns3::SatPhyRxCarrier::m_rxAciIfPowerW, ns3::SatPhyRxCarrier::m_rxExtNoisePowerW, ns3::SatPhyRxCarrier::m_rxNoisePowerW, ns3::SatPhyRxCarrierPerWindow::essaPacketRxParams_s::meanSinr, ns3::SatPhyRxCarrierPerWindow::essaPacketRxParams_s::preambleMeanSinr, ns3::SatPhyRxCarrierPerWindow::essaPacketRxParams_s::rxParams, ns3::SatUtils::ScalarProduct(), ns3::SatUplinkInfoTag::SetSinr(), ns3::SatPhyRxCarrierPerWindow::essaPacketRxParams_s::sourceAddress, and ns3::SatEnums::TRANSPARENT.

Referenced by DoSic(), and ReceiveSlot().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ CleanOldPackets()

void ns3::SatPhyRxCarrierPerWindow::CleanOldPackets ( const Time  windowStartTime)
private

Remove old packets from packet container.

Check first if packet is not entirely in window (not an old packet)

Check if packet is previous to window

Definition at line 683 of file satellite-phy-rx-carrier-per-window.cc.

References ns3::SatPhyRxCarrier::m_daRxTrace, m_essaPacketContainer, m_essaRxCollisionTrace, and m_firstWindow.

Referenced by ProcessWindow().

+ Here is the caller graph for this function:

◆ DoDispose()

void ns3::SatPhyRxCarrierPerWindow::DoDispose ( void  )
protectedvirtual

Dispose implementation.

Reimplemented from ns3::SatPhyRxCarrierPerSlot.

Definition at line 162 of file satellite-phy-rx-carrier-per-window.cc.

References ns3::SatPhyRxCarrierPerSlot::DoDispose().

+ Here is the call graph for this function:

◆ DoSic()

void ns3::SatPhyRxCarrierPerWindow::DoSic ( packetList_t::iterator  processedPacket,
std::pair< packetList_t::iterator, packetList_t::iterator >  windowBounds 
)
private

Perform SIC for a given decoded packet.

Update SIC on interfering packets

Stop iterating for packets arriving after the processed packet

Except previous packets

Except already processed packets, and the packet being currently processed

Get normalized start and end time

Eliminate residual interference and recalculate the packets vectors

Definition at line 534 of file satellite-phy-rx-carrier-per-window.cc.

References CalculatePacketInterferenceVectors(), ns3::SatPhyRxCarrier::GetInterferenceEliminationModel(), GetNormalizedPacketInterferenceTime(), ns3::SatPhyRxCarrier::m_linkRegenerationMode, m_sicEnabled, m_spreadingFactor, and ns3::SatEnums::TRANSPARENT.

Referenced by ProcessWindow().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DoWindowEnd()

void ns3::SatPhyRxCarrierPerWindow::DoWindowEnd ( )
private

Function called when a window ends.

Definition at line 433 of file satellite-phy-rx-carrier-per-window.cc.

References m_windowDelay, m_windowDuration, m_windowStep, and ProcessWindow().

Referenced by BeginEndScheduling().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ EliminatePreviousInterferences()

void ns3::SatPhyRxCarrierPerWindow::EliminatePreviousInterferences ( SatPhyRxCarrierPerWindow::essaPacketRxParams_s packet)
private

Calculate gamma and Interference vectors for a single packet.

Check first if packet interferes with received packet

Check if packet has been decoded

Get normalized times

Eliminate the interferences

Definition at line 226 of file satellite-phy-rx-carrier-per-window.cc.

References ns3::SatPhyRxCarrierPerWindow::essaPacketRxParams_s::arrivalTime, ns3::SatPhyRxCarrier::GetInterferenceEliminationModel(), GetNormalizedPacketInterferenceTime(), m_essaPacketContainer, ns3::SatPhyRxCarrier::m_linkRegenerationMode, m_sicEnabled, m_spreadingFactor, ns3::SatPhyRxCarrierPerWindow::essaPacketRxParams_s::rxParams, ns3::SatPhyRxCarrierPerWindow::essaPacketRxParams_s::sourceAddress, and ns3::SatEnums::TRANSPARENT.

Referenced by ReceiveSlot().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetCarrierType()

virtual CarrierType ns3::SatPhyRxCarrierPerWindow::GetCarrierType ( )
inlinevirtual

Method for querying the type of the carrier.

Reimplemented from ns3::SatPhyRxCarrierPerSlot.

Definition at line 103 of file satellite-phy-rx-carrier-per-window.h.

◆ GetEffectiveSnir()

double ns3::SatPhyRxCarrierPerWindow::GetEffectiveSnir ( const SatPhyRxCarrierPerWindow::essaPacketRxParams_s packet)
private

◆ GetHighestSnirPacket()

SatPhyRxCarrierPerWindow::packetList_t::iterator ns3::SatPhyRxCarrierPerWindow::GetHighestSnirPacket ( const std::pair< packetList_t::iterator, packetList_t::iterator >  windowBounds)
private

Get the packet with the highst SNIR on the list.

Returns
True if a packet is returned, False otherwise

Check if bigger SINR

Definition at line 774 of file satellite-phy-rx-carrier-per-window.cc.

Referenced by ProcessWindow().

+ Here is the caller graph for this function:

◆ GetNormalizedPacketInterferenceTime()

std::pair< double, double > ns3::SatPhyRxCarrierPerWindow::GetNormalizedPacketInterferenceTime ( const SatPhyRxCarrierPerWindow::essaPacketRxParams_s packet,
const SatPhyRxCarrierPerWindow::essaPacketRxParams_s interferingPacket 
)
private

Get the normalized start and end time between two interfering packets.

Get a first approach of the values (must redo calculations in the exact same order as they were done when calculating the interference vector).

Now get the actual values from the Interference vector (there may be

Definition at line 588 of file satellite-phy-rx-carrier-per-window.cc.

References ns3::SatPhyRxCarrierPerWindow::essaPacketRxParams_s::arrivalTime, ns3::SatPhyRxCarrierPerWindow::essaPacketRxParams_s::duration, and ns3::SatPhyRxCarrierPerWindow::essaPacketRxParams_s::rxParams.

Referenced by DoSic(), and EliminatePreviousInterferences().

+ Here is the caller graph for this function:

◆ GetTypeId()

TypeId ns3::SatPhyRxCarrierPerWindow::GetTypeId ( void  )
static

◆ GetWindowBounds()

std::pair< SatPhyRxCarrierPerWindow::packetList_t::iterator, SatPhyRxCarrierPerWindow::packetList_t::iterator > ns3::SatPhyRxCarrierPerWindow::GetWindowBounds ( Time  startTime,
Time  endTime 
)
private

Get a pair of iterators, pointing to the first element in the window, and to the first after the window.

By default, we consider packet is not inside window

Check first if packet is not after window

Check if whole packet is inside window

update number of bytes in the window

First packet will always be the first of the list, since previous packets were deleted in CleanOldPackets

Definition at line 735 of file satellite-phy-rx-carrier-per-window.cc.

References ns3::SatPhyRxCarrier::GetWaveformConf(), m_essaPacketContainer, and m_payloadBytesInWindow.

Referenced by ProcessWindow().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ MeasureRandomAccessLoad()

void ns3::SatPhyRxCarrierPerWindow::MeasureRandomAccessLoad ( )
private

Function for measuring the random access load.

calculate the load for this window

save the load for this window

calculate the average load over the measurement window

upload trace with normalized offered load

Definition at line 823 of file satellite-phy-rx-carrier-per-window.cc.

References ns3::SatPhyRxCarrierPerSlot::CalculateAverageNormalizedOfferedRandomAccessLoad(), CalculateNormalizedOfferedRandomAccessLoad(), ns3::SatPhyRxCarrier::GetBeamId(), ns3::SatPhyRxCarrier::GetCarrierId(), ns3::SatPhyRxCarrier::GetChannelType(), ns3::SatPhyRxCarrierPerSlot::GetRandomAccessAllocationChannelId(), ns3::SatPhyRxCarrier::GetSatId(), ns3::SatPhyRxCarrier::m_avgNormalizedOfferedLoadCallback, m_windowLoadTrace, ns3::SatEnums::RETURN_FEEDER_CH, and ns3::SatPhyRxCarrierPerSlot::SaveMeasuredRandomAccessLoad().

Referenced by ProcessWindow().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ PacketCanBeDetected()

bool ns3::SatPhyRxCarrierPerWindow::PacketCanBeDetected ( const SatPhyRxCarrierPerWindow::essaPacketRxParams_s packet)
private

Function for processing a window.

Definition at line 798 of file satellite-phy-rx-carrier-per-window.cc.

References m_detectionThreshold, and ns3::SatPhyRxCarrierPerWindow::essaPacketRxParams_s::preambleMeanSinr.

Referenced by ReceiveSlot().

+ Here is the caller graph for this function:

◆ ProcessWindow()

void ns3::SatPhyRxCarrierPerWindow::ProcessWindow ( Time  startTime,
Time  endTime 
)
private

Function for processing a window.

Clean old packets

Get packets in window

Select packet to decode (block 2)

MIESM (block 3)

Get effective SINR

Check against link results

SIC (block 4)

REMOVE

send treated packets upward

consider only packets that have been treated this window

If decoded, Packet could be deleted, since interference information is stored in each packet; but we'll keep it for logging purposes

measure random access load in window

Definition at line 450 of file satellite-phy-rx-carrier-per-window.cc.

References ns3::SatPhyRxCarrier::CheckAgainstLinkResults(), CleanOldPackets(), DoSic(), GetEffectiveSnir(), GetHighestSnirPacket(), GetWindowBounds(), ns3::SatPhyRxCarrierPerSlot::IsRandomAccessDynamicLoadControlEnabled(), ns3::SatUtils::LinearToDb(), m_essaRxErrorTrace, ns3::SatPhyRxCarrier::m_rxCallback, ns3::SatPhyRxCarrier::m_sinrTrace, m_windowSicIterations, and MeasureRandomAccessLoad().

Referenced by DoWindowEnd().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ReceiveSlot()

Member Data Documentation

◆ m_detectionThreshold

double ns3::SatPhyRxCarrierPerWindow::m_detectionThreshold
private

SNIR detection threshold for a packet (in magnitude)

Definition at line 279 of file satellite-phy-rx-carrier-per-window.h.

Referenced by GetTypeId(), and PacketCanBeDetected().

◆ m_essaPacketContainer

packetList_t ns3::SatPhyRxCarrierPerWindow::m_essaPacketContainer
private

◆ m_essaRxCollisionTrace

TracedCallback<uint32_t, const Address&, bool> ns3::SatPhyRxCarrierPerWindow::m_essaRxCollisionTrace
protected

EssaRxError trace source.

Fired when a packet is treated through Random Access ESSA.

Contains the following information:

  • number of upper layer packets in the received packet.
  • the MAC48 address of the sender; and
  • whether a it was treated or not (not detected).

Definition at line 142 of file satellite-phy-rx-carrier-per-window.h.

Referenced by CleanOldPackets(), GetTypeId(), and ReceiveSlot().

◆ m_essaRxErrorTrace

TracedCallback<uint32_t, const Address&, bool> ns3::SatPhyRxCarrierPerWindow::m_essaRxErrorTrace
protected

EssaRxError trace source.

Fired when a packet is decoded through Random Access ESSA.

Contains the following information:

  • number of upper layer packets in the received packet.
  • the MAC48 address of the sender; and
  • whether a physical error has occured.

Definition at line 130 of file satellite-phy-rx-carrier-per-window.h.

Referenced by GetTypeId(), and ProcessWindow().

◆ m_firstWindow

Time ns3::SatPhyRxCarrierPerWindow::m_firstWindow
private

The time of the first window.

Definition at line 257 of file satellite-phy-rx-carrier-per-window.h.

Referenced by BeginEndScheduling(), CleanOldPackets(), and GetTypeId().

◆ m_payloadBytesInWindow

uint32_t ns3::SatPhyRxCarrierPerWindow::m_payloadBytesInWindow
private

The number of payload bytes in the window.

Definition at line 289 of file satellite-phy-rx-carrier-per-window.h.

Referenced by CalculateNormalizedOfferedRandomAccessLoad(), and GetWindowBounds().

◆ m_sicEnabled

uint32_t ns3::SatPhyRxCarrierPerWindow::m_sicEnabled
private

Enable Sic.

Definition at line 294 of file satellite-phy-rx-carrier-per-window.h.

Referenced by DoSic(), EliminatePreviousInterferences(), and GetTypeId().

◆ m_spreadingFactor

uint32_t ns3::SatPhyRxCarrierPerWindow::m_spreadingFactor
private

The spreading factor of packets.

Definition at line 268 of file satellite-phy-rx-carrier-per-window.h.

Referenced by DoSic(), EliminatePreviousInterferences(), and GetTypeId().

◆ m_windowDelay

Time ns3::SatPhyRxCarrierPerWindow::m_windowDelay
private

The delay before processing a sliding window.

Definition at line 252 of file satellite-phy-rx-carrier-per-window.h.

Referenced by DoWindowEnd(), and GetTypeId().

◆ m_windowDuration

Time ns3::SatPhyRxCarrierPerWindow::m_windowDuration
private

The duration of the sliding window.

Definition at line 242 of file satellite-phy-rx-carrier-per-window.h.

Referenced by BeginEndScheduling(), CalculateNormalizedOfferedRandomAccessLoad(), DoWindowEnd(), and GetTypeId().

◆ m_windowEndSchedulingInitialized

bool ns3::SatPhyRxCarrierPerWindow::m_windowEndSchedulingInitialized
private

Has the window end scheduling been initialized.

Definition at line 273 of file satellite-phy-rx-carrier-per-window.h.

Referenced by BeginEndScheduling().

◆ m_windowLoadTrace

TracedCallback<double> ns3::SatPhyRxCarrierPerWindow::m_windowLoadTrace
protected

WindowLoad trace source.

Fired when a Window Load measurement is performed.

Contains te following information:

  • The load of the current window.

Definition at line 152 of file satellite-phy-rx-carrier-per-window.h.

Referenced by GetTypeId(), and MeasureRandomAccessLoad().

◆ m_windowSicIterations

uint32_t ns3::SatPhyRxCarrierPerWindow::m_windowSicIterations
private

The number of SIC iterations performed on each window.

Definition at line 262 of file satellite-phy-rx-carrier-per-window.h.

Referenced by GetTypeId(), and ProcessWindow().

◆ m_windowStep

Time ns3::SatPhyRxCarrierPerWindow::m_windowStep
private

The step of the sliding window.

Definition at line 247 of file satellite-phy-rx-carrier-per-window.h.

Referenced by DoWindowEnd(), and GetTypeId().


The documentation for this class was generated from the following files: