16#include "ns3/angles.h"
17#include "ns3/antenna-model.h"
18#include "ns3/double.h"
20#include "ns3/mobility-model.h"
21#include "ns3/net-device.h"
23#include "ns3/object.h"
24#include "ns3/packet-burst.h"
25#include "ns3/packet.h"
26#include "ns3/propagation-delay-model.h"
27#include "ns3/propagation-loss-model.h"
28#include "ns3/simulator.h"
50 for (
auto it = rhs.begin();
it != rhs.end(); ++
it)
52 for (
auto jt =
it->second.m_spectrumConverterMap.begin();
53 jt !=
it->second.m_spectrumConverterMap.end();
56 lhs <<
"(" <<
it->first <<
"," <<
jt->first <<
") ";
90 static TypeId tid =
TypeId(
"ns3::MultiModelSpectrumChannel")
92 .SetGroupName(
"Spectrum")
132 "phy->GetRxSpectrumModel () returned 0. Please check that the RxSpectrumModel is "
133 "already set for the phy before calling MultiModelSpectrumChannel::AddRx (phy)");
161 NS_LOG_LOGIC(
"Creating converter between SpectrumModelUid "
172TxSpectrumModelInfoMap_t::const_iterator
200 NS_LOG_LOGIC(
"Creating converter between SpectrumModelUid "
228 auto txMobility = txParams->txPhy->GetMobility();
241 std::map<SpectrumModelUid_t, Ptr<SpectrumValue>>
convertedPsds{};
257 NS_LOG_LOGIC(
"converting txPowerSpectrum SpectrumModelUids "
289 "SpectrumModel change was not notified to MultiModelSpectrumChannel "
290 "(i.e., AddRx should be called again after model is changed)");
304 "Skipping the pathloss calculation among different antennas of the "
305 "same node, not supported yet by any pathloss model in ns-3.");
385 NS_LOG_LOGIC(
"SpectrumModelUid changed since TX started");
400 NS_LOG_LOGIC(
"converting txPowerSpectrum SpectrumModelUids "
416 auto txMobility = params->txPhy->GetMobility();
473 "PhasedArrayModel instances should be installed at both TX and RX "
474 "SpectrumPhy in order to use PhasedArraySpectrumPropagationLoss.");
485 receiver->StartRx(params);
515 return (*phyIt).GetDevice();
Class holding the azimuth and inclination angles of spherical coordinates.
This SpectrumChannel implementation can handle the presence of SpectrumPhy instances which can use di...
void RemoveRx(Ptr< SpectrumPhy > phy) override
Remove a SpectrumPhy from a channel.
virtual void StartRx(Ptr< SpectrumValue > txPsd, double txAntennaGain, Ptr< SpectrumSignalParameters > params, Ptr< SpectrumPhy > receiver, const std::map< SpectrumModelUid_t, Ptr< SpectrumValue > > &availableConvertedPsds)
Used internally to reschedule transmission after the propagation delay.
Ptr< NetDevice > GetDevice(std::size_t i) const override
std::size_t GetNDevices() const override
void AddRx(Ptr< SpectrumPhy > phy) override
Add a SpectrumPhy to a channel, so it can receive packets.
TxSpectrumModelInfoMap_t m_txSpectrumModelInfoMap
Data structure holding, for each TX SpectrumModel, all the converters to any RX SpectrumModel,...
std::size_t m_numDevices
Number of devices connected to the channel.
void DoDispose() override
Destructor implementation.
void StartTx(Ptr< SpectrumSignalParameters > params) override
Used by attached PHY instances to transmit signals on the channel.
TxSpectrumModelInfoMap_t::const_iterator FindAndEventuallyAddTxSpectrumModel(Ptr< const SpectrumModel > txSpectrumModel)
This method checks if m_rxSpectrumModelInfoMap contains an entry for the given TX SpectrumModel.
static TypeId GetTypeId()
Get the type ID.
MultiModelSpectrumChannel()
RxSpectrumModelInfoMap_t m_rxSpectrumModelInfoMap
Data structure holding, for each RX spectrum model, all the corresponding SpectrumPhy instances.
Smart pointer class similar to boost::intrusive_ptr.
The Rx spectrum model information.
RxSpectrumModelInfo(Ptr< const SpectrumModel > rxSpectrumModel)
Constructor.
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
static void ScheduleWithContext(uint32_t context, const Time &delay, FUNC f, Ts &&... args)
Schedule an event with the given context.
Defines the interface for spectrum-aware channel implementations.
TracedCallback< Ptr< SpectrumSignalParameters > > m_txSigParamsTrace
Traced callback for SpectrumSignalParameters in StartTx requests.
void DoDispose() override
Destructor implementation.
Ptr< SpectrumTransmitFilter > m_filter
Transmit filter to be used with this channel.
Ptr< PropagationDelayModel > m_propagationDelay
Propagation delay model to be used with this channel.
Ptr< SpectrumPropagationLossModel > m_spectrumPropagationLoss
Frequency-dependent propagation loss model to be used with this channel.
Ptr< PhasedArraySpectrumPropagationLossModel > m_phasedArraySpectrumPropagationLoss
Frequency-dependent propagation loss model to be used with this channel.
TracedCallback< Ptr< const SpectrumPhy >, Ptr< const SpectrumPhy >, double > m_pathLossTrace
The PathLoss trace source.
TracedCallback< Ptr< const MobilityModel >, Ptr< const MobilityModel >, double, double, double, double > m_gainTrace
The Gain trace source.
Ptr< PropagationLossModel > m_propagationLoss
Single-frequency propagation loss model to be used with this channel.
double m_maxLossDb
Maximum loss [dB].
Class which implements a converter between SpectrumValue which are defined over different SpectrumMod...
Simulation virtual time values and global simulation resolution.
The Tx spectrum model information.
TxSpectrumModelInfo(Ptr< const SpectrumModel > txSpectrumModel)
Constructor.
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
std::map< SpectrumModelUid_t, TxSpectrumModelInfo > TxSpectrumModelInfoMap_t
Container: SpectrumModelUid_t, TxSpectrumModelInfo.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::ostream & operator<<(std::ostream &os, const Angles &a)