20#include <ns3/adhoc-aloha-noack-ideal-phy-helper.h>
21#include <ns3/applications-module.h>
22#include <ns3/core-module.h>
23#include <ns3/friis-spectrum-propagation-loss.h>
25#include <ns3/mobility-module.h>
26#include <ns3/network-module.h>
27#include <ns3/propagation-delay-model.h>
28#include <ns3/single-model-spectrum-channel.h>
29#include <ns3/spectrum-analyzer.h>
30#include <ns3/spectrum-helper.h>
31#include <ns3/spectrum-model-300kHz-300GHz-log.h>
32#include <ns3/spectrum-model-ism2400MHz-res1MHz.h>
33#include <ns3/waveform-generator.h>
34#include <ns3/wifi-spectrum-value-helper.h>
58 std::cout << context <<
" PHY RX END OK p:" << p << std::endl;
113 for (std::map<
uint32_t, std::map<uint32_t, double>>::const_iterator txit =
118 for (std::map<uint32_t, double>::const_iterator rxit = txit->second.begin();
119 rxit != txit->second.end();
122 std::cout << txit->first <<
" --> " << rxit->first <<
" : " << rxit->second <<
" dB"
129main(
int argc,
char** argv)
133 double txPowerW = 0.1;
134 uint64_t phyRate = 500000;
136 double simDuration = 0.5;
137 std::string channelType(
"ns3::SingleModelSpectrumChannel");
138 cmd.AddValue(
"verbose",
"Print trace information if true",
g_verbose);
139 cmd.AddValue(
"lossDb",
"link loss in dB", lossDb);
140 cmd.AddValue(
"txPowerW",
"txPower in Watts", txPowerW);
141 cmd.AddValue(
"phyRate",
"PHY rate in bps", phyRate);
142 cmd.AddValue(
"pktSize",
"packet size in bytes",
pktSize);
143 cmd.AddValue(
"simDuration",
"duration of the simulation in seconds", simDuration);
144 cmd.AddValue(
"channelType",
"which SpectrumChannel implementation to be used", channelType);
145 cmd.Parse(argc, argv);
151 mobility.SetMobilityModel(
"ns3::ConstantPositionMobilityModel");
173 const double k = 1.381e-23;
174 const double T = 290;
175 double noisePsdValue =
k * T;
194 onoff.SetConstantRate(
DataRate(2 * phyRate));
208 Simulator::Stop(
Seconds(simDuration + 0.000001));
213 globalPathlossDatabase.
Print();
215 double throughputBps = (
g_rxBytes * 8.0) / simDuration;
216 std::cout <<
"throughput: " << throughputBps << std::endl;
217 std::cout <<
"throughput: " << std::setw(20) << std::fixed << throughputBps <<
" bps"
219 std::cout <<
"phy rate : " << std::setw(20) << std::fixed << phyRate * 1.0 <<
" bps"
221 double rxPowerW = txPowerW / (std::pow(10.0, lossDb / 10.0));
222 double capacity = 20e6 * log2(1.0 + (rxPowerW / 20.0e6) / noisePsdValue);
223 std::cout <<
"shannon capacity: " << std::setw(20) << std::fixed << capacity <<
" bps"
227 Simulator::Destroy();
static bool g_verbose
True if verbose output.
void PhyRxEndOkTrace(std::string context, Ptr< const Packet > p)
Trace for PHY Rx successful end.
static uint64_t g_rxBytes
Rx bytes counter.
Store the last pathloss value for each TX-RX pair.
void Print()
print the stored pathloss values to standard output
void UpdatePathloss(std::string context, Ptr< const SpectrumPhy > txPhy, Ptr< const SpectrumPhy > rxPhy, double lossDb)
update the pathloss value
std::map< uint32_t, std::map< uint32_t, double > > m_pathlossMap
Path loss map.
a polymophic address class
create the AlohaNoackNetDevice
void SetPhyAttribute(std::string name, const AttributeValue &v)
void SetTxPowerSpectralDensity(Ptr< SpectrumValue > txPsd)
void SetNoisePowerSpectralDensity(Ptr< SpectrumValue > noisePsd)
void SetChannel(Ptr< SpectrumChannel > channel)
set the SpectrumChannel that will be used by SpectrumPhy instances created by this helper
NetDeviceContainer Install(NodeContainer c) const
holds a vector of ns3::Application pointers.
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter.
void Stop(Time stop)
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter.
Parse command-line arguments.
AttributeValue implementation for DataRate.
Helper class used to assign positions and mobility models to nodes.
Keep track of the current position and velocity of an object.
holds a vector of ns3::NetDevice pointers
keep track of a set of node pointers.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
uint32_t GetSize() const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
an address for a packet socket
void SetProtocol(uint16_t protocol)
Set the protocol.
void SetPhysicalAddress(const Address address)
Set the destination address.
void SetSingleDevice(uint32_t device)
Set the address to match only a specified NetDevice.
Give ns3::PacketSocket powers to ns3::Node.
void Install(Ptr< Node > node) const
Aggregate an instance of a ns3::PacketSocketFactory onto the provided node.
Ptr< SpectrumChannel > Create() const
void AddPropagationLoss(std::string name, Ts &&... args)
void SetPropagationDelay(std::string name, Ts &&... args)
void SetChannel(std::string type, Ts &&... args)
virtual Ptr< MobilityModel > GetMobility() const =0
Get the associated MobilityModel instance.
Hold an unsigned integer type.
Implements Wifi SpectrumValue for the 2.4 GHz ISM band only, with a 5 MHz spectrum resolution.
virtual Ptr< SpectrumValue > CreateConstant(double psd)
Creates a SpectrumValue instance with a constant value for all frequencies.
virtual Ptr< SpectrumValue > CreateTxPowerSpectralDensity(double txPower, uint8_t channel)
Creates a SpectrumValue instance that represents the TX Power Spectral Density of a wifi device corre...
void Connect(std::string path, const CallbackBase &cb)
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
void(* DataRate)(DataRate oldValue, DataRate newValue)
TracedValue callback signature for DataRate.
Time Seconds(double value)
Construct a Time in the indicated unit.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
uint32_t pktSize
packet size used for the simulation (in bytes)