22 #include "ns3/nstime.h"
36 for (; it != pdp.
m_taps.end (); it++)
38 os << (*it).GetAmp () <<
'|';
56 is >> resolution >> c1;
65 std::complex<double> amp;
66 pdp.
m_taps = std::vector<Tap> (ntaps);
67 for (uint32_t i = 0; i < ntaps && !is.eof (); 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 ());
123 Time arrTime = Seconds (0);
124 for (uint32_t index = 0; index < amps.size (); index++)
126 m_taps[index] =
Tap (arrTime, amps[index]);
132 : m_resolution (resolution)
134 m_taps.resize (amps.size ());
135 Time arrTime = Seconds (0);
136 for (uint32_t index = 0; index < amps.size (); index++)
138 m_taps[index] =
Tap (arrTime, amps[index]);
151 if (
m_taps.size () <= index)
153 m_taps.resize (index + 1);
205 "UanPdp with resolution 0 and multiple taps");
207 return m_taps[0].GetAmp ();
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 ());
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 ();
237 "UanPdp with resolution 0 and multiple taps");
239 return std::abs (
m_taps[0].GetAmp ());
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 ());
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 ());
272 "UanPdp with resolution 0 and multiple taps");
274 if (begin <= Seconds (0.0) && end >= Seconds (0.0))
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 ());
305 "UanPdp with resolution 0 and multiple taps");
307 if (begin <= Seconds (0.0) && end >= Seconds (0.0))
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 ();
Holds PDP Tap information (amplitude and delay)
~UanPdp()
Dummy destructor, see DoDispose.
std::istream & operator>>(std::istream &is, Angles &a)
initialize a struct Angles from input
std::complex< double > SumTapsC(Time begin, Time end) const
Compute the coherent sum of tap amplitudes between a start and end time.
keep track of time values and allow control of global simulation resolution
std::vector< Tap >::const_iterator Iterator
Convenience iterator typedef.
uint32_t GetNTaps(void) const
Get the number of taps.
static UanPdp CreateImpulsePdp(void)
Get a unit impulse PDP at time 0.
virtual void Clear(void)
Clear all pointer references.
Base class for implemented underwater propagation models.
NS_OBJECT_ENSURE_REGISTERED(NullMessageSimulatorImpl)
std::vector< Tap > m_taps
The vector of Taps.
double SumTapsFromMaxNc(Time delay, Time duration) const
Compute the non-coherent sum of tap amplitudes starting after a delay from the maximum amplitude for ...
virtual void DoDispose(void)
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
UanPdp()
Create empty PDP object.
void SetTap(std::complex< double > arrival, uint32_t index)
Set the arrival value for a tap.
Time m_resolution
The time resolution.
#define NS_FATAL_ERROR(msg)
fatal error handling
double GetSeconds(void) const
Tap()
Default constructor.
The power delay profile returned by propagation models.
std::complex< double > GetAmp(void) const
Get the complex amplitude of arrival.
void SetResolution(Time resolution)
Set the time duration (resolution) between arrivals.
void SetNTaps(uint32_t nTaps)
Resize the tap vector.
std::ostream & operator<<(std::ostream &os, const Angles &a)
print a struct Angles to output
Time GetDelay(void) const
Get the delay time, usually from first arrival of signal.
Time GetResolution(void) const
Get the delay time resolution (time duration between arrivals).
Iterator GetEnd(void) const
Get the end of the tap list (one beyond the last entry).
virtual void DoDispose(void)
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
#define NS_ASSERT_MSG(condition, message)
Time m_delay
The time delay.
std::complex< double > SumTapsFromMaxC(Time delay, Time duration) const
Compute the coherent sum of tap amplitudes starting after a delay from the maximum amplitude for a to...
a base class which provides memory management and object aggregation
Iterator GetBegin(void) const
Get the beginning of the tap vector.
const Tap & GetTap(uint32_t i) const
Get the Tap at the specified delay index.
double SumTapsNc(Time begin, Time end) const
Compute the non-coherent sum of tap amplitudes between a start and end time.
static TypeId GetTypeId(void)
Register this type.
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
std::complex< double > m_amplitude
The amplitude.