26 #include <ns3/angles.h>
27 #include <ns3/antenna-model.h>
28 #include <ns3/double.h>
30 #include <ns3/mobility-model.h>
31 #include <ns3/net-device.h>
33 #include <ns3/object.h>
34 #include <ns3/packet-burst.h>
35 #include <ns3/packet.h>
36 #include <ns3/propagation-delay-model.h>
37 #include <ns3/propagation-loss-model.h>
38 #include <ns3/simulator.h>
67 static TypeId tid =
TypeId(
"ns3::SingleModelSpectrumChannel")
69 .SetGroupName(
"Spectrum")
122 for (
auto rxPhyIterator =
m_phyList.begin(); rxPhyIterator !=
m_phyList.end(); ++rxPhyIterator)
127 if (rxNetDevice && txNetDevice)
130 if (rxNetDevice->GetNode()->GetId() == txNetDevice->GetNode()->GetId())
132 NS_LOG_DEBUG(
"Skipping the pathloss calculation among different antennas of the "
133 "same node, not supported yet by any pathloss model in ns-3.");
143 if ((*rxPhyIterator) != txParams->
txPhy)
151 if (senderMobility && receiverMobility)
153 double txAntennaGain = 0;
154 double rxAntennaGain = 0;
155 double propagationGainDb = 0;
156 double pathLossDb = 0;
161 NS_LOG_LOGIC(
"txAntennaGain = " << txAntennaGain <<
" dB");
162 pathLossDb -= txAntennaGain;
165 DynamicCast<AntennaModel>((*rxPhyIterator)->GetAntenna());
169 rxAntennaGain = rxAntenna->
GetGainDb(rxAngles);
170 NS_LOG_LOGIC(
"rxAntennaGain = " << rxAntennaGain <<
" dB");
171 pathLossDb -= rxAntennaGain;
177 NS_LOG_LOGIC(
"propagationGainDb = " << propagationGainDb <<
" dB");
178 pathLossDb -= propagationGainDb;
180 NS_LOG_LOGIC(
"total pathLoss = " << pathLossDb <<
" dB");
195 double pathGainLinear = std::pow(10.0, (-pathLossDb) / 10.0);
196 *(rxParams->
psd) *= pathGainLinear;
207 uint32_t dstNode = rxNetDevice->GetNode()->GetId();
237 params->txPhy->GetMobility(),
Class holding the azimuth and inclination angles of spherical coordinates.
virtual double GetGainDb(Angles a)=0
this method is expected to be re-implemented by each antenna model
Vector GetPosition() const
Network layer to device interface.
double CalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
Returns the Rx Power taking into account all the PropagationLossModel(s) chained to the current one.
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].
virtual void StartRx(Ptr< SpectrumSignalParameters > params)=0
Notify the SpectrumPhy instance of an incoming signal.
virtual Ptr< MobilityModel > GetMobility() const =0
Get the associated MobilityModel instance.
virtual Ptr< NetDevice > GetDevice() const =0
Get the associated NetDevice instance.
Ptr< const SpectrumModel > GetSpectrumModel() const
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.
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
params
Fit Fluctuating Two Ray model to the 3GPP TR 38.901 using the Anderson-Darling goodness-of-fit ##.
Ptr< AntennaModel > txAntenna
The AntennaModel instance that was used to transmit this signal.
Time duration
The duration of the packet transmission.
Ptr< SpectrumPhy > txPhy
The SpectrumPhy instance that is making the transmission.
virtual Ptr< SpectrumSignalParameters > Copy() const
make a "virtual" copy of this class, where "virtual" refers to the fact that if the actual object is ...
Ptr< SpectrumValue > psd
The Power Spectral Density of the waveform, in linear units.