21 #include "uan-prop-model.h"
22 #include "ns3/nstime.h"
36 for (; it != pdp.m_taps.end (); it++)
38 os << (*it).GetAmp () <<
'|';
56 is >> resolution >> c1;
62 pdp.m_resolution =
Seconds (resolution);
65 std::complex<double> amp;
66 pdp.m_taps = std::vector<Tap> (ntaps);
67 for (uint32_t i = 0; i < ntaps; i++)
75 pdp.m_taps[i] = Tap (
Seconds (resolution * i), amp);
115 m_resolution (resolution)
120 : m_resolution (resolution)
122 m_taps.resize (amps.size ());
124 for (uint32_t index = 0; index < amps.size (); index++)
126 m_taps[index] =
Tap (arrTime, amps[index]);
127 arrTime = arrTime + m_resolution;
132 : m_resolution (resolution)
134 m_taps.resize (amps.size ());
136 for (uint32_t index = 0; index < amps.size (); index++)
138 m_taps[index] =
Tap (arrTime, amps[index]);
139 arrTime = arrTime + m_resolution;
151 if (m_taps.size () <= index)
153 m_taps.resize (index + 1);
157 m_taps[index] =
Tap (delay, amp);
168 m_taps.resize (nTaps);
173 m_resolution = resolution;
178 return m_taps.begin ();
184 return m_taps.end ();
190 return m_taps.size ();
202 if (m_resolution <=
Seconds (0))
205 "UanPdp with resolution 0 and multiple taps");
207 return m_taps[0].GetAmp ();
210 uint32_t numTaps =
static_cast<uint32_t
> (duration.
GetSeconds () / m_resolution.
GetSeconds () + 0.5);
212 uint32_t maxTapIndex = 0;
214 for (uint32_t i = 0; i <
GetNTaps (); i++)
216 if (std::abs (m_taps[i].GetAmp ()) > maxAmp)
218 maxAmp = std::abs (m_taps[i].GetAmp ());
222 uint32_t start = maxTapIndex +
static_cast<uint32_t
> (delay.
GetSeconds () / m_resolution.
GetSeconds ());
223 uint32_t end = std::min (start + numTaps, GetNTaps ());
224 std::complex<double> sum = 0;
225 for (uint32_t i = start; i < end; i++)
227 sum += m_taps[i].GetAmp ();
234 if (m_resolution <=
Seconds (0))
237 "UanPdp with resolution 0 and multiple taps");
239 return std::abs (m_taps[0].GetAmp ());
242 uint32_t numTaps =
static_cast<uint32_t
> (duration.
GetSeconds () / m_resolution.
GetSeconds () + 0.5);
244 uint32_t maxTapIndex = 0;
246 for (uint32_t i = 0; i <
GetNTaps (); i++)
248 if (std::abs (m_taps[i].GetAmp ()) > maxAmp)
250 maxAmp = std::abs (m_taps[i].GetAmp ());
256 uint32_t start = maxTapIndex +
static_cast<uint32_t
> (delay.
GetSeconds () / m_resolution.
GetSeconds ());
257 uint32_t end = std::min (start + numTaps, GetNTaps ());
259 for (uint32_t i = start; i < end; i++)
262 sum += std::abs (m_taps[i].GetAmp ());
269 if (m_resolution <=
Seconds (0))
272 "UanPdp with resolution 0 and multiple taps");
276 return std::abs (m_taps[0].GetAmp ());
287 endIndex = std::min (endIndex,
GetNTaps ());
289 for (uint32_t i = stIndex; i < endIndex; i++)
291 sum += std::abs (m_taps[i].GetAmp ());
302 if (m_resolution <=
Seconds (0))
305 "UanPdp with resolution 0 and multiple taps");
309 return m_taps[0].GetAmp ();
313 return std::complex<double> (0.0);
320 endIndex = std::min (endIndex,
GetNTaps ());
322 std::complex<double> sum = 0;
323 for (uint32_t i = stIndex; i < endIndex; i++)
325 sum += m_taps[i].GetAmp ();
341 TypeId UanPropModel::GetTypeId (
void)
Holds PDP Tap information (amplitude and delay)
std::istream & operator>>(std::istream &is, Angles &a)
std::complex< double > SumTapsC(Time begin, Time end) const
std::vector< Tap >::const_iterator Iterator
Iterator is a standard template library constant interator.
uint32_t GetNTaps(void) const
static UanPdp CreateImpulsePdp(void)
double SumTapsFromMaxNc(Time delay, Time duration) const
virtual void DoDispose(void)
UanPdp()
Create empty PDP object.
void SetTap(std::complex< double > arrival, uint32_t index)
#define NS_FATAL_ERROR(msg)
fatal error handling
double GetSeconds(void) const
std::complex< double > GetAmp(void) const
void SetResolution(Time resolution)
void SetNTaps(uint32_t nTaps)
std::ostream & operator<<(std::ostream &os, const Angles &a)
Time GetDelay(void) const
Time GetResolution(void) const
Iterator GetEnd(void) const
virtual void DoDispose(void)
#define NS_ASSERT_MSG(condition, message)
Time Seconds(double seconds)
create ns3::Time instances in units of seconds.
std::complex< double > SumTapsFromMaxC(Time delay, Time duration) const
a base class which provides memory management and object aggregation
Iterator GetBegin(void) const
const Tap & GetTap(uint32_t i) const
double SumTapsNc(Time begin, Time end) const
a unique identifier for an interface.
TypeId SetParent(TypeId tid)