102 Ptr<SatSignalParameters> packetInterferedWith,
103 Ptr<SatSignalParameters> processedPacket,
109 NS_LOG_FUNCTION(
this);
111 NS_LOG_INFO(
"Removing interference power of packet from Beam[Carrier] "
112 << processedPacket->m_beamId <<
"[" << processedPacket->m_carrierId <<
"] between "
113 << startTime <<
" and " << endTime);
115 double ifPowerToRemove;
119 double normalizedTime = 0.0;
120 std::vector<std::pair<double, double>> ifPowerPerFragment;
124 oldIfPower = packetInterferedWith->GetInterferencePower();
125 ifPowerToRemove = processedPacket->m_rxPower_W;
126 ifPowerPerFragment = packetInterferedWith->GetInterferencePowerPerFragment();
130 oldIfPower = packetInterferedWith->GetInterferencePowerInSatellite();
131 ifPowerToRemove = processedPacket->GetRxPowerInSatellite();
132 ifPowerPerFragment = packetInterferedWith->GetInterferencePowerInSatellitePerFragment();
135 for (std::pair<double, double>& ifPower : ifPowerPerFragment)
137 normalizedTime += ifPower.first;
138 if (startTime >= normalizedTime)
142 else if (endTime < normalizedTime)
147 ifPower.second -= ifPowerToRemove;
148 ifPower.second += residualPower;
149 if (std::abs(ifPower.second) < 1.0e-30)
151 ifPower.second = 0.0;
154 if (ifPower.second < 0)
156 NS_FATAL_ERROR(
"Negative interference");
162 packetInterferedWith->SetInterferencePower(ifPowerPerFragment);
166 packetInterferedWith->SetInterferencePowerInSatellite(ifPowerPerFragment);
169 NS_LOG_INFO(
"Interfered packet ifPower went from "
177 NS_LOG_FUNCTION(
this);
179 NS_LOG_INFO(
"SatResidualInterferenceElimination::GetResidualPower");
181 double ifPowerToRemove = processedPacket->GetRxPowerInSatellite();
183 double sigma_lambda_2 = 1.0 / (8.0 * L * EsNo);
184 double sigma_phy_2 = 1.0 / (2.0 * L * EsNo);
185 return (2.0 + sigma_lambda_2 - (2.0 *
m_samplingError * std::exp(-sigma_phy_2 / 2.0))) *