26 #include <ns3/simulator.h>
28 NS_LOG_COMPONENT_DEFINE(
"SatPerfectInterferenceElimination");
33 NS_OBJECT_ENSURE_REGISTERED(SatPerfectInterferenceElimination);
38 static TypeId tid = TypeId(
"ns3::SatPerfectInterferenceElimination")
40 .AddConstructor<SatPerfectInterferenceElimination>();
53 NS_LOG_FUNCTION(
this);
58 NS_LOG_FUNCTION(
this);
63 Ptr<SatSignalParameters> packetInterferedWith,
64 Ptr<SatSignalParameters> processedPacket,
68 NS_LOG_FUNCTION(
this);
80 Ptr<SatSignalParameters> packetInterferedWith,
81 Ptr<SatSignalParameters> processedPacket,
87 NS_LOG_FUNCTION(
this);
89 NS_LOG_INFO(
"Removing interference power of packet from Beam[Carrier] "
90 << processedPacket->m_beamId <<
"[" << processedPacket->m_carrierId <<
"] between "
91 << startTime <<
" and " << endTime);
94 double normalizedTime = 0.0;
95 std::vector<std::pair<double, double>> ifPowerPerFragment;
98 oldIfPower = packetInterferedWith->GetInterferencePower();
99 ifPowerPerFragment = packetInterferedWith->GetInterferencePowerPerFragment();
103 oldIfPower = packetInterferedWith->GetInterferencePowerInSatellite();
104 ifPowerPerFragment = packetInterferedWith->GetInterferencePowerInSatellitePerFragment();
107 for (std::pair<double, double>& ifPower : ifPowerPerFragment)
109 normalizedTime += ifPower.first;
110 if (startTime >= normalizedTime)
114 else if (endTime < normalizedTime)
119 ifPower.second -= (isRegenerative ? processedPacket->m_rxPower_W
120 : processedPacket->GetRxPowerInSatellite());
121 if (std::abs(ifPower.second) < std::numeric_limits<double>::epsilon())
123 ifPower.second = 0.0;
126 if (ifPower.second < 0)
128 NS_FATAL_ERROR(
"Negative interference " << ifPower.second);
134 packetInterferedWith->SetInterferencePower(ifPowerPerFragment);
138 packetInterferedWith->SetInterferencePowerInSatellite(ifPowerPerFragment);
141 NS_LOG_INFO(
"Interfered packet ifPower went from "
Abstract class defining interface for interference elimination calculation objects.
static TypeId GetTypeId(void)
Derived from Object.
TypeId GetInstanceTypeId(void) const
Derived from Object.
double GetResidualPower(Ptr< SatSignalParameters > processedPacket, double EsNo)
Calculate the residual power of interference for a given packet.
SatPerfectInterferenceElimination()
Default constructor.
void EliminateInterferences(Ptr< SatSignalParameters > packetInterferedWith, Ptr< SatSignalParameters > processedPacket, double EsNo, bool isRegenerative)
Calculate residual power of interference for the given packets.
~SatPerfectInterferenceElimination()
Destructor.
static double ScalarProduct(const std::vector< std::pair< double, double >> &vector)
Scalar product.
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.