30#include "ns3/channel-condition-model.h" 
   31#include "ns3/constant-position-mobility-model.h" 
   32#include "ns3/core-module.h" 
   33#include "ns3/lte-spectrum-value-helper.h" 
   34#include "ns3/mobility-model.h" 
   35#include "ns3/net-device.h" 
   36#include "ns3/node-container.h" 
   38#include "ns3/simple-net-device.h" 
   39#include "ns3/spectrum-signal-parameters.h" 
   40#include "ns3/three-gpp-channel-model.h" 
   41#include "ns3/three-gpp-propagation-loss-model.h" 
   42#include "ns3/three-gpp-spectrum-propagation-loss-model.h" 
   43#include "ns3/uniform-planar-array.h" 
   89    Angles completeAngle(bPos, aPos);
 
   90    double hAngleRadian = completeAngle.
GetAzimuth();
 
   98    double power = 1 / sqrt(totNoArrayElements);
 
  101    for (
int ind = 0; ind < totNoArrayElements; ind++)
 
  104        double phase = -2 * M_PI *
 
  105                       (sin(vAngleRadian) * cos(hAngleRadian) * loc.x +
 
  106                        sin(vAngleRadian) * sin(hAngleRadian) * loc.y + cos(vAngleRadian) * loc.z);
 
  107        antennaWeights.push_back(exp(std::complex<double>(0, phase)) * power);
 
  125    std::vector<int> activeRbs0(100);
 
  126    for (
int i = 0; i < 100; i++)
 
  131        LteSpectrumValueHelper::CreateTxPowerSpectralDensity(2100, 100, params.
txPow, activeRbs0);
 
  134    NS_LOG_DEBUG(
"Average tx power " << 10 * log10(
Sum(*txPsd) * 180e3) << 
" dB");
 
  138        LteSpectrumValueHelper::CreateNoisePowerSpectralDensity(2100, 100, params.
noiseFigure);
 
  139    NS_LOG_DEBUG(
"Average noise power " << 10 * log10(
Sum(*noisePsd) * 180e3) << 
" dB");
 
  143    NS_LOG_DEBUG(
"Pathloss " << -propagationGainDb << 
" dB");
 
  144    double propagationGainLinear = std::pow(10.0, (propagationGainDb) / 10.0);
 
  145    *(txParams->
psd) *= propagationGainLinear;
 
  156    NS_LOG_DEBUG(
"Average rx power " << 10 * log10(
Sum(*rxPsd) * 180e3) << 
" dB");
 
  163    f.open(
"snr-trace.txt", std::ios::out | std::ios::app);
 
  165      << propagationGainDb << std::endl;
 
  170main(
int argc, 
char* argv[])
 
  172    double frequency = 2125.0e6;  
 
  174    double noiseFigure = 9.0;     
 
  175    double distance = 10.0;       
 
  178    std::string scenario = 
"UMa"; 
 
  185    RngSeedManager::SetSeed(1);
 
  186    RngSeedManager::SetRun(1);
 
  191    if (scenario == 
"RMa")
 
  193        propagationLossModelFactory.
SetTypeId(ThreeGppRmaPropagationLossModel::GetTypeId());
 
  194        channelConditionModelFactory.
SetTypeId(ThreeGppRmaChannelConditionModel::GetTypeId());
 
  196    else if (scenario == 
"UMa")
 
  198        propagationLossModelFactory.
SetTypeId(ThreeGppUmaPropagationLossModel::GetTypeId());
 
  199        channelConditionModelFactory.
SetTypeId(ThreeGppUmaChannelConditionModel::GetTypeId());
 
  201    else if (scenario == 
"UMi-StreetCanyon")
 
  204            ThreeGppUmiStreetCanyonPropagationLossModel::GetTypeId());
 
  206            ThreeGppUmiStreetCanyonChannelConditionModel::GetTypeId());
 
  208    else if (scenario == 
"InH-OfficeOpen")
 
  211            ThreeGppIndoorOfficePropagationLossModel::GetTypeId());
 
  213            ThreeGppIndoorOpenOfficeChannelConditionModel::GetTypeId());
 
  215    else if (scenario == 
"InH-OfficeMixed")
 
  218            ThreeGppIndoorOfficePropagationLossModel::GetTypeId());
 
  220            ThreeGppIndoorMixedOfficeChannelConditionModel::GetTypeId());
 
  270        CreateObjectWithAttributes<UniformPlanarArray>(
"NumColumns",
 
  275        CreateObjectWithAttributes<UniformPlanarArray>(
"NumColumns",
 
  284    for (
int i = 0; i < floor(simTime / timeRes); i++)
 
  286        ComputeSnrParams params{txMob, rxMob, txPow, noiseFigure, txAntenna, rxAntenna};
 
  291    Simulator::Destroy();
 
double f(double x, void *params)
 
Class holding the azimuth and inclination angles of spherical coordinates.
 
double GetInclination() const
Getter for inclination angle.
 
double GetAzimuth() const
Getter for azimuth angle.
 
AttributeValue implementation for Boolean.
 
This class can be used to hold variables of floating point type such as 'double' or 'float'.
 
Keep track of the current position and velocity of an object.
 
void SetPosition(const Vector &position)
 
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.
 
uint32_t AddDevice(Ptr< NetDevice > device)
Associate a NetDevice to this node.
 
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
 
Instantiate subclasses of ns3::Object.
 
Ptr< Object > Create() const
Create an Object instance of the configured TypeId.
 
void SetTypeId(TypeId tid)
Set the TypeId of the Objects to be created by this factory.
 
void AggregateObject(Ptr< Object > other)
Aggregate two Objects together.
 
virtual Vector GetElementLocation(uint64_t index) const =0
Returns the location of the antenna element with the specified index, normalized with respect to the ...
 
virtual uint64_t GetNumberOfElements() const =0
Returns the number of antenna elements.
 
void SetBeamformingVector(const ComplexVector &beamformingVector)
Sets the beamforming vector to be used.
 
std::vector< std::complex< double > > ComplexVector
type definition for complex vectors
 
Ptr< SpectrumValue > CalcRxPowerSpectralDensity(Ptr< const SpectrumSignalParameters > txPsd, Ptr< const MobilityModel > a, Ptr< const MobilityModel > b, Ptr< const PhasedArrayModel > aPhasedArrayModel, Ptr< const PhasedArrayModel > bPhasedArrayModel) const
This method is to be called to calculate.
 
Hold objects of type Ptr<T>.
 
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.
 
Ptr< SpectrumValue > Copy() const
 
Hold variables of type string.
 
Base class for the 3GPP channel condition models.
 
Base class for the 3GPP propagation models.
 
void SetChannelConditionModel(Ptr< ChannelConditionModel > model)
Set the channel condition model used to determine the channel state (e.g., the LOS/NLOS condition)
 
void SetChannelModelAttribute(const std::string &name, const AttributeValue &value)
Sets the value of an attribute belonging to the associated MatrixBasedChannelModel instance.
 
double GetSeconds() const
Get an approximation of the time stored in this instance in the indicated unit.
 
AttributeValue implementation for Time.
 
Hold an unsigned integer type.
 
Vector3D Vector
Vector alias typedef for compatibility with mobility models.
 
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
 
void SetDefault(std::string name, const AttributeValue &value)
 
#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.
 
Time Now()
create an ns3::Time instance which contains the current simulation time.
 
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
 
Every class exported by the ns3 library is enclosed in the ns3 namespace.
 
double Sum(const SpectrumValue &x)
 
A structure that holds the parameters for the ComputeSnr function.
 
Ptr< PhasedArrayModel > txAntenna
the tx antenna array
 
Ptr< MobilityModel > rxMob
the rx mobility model
 
double noiseFigure
the noise figure in dB
 
double txPow
the tx power in dBm
 
Ptr< PhasedArrayModel > rxAntenna
the rx antenna array
 
Ptr< MobilityModel > txMob
the tx mobility model
 
Ptr< SpectrumValue > psd
The Power Spectral Density of the waveform, in linear units.
 
static Ptr< ThreeGppPropagationLossModel > m_propagationLossModel
the PropagationLossModel object
 
static void DoBeamforming(Ptr< NetDevice > thisDevice, Ptr< PhasedArrayModel > thisAntenna, Ptr< NetDevice > otherDevice)
Perform the beamforming using the DFT beamforming method.
 
static void ComputeSnr(const ComputeSnrParams ¶ms)
Compute the average SNR.
 
static Ptr< ThreeGppSpectrumPropagationLossModel > m_spectrumLossModel
the SpectrumPropagationLossModel object