15#include "ns3/angles.h" 
   16#include "ns3/antenna-model.h" 
   17#include "ns3/double.h" 
   19#include "ns3/mobility-model.h" 
   20#include "ns3/net-device.h" 
   22#include "ns3/object.h" 
   23#include "ns3/packet-burst.h" 
   24#include "ns3/packet.h" 
   25#include "ns3/propagation-delay-model.h" 
   26#include "ns3/propagation-loss-model.h" 
   27#include "ns3/simulator.h" 
   56    static TypeId tid = 
TypeId(
"ns3::SingleModelSpectrumChannel")
 
   58                            .SetGroupName(
"Spectrum")
 
 
   92    NS_LOG_FUNCTION(
this << txParams->psd << txParams->duration << txParams->txPhy);
 
  116    for (
auto rxPhyIterator = 
m_phyList.begin(); rxPhyIterator != 
m_phyList.end(); ++rxPhyIterator)
 
  121        if (rxNetDevice && txNetDevice)
 
  124            if (rxNetDevice->GetNode()->GetId() == txNetDevice->GetNode()->GetId())
 
  126                NS_LOG_DEBUG(
"Skipping the pathloss calculation among different antennas of the " 
  127                             "same node, not supported yet by any pathloss model in ns-3.");
 
  137        if ((*rxPhyIterator) != txParams->txPhy)
 
  145            if (senderMobility && receiverMobility)
 
  147                double txAntennaGain = 0;
 
  148                double rxAntennaGain = 0;
 
  149                double propagationGainDb = 0;
 
  150                double pathLossDb = 0;
 
  151                if (rxParams->txAntenna)
 
  153                    Angles txAngles(receiverMobility->GetPosition(), senderMobility->GetPosition());
 
  154                    txAntennaGain = rxParams->txAntenna->GetGainDb(txAngles);
 
  155                    NS_LOG_LOGIC(
"txAntennaGain = " << txAntennaGain << 
" dB");
 
  156                    pathLossDb -= txAntennaGain;
 
  162                    Angles rxAngles(senderMobility->GetPosition(), receiverMobility->GetPosition());
 
  163                    rxAntennaGain = rxAntenna->GetGainDb(rxAngles);
 
  164                    NS_LOG_LOGIC(
"rxAntennaGain = " << rxAntennaGain << 
" dB");
 
  165                    pathLossDb -= rxAntennaGain;
 
  171                    NS_LOG_LOGIC(
"propagationGainDb = " << propagationGainDb << 
" dB");
 
  172                    pathLossDb -= propagationGainDb;
 
  174                NS_LOG_LOGIC(
"total pathLoss = " << pathLossDb << 
" dB");
 
  189                double pathGainLinear = std::pow(10.0, (-pathLossDb) / 10.0);
 
  190                *(rxParams->psd) *= pathGainLinear;
 
  201                uint32_t dstNode = rxNetDevice->GetNode()->GetId();
 
 
  231                                                                  params->txPhy->GetMobility(),
 
  232                                                                  receiver->GetMobility());
 
  234    receiver->StartRx(params);
 
 
Class holding the azimuth and inclination angles of spherical coordinates.
Network layer to device interface.
Smart pointer class similar to boost::intrusive_ptr.
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.
SpectrumChannel implementation which handles a single spectrum model.
Ptr< const SpectrumModel > m_spectrumModel
SpectrumModel that this channel instance is supporting.
PhyList m_phyList
List of SpectrumPhy instances attached to the channel.
void StartTx(Ptr< SpectrumSignalParameters > params) override
Used by attached PHY instances to transmit signals on the channel.
void DoDispose() override
Destructor implementation.
void RemoveRx(Ptr< SpectrumPhy > phy) override
Remove a SpectrumPhy from a channel.
SingleModelSpectrumChannel()
void AddRx(Ptr< SpectrumPhy > phy) override
Add a SpectrumPhy to a channel, so it can receive packets.
Ptr< NetDevice > GetDevice(std::size_t i) const override
std::size_t GetNDevices() const override
void StartRx(Ptr< SpectrumSignalParameters > params, Ptr< SpectrumPhy > receiver)
Used internally to reschedule transmission after the propagation delay.
static TypeId GetTypeId()
Get the type ID.
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.
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].
Simulation virtual time values and global simulation resolution.
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_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_NOARGS()
Output the name of the function.
#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.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< T1 > DynamicCast(const Ptr< T2 > &p)
Cast a Ptr.