Loading...
Searching...
No Matches
satellite-perfect-interference-elimination.cc
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2018 CNES
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation;
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 *
18 * Author: Mathias Ettinger <mettinger@toulouse.viveris.fr>
19 */
20
22
24
25#include "ns3/log.h"
26#include "ns3/simulator.h"
27
28#include <cmath>
29#include <limits>
30#include <stdint.h>
31#include <utility>
32#include <vector>
33
34NS_LOG_COMPONENT_DEFINE("SatPerfectInterferenceElimination");
35
36namespace ns3
37{
38
39NS_OBJECT_ENSURE_REGISTERED(SatPerfectInterferenceElimination);
40
41TypeId
43{
44 static TypeId tid = TypeId("ns3::SatPerfectInterferenceElimination")
45 .SetParent<SatInterferenceElimination>()
46 .AddConstructor<SatPerfectInterferenceElimination>();
47
48 return tid;
49}
50
55
60
61void
63 Ptr<SatSignalParameters> packetInterferedWith,
64 Ptr<SatSignalParameters> processedPacket,
65 double EsNo,
66 bool isRegenerative)
67{
68 NS_LOG_FUNCTION(this);
69
70 return EliminateInterferences(packetInterferedWith,
71 processedPacket,
72 EsNo,
73 isRegenerative,
74 0.0,
75 1.0);
76}
77
78void
80 Ptr<SatSignalParameters> packetInterferedWith,
81 Ptr<SatSignalParameters> processedPacket,
82 double EsNo,
83 bool isRegenerative,
84 double startTime,
85 double endTime)
86{
87 NS_LOG_FUNCTION(this);
88
89 NS_LOG_INFO("Removing interference power of packet from Beam[Carrier] "
90 << processedPacket->m_beamId << "[" << processedPacket->m_carrierId << "] between "
91 << startTime << " and " << endTime);
92
93 double oldIfPower;
94 double normalizedTime = 0.0;
95 std::vector<std::pair<double, double>> ifPowerPerFragment;
96 if (isRegenerative)
97 {
98 oldIfPower = packetInterferedWith->GetInterferencePower();
99 ifPowerPerFragment = packetInterferedWith->GetInterferencePowerPerFragment();
100 }
101 else
102 {
103 oldIfPower = packetInterferedWith->GetInterferencePowerInSatellite();
104 ifPowerPerFragment = packetInterferedWith->GetInterferencePowerInSatellitePerFragment();
105 }
106
107 for (std::pair<double, double>& ifPower : ifPowerPerFragment)
108 {
109 normalizedTime += ifPower.first;
110 if (startTime >= normalizedTime)
111 {
112 continue;
113 }
114 else if (endTime < normalizedTime)
115 {
116 break;
117 }
118
119 ifPower.second -= (isRegenerative ? processedPacket->m_rxPower_W
120 : processedPacket->GetRxPowerInSatellite());
121 if (std::abs(ifPower.second) < std::numeric_limits<double>::epsilon())
122 {
123 ifPower.second = 0.0;
124 }
125
126 if (ifPower.second < 0)
127 {
128 NS_FATAL_ERROR("Negative interference " << ifPower.second);
129 }
130 }
131
132 if (isRegenerative)
133 {
134 packetInterferedWith->SetInterferencePower(ifPowerPerFragment);
135 }
136 else
137 {
138 packetInterferedWith->SetInterferencePowerInSatellite(ifPowerPerFragment);
139 }
140
141 NS_LOG_INFO("Interfered packet ifPower went from "
142 << oldIfPower << " to " << SatUtils::ScalarProduct(ifPowerPerFragment));
143}
144
145double
146SatPerfectInterferenceElimination::GetResidualPower(Ptr<SatSignalParameters> processedPacket,
147 double EsNo)
148{
149 return 0.0;
150}
151
152} // namespace ns3
SatInterferenceElimination()
Constructor for Satellite interference elimination base class.
double GetResidualPower(Ptr< SatSignalParameters > processedPacket, double EsNo)
Calculate the residual power of interference for a given packet.
void EliminateInterferences(Ptr< SatSignalParameters > packetInterferedWith, Ptr< SatSignalParameters > processedPacket, double EsNo, bool isRegenerative)
Calculate residual power of interference for the given packets.
static double ScalarProduct(const std::vector< std::pair< double, double > > &vector)
Scalar product.
SatArqSequenceNumber is handling the sequence numbers for the ARQ process.