WSF
WsfESA_AntennaPattern.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2003-2015 The Boeing Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef WSFESAANTENNAPATTERN_HPP
13#define WSFESAANTENNAPATTERN_HPP
14
15#include "wsf_mil_export.h"
16
17#include <vector>
18
19class UtInput;
20#include "UtRandom.hpp"
21#include "UtVec2.hpp"
22#include "UtVec3.hpp"
23#include "WsfAntennaPattern.hpp"
24#include "WsfObject.hpp"
25
32
33class WSF_MIL_EXPORT WsfESA_AntennaPattern : public WsfAntennaPattern
34{
35public:
41
48
49 struct Element
50 {
52 : mWeight(1.0)
53 {
54 mLocation.Set(0.0);
55 mNormal.Set(0.0);
56 }
57
58 UtVec3d mLocation;
59 double mWeight;
60 UtVec2d mNormal;
61 };
62
63 using ElementVec = std::vector<Element>;
64 using WeightVec = std::vector<double>;
65
66 class WSF_MIL_EXPORT ESA_Data : public WsfAntennaPattern::BaseData
67 {
68 public:
70 {
73
76
79
80 void Clear()
81 {
82 mSidelobeLevelX = 0.0;
83 mSidelobeLevelY = 0.0;
84 mN_BarX = 0;
85 mN_BarY = 0;
86 }
87 };
88
89 ESA_Data();
90 ESA_Data(const ESA_Data& aSrc) = default;
91 ~ESA_Data() override = default;
92
93 bool ProcessInput(WsfAntennaPattern& aPattern, UtInput& aInput) override;
94 bool Initialize(WsfAntennaPattern& aAntennaPattern) override;
95
96 double mdX;
97 double mdY;
98 double mLengthX;
99 double mLengthY;
100 int mNX;
101 int mNY;
102
104
106
108
110
116
119
121
124
125 bool mDebug;
126
127 private:
128 void ProcessTaylorWeightingInput(UtInput& aInput);
129 };
130
131 WsfESA_AntennaPattern(ESA_Data* aEsaData = nullptr);
132 ~WsfESA_AntennaPattern() override;
133
134 static WsfAntennaPattern* ObjectFactory(const std::string& aTypeName);
135
136 WsfAntennaPattern* Clone() const override;
137
138 bool Initialize(WsfSimulation* aSimulationPtr) override;
139
140 double GetGain(double aFrequency, double aTargetAz, double aTargetEl, double aEBS_Az, double aEBS_EL) override;
141
142 double GetAzimuthBeamwidth(double aFrequency, double aEBS_Azimuth, double aEBS_Elevation) const override;
143 double GetElevationBeamwidth(double aFrequency, double aEBS_Azimuth, double aEBS_Elevation) const override;
144 double GetPeakGain(double aFrequency) const override;
145
150 double GetElementSpacingX() const { return mESA_DataPtr->mdX; }
151 double GetElementSpacingY() const { return mESA_DataPtr->mdY; }
152 int GetNumberElementsX() const { return mESA_DataPtr->mNX; }
153 int GetNumberElementsY() const { return mESA_DataPtr->mNY; }
154 bool IsDistributionTaylor() const { return mESA_DataPtr->mDistribution == cWT_Taylor; }
155 bool IsDistributionUniform() const { return mESA_DataPtr->mDistribution == cWT_Uniform; }
156 double GetTaylorDataSidelobeLevelX() const { return mESA_DataPtr->mTaylorData.mSidelobeLevelX; }
157 double GetTaylorDataSidelobeLevelY() const { return mESA_DataPtr->mTaylorData.mSidelobeLevelY; }
158 double GetTaylorDataN_BarX() const { return mESA_DataPtr->mTaylorData.mN_BarX; }
159 double GetTaylorDataN_BarY() const { return mESA_DataPtr->mTaylorData.mN_BarY; }
160 int GetPhaseNumBits() const { return mESA_DataPtr->mPhaseNumBits; }
161 int GetAmpNumBits() const { return mESA_DataPtr->mAmpNumBits; }
163
164protected:
166
169
170 ESA_Data* GetData() const { return mESA_DataPtr; }
171
172 virtual double ComputeDirectivityGain(double aFrequency, double aEBS_Az, double aEBS_El) const;
173
174 virtual double ComputeElementGain(double aFrequency, double aAzAngle, double aElAngle) const;
175
176 virtual double ComputeElementFactor(double aFrequency, double aEBS_Az, double aEBS_El, double aAzAngle, double aElAngle) const;
177
178 void SetESA_DataPtr(ESA_Data* aESA_DataPtr) { mESA_DataPtr = aESA_DataPtr; }
179
180 virtual void ResizeArray();
181 virtual void AdjustApertureElements(ut::Random& aRandom);
182 virtual void AdjustElementLocations();
183
184 void ComputeFailedModulesWeights(ut::Random& aRandom);
185
188 double mLengthX;
189 double mLengthY;
190 int mNX;
191 int mNY;
193
196
199
202
204
205private:
206 double ComputeArrayFactor(double aFrequency, double aEBS_Az, double aEBS_El, double aAzAngle, double aElAngle) const;
207
208 void ComputeDistributionWeights();
209 virtual double ComputeApertureEfficiency();
210 double ComputeQuantizationError(int aNumBits, double aRangePerBit, double aValue) const;
211
212 double ComputeGain(double aFrequency, double aAzAngle, double aElAngle, double aEBS_Az, double aEBS_El) const;
213
215 ESA_Data* mESA_DataPtr;
216};
217
218#endif
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
Definition WsfAntennaPattern.hpp:47
WsfAntennaPattern * Clone() const override
Definition WsfAntennaPattern.cpp:57
WsfAntennaPattern()
Definition WsfAntennaPattern.cpp:25
bool ProcessInput(UtInput &aInput) override
Definition WsfAntennaPattern.cpp:214
virtual WSF_DEPRECATED double GetElevationBeamwidth(double aFrequency) const final
Definition WsfAntennaPattern.cpp:139
virtual bool Initialize(WsfSimulation *aSimulationPtr)
Definition WsfAntennaPattern.cpp:203
virtual double GetGain(double aFrequency, double aTargetAz, double aTargetEl, double aEBS_Az, double aEBS_El)
Definition WsfAntennaPattern.cpp:72
virtual double GetPeakGain(double aFrequency) const
Definition WsfAntennaPattern.cpp:172
virtual WSF_DEPRECATED double GetAzimuthBeamwidth(double aFrequency) const final
Definition WsfAntennaPattern.cpp:113
Definition WsfESA_AntennaPattern.hpp:67
WeightingFun mDistribution
The weighting function to be applied.
Definition WsfESA_AntennaPattern.hpp:107
WsfStringId mElementPatternTypeId
Definition WsfESA_AntennaPattern.hpp:122
bool mBackBaffled
Definition WsfESA_AntennaPattern.hpp:103
double mLengthY
Input Y-axis length of the array in meters.
Definition WsfESA_AntennaPattern.hpp:99
int mPhaseNumBits
Quantization of the steering phase.
Definition WsfESA_AntennaPattern.hpp:117
LatticeType mLatticeType
The lattice type (i.e. shape) for element location calculations.
Definition WsfESA_AntennaPattern.hpp:120
~ESA_Data() override=default
double mdX
X-axis element spacing in meters.
Definition WsfESA_AntennaPattern.hpp:96
int mNY
Input Y-axis number of elements.
Definition WsfESA_AntennaPattern.hpp:101
double mFailedRatio
Back baffled array flag, minimum gain is used if Azimuth angles outside +-90 degs.
Definition WsfESA_AntennaPattern.hpp:105
ESA_Data()
Definition WsfESA_AntennaPattern.cpp:654
bool mDebug
Definition WsfESA_AntennaPattern.hpp:125
double mLengthX
Input X-axis length of the array in meters.
Definition WsfESA_AntennaPattern.hpp:98
double mScanExponentX
Azimuth exponent for azimuth distribution function - NOT USED.
Definition WsfESA_AntennaPattern.hpp:114
int mNX
Input X-axis number of elements.
Definition WsfESA_AntennaPattern.hpp:100
TaylorWeightingData mTaylorData
Taylor sidelobe level control data.
Definition WsfESA_AntennaPattern.hpp:109
ESA_Data(const ESA_Data &aSrc)=default
double mdY
Y-axis element spacing in meters.
Definition WsfESA_AntennaPattern.hpp:97
int mAmpNumBits
Quantization of the amplitude weighting.
Definition WsfESA_AntennaPattern.hpp:118
double mScanExponentY
Elevation exponent for elevation distribution function - NOT USED.
Definition WsfESA_AntennaPattern.hpp:115
Definition WsfESA_AntennaPattern.hpp:34
int GetNumberElementsX() const
Definition WsfESA_AntennaPattern.hpp:152
double mLengthY
Current Y-axis length of the array in meters.
Definition WsfESA_AntennaPattern.hpp:189
double mApertureEffY
Definition WsfESA_AntennaPattern.hpp:201
double GetTaylorDataSidelobeLevelY() const
Definition WsfESA_AntennaPattern.hpp:157
double mLengthX
Current X-axis length of the array in meters.
Definition WsfESA_AntennaPattern.hpp:188
WeightingFun
Definition WsfESA_AntennaPattern.hpp:43
@ cWT_Taylor
Definition WsfESA_AntennaPattern.hpp:45
@ cWT_Uniform
Definition WsfESA_AntennaPattern.hpp:46
@ cWT_None
Definition WsfESA_AntennaPattern.hpp:44
double GetTaylorDataN_BarX() const
Definition WsfESA_AntennaPattern.hpp:158
std::vector< double > WeightVec
Definition WsfESA_AntennaPattern.hpp:64
bool IsDistributionTaylor() const
Definition WsfESA_AntennaPattern.hpp:154
static WsfAntennaPattern * ObjectFactory(const std::string &aTypeName)
Definition WsfESA_AntennaPattern.cpp:76
std::vector< Element > ElementVec
Definition WsfESA_AntennaPattern.hpp:63
double GetTaylorDataSidelobeLevelX() const
Definition WsfESA_AntennaPattern.hpp:156
ESA_Data * GetData() const
Definition WsfESA_AntennaPattern.hpp:170
double mApertureEffX
Definition WsfESA_AntennaPattern.hpp:200
int mNX
Current X-axis number of elements.
Definition WsfESA_AntennaPattern.hpp:190
int mNY
Current Y-axis number of elements.
Definition WsfESA_AntennaPattern.hpp:191
int GetAmpNumBits() const
Definition WsfESA_AntennaPattern.hpp:161
bool IsDistributionUniform() const
Definition WsfESA_AntennaPattern.hpp:155
LatticeType
Definition WsfESA_AntennaPattern.hpp:37
@ cLT_TRIANGLULAR
Definition WsfESA_AntennaPattern.hpp:39
@ cLT_RECTANGLULAR
Definition WsfESA_AntennaPattern.hpp:38
double GetElementSpacingY() const
Definition WsfESA_AntennaPattern.hpp:151
WsfESA_AntennaPattern & operator=(const WsfESA_AntennaPattern &aRhs)=delete
Assignment is not supported.
void SetESA_DataPtr(ESA_Data *aESA_DataPtr)
Definition WsfESA_AntennaPattern.hpp:178
ElementVec mElements
Current vector of elements used for pattern calculations.
Definition WsfESA_AntennaPattern.hpp:187
WeightVec mWeightVecX
Definition WsfESA_AntennaPattern.hpp:194
double GetElementSpacingX() const
Definition WsfESA_AntennaPattern.hpp:150
double mApertureEff
Definition WsfESA_AntennaPattern.hpp:198
WeightVec mWeightVecY
Calculated aperture efficiency.
Definition WsfESA_AntennaPattern.hpp:195
int GetPhaseNumBits() const
Definition WsfESA_AntennaPattern.hpp:160
double GetTaylorDataN_BarY() const
Definition WsfESA_AntennaPattern.hpp:159
WsfAntennaPattern * mElementPatternPtr
Definition WsfESA_AntennaPattern.hpp:203
int GetNumberElementsY() const
Definition WsfESA_AntennaPattern.hpp:153
WsfESA_AntennaPattern(ESA_Data *aEsaData=nullptr)
Definition WsfESA_AntennaPattern.cpp:30
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Definition WsfESA_AntennaPattern.hpp:70
double mSidelobeLevelY
Elevation sidelobe level used for weighting functions (ratio).
Definition WsfESA_AntennaPattern.hpp:72
int mN_BarX
Elevation n-bar parameter for Taylor Sidelobe control (n-bar = num sidelobes controlled + 1).
Definition WsfESA_AntennaPattern.hpp:75
void Clear()
Definition WsfESA_AntennaPattern.hpp:80
int mN_BarY
Definition WsfESA_AntennaPattern.hpp:78
double mSidelobeLevelX
Azimuth sidelobe level used for weighting functions (ratio).
Definition WsfESA_AntennaPattern.hpp:71
UtVec2d mNormal
Element normal direction (theta, phi) from the array's reference normal.
Definition WsfESA_AntennaPattern.hpp:60
double mWeight
The weighting array for distribution tapering and failed elements.
Definition WsfESA_AntennaPattern.hpp:59
UtVec3d mLocation
Current Vector of indexed 3D element locations used for pattern calculations.
Definition WsfESA_AntennaPattern.hpp:58
Element()
Definition WsfESA_AntennaPattern.hpp:51
Copyrights Multiple, All Rights Reserved