A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
phased-array-model.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 University of Padova, Dep. of Information Engineering, SIGNET lab.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 */
17
18#ifndef PHASED_ARRAY_MODEL_H
19#define PHASED_ARRAY_MODEL_H
20
21#include <ns3/angles.h>
22#include <ns3/antenna-model.h>
23#include <ns3/matrix-array.h>
24#include <ns3/object.h>
25
26#include <complex>
27
28namespace ns3
29{
30
37{
38 public:
43
47 ~PhasedArrayModel() override;
48
53 static TypeId GetTypeId();
54
57
64 double norm(const ComplexVector& complexVector) const
65 {
66 double norm = 0;
67 for (size_t i = 0; i < complexVector.GetSize(); i++)
68 {
69 norm += std::norm(complexVector[i]);
70 }
71 return std::sqrt(norm);
72 }
73
82 virtual std::pair<double, double> GetElementFieldPattern(Angles a) const = 0;
83
90 virtual Vector GetElementLocation(uint64_t index) const = 0;
91
96 virtual size_t GetNumberOfElements() const = 0;
97
102 void SetBeamformingVector(const ComplexVector& beamformingVector);
103
109
116
123
128 void SetAntennaElement(Ptr<AntennaModel> antennaElement);
129
135
140 uint32_t GetId() const;
141
142 protected:
146 static uint32_t
149};
150
158std::ostream& operator<<(std::ostream& os, const PhasedArrayModel::ComplexVector& cv);
159
160} /* namespace ns3 */
161
162#endif /* PHASED_ARRAY_MODEL_H */
Class holding the azimuth and inclination angles of spherical coordinates.
Definition: angles.h:118
MatrixArray class inherits ValArray class and provides additional interfaces to ValArray which enable...
Definition: matrix-array.h:83
A base class which provides memory management and object aggregation.
Definition: object.h:89
Class implementing the phased array model virtual base class.
static uint32_t m_idCounter
the ID counter that is used to determine the unique antenna array ID
ComplexVector GetSteeringVector(Angles a) const
Returns the steering vector that points toward the specified position.
virtual Vector GetElementLocation(uint64_t index) const =0
Returns the location of the antenna element with the specified index, normalized with respect to the ...
uint32_t GetId() const
Returns the ID of this antenna array instance.
PhasedArrayModel()
Constructor.
Ptr< AntennaModel > m_antennaElement
the model of the antenna element in use
Ptr< const AntennaModel > GetAntennaElement() const
Returns a pointer to the AntennaModel instance used to model the elements of the array.
void SetAntennaElement(Ptr< AntennaModel > antennaElement)
Sets the antenna model to be used.
ComplexMatrixArray ComplexVector
the underlying Valarray
ComplexVector GetBeamformingVector() const
Returns the beamforming vector that is currently being used.
virtual std::pair< double, double > GetElementFieldPattern(Angles a) const =0
Returns the horizontal and vertical components of the antenna element field pattern at the specified ...
bool m_isBfVectorValid
ensures the validity of the beamforming vector
double norm(const ComplexVector &complexVector) const
Computes the Frobenius norm of the complex vector.
~PhasedArrayModel() override
Destructor.
uint32_t m_id
the ID of this antenna array instance
virtual size_t GetNumberOfElements() const =0
Returns the number of antenna elements.
void SetBeamformingVector(const ComplexVector &beamformingVector)
Sets the beamforming vector to be used.
ComplexVector m_beamformingVector
the beamforming vector in use
static TypeId GetTypeId()
Get the type ID.
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:78
a unique identifier for an interface.
Definition: type-id.h:59
size_t GetSize() const
Definition: val-array.h:400
const double norm
Normalization to obtain randoms on [0,1).
Definition: rng-stream.cc:66
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition: angles.cc:129
MatrixArray< std::complex< double > > ComplexMatrixArray
Create an alias for MatrixArray using complex type.
Definition: matrix-array.h:265