WSF
WsfSAR_Sensor.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// Updated by Infoscitex, a DCS Company
13// ****************************************************************************
14
15#ifndef WSFSAR_SENSOR_HPP
16#define WSFSAR_SENSOR_HPP
17
18#include "wsf_mil_export.h"
19
20#include <memory>
21#include <vector>
22
23#include "UtCloneablePtr.hpp"
24#include "UtMatrix.hpp"
25#include "WsfEM_Antenna.hpp"
26#include "WsfEM_Rcvr.hpp"
27#include "WsfEM_Xmtr.hpp"
28#include "WsfPlatform.hpp"
29#include "WsfSensor.hpp"
30#include "WsfSensorBeam.hpp"
31#include "WsfSensorMode.hpp"
34
48class WSF_MIL_EXPORT WsfSAR_Sensor : public WsfSensor
49{
50public:
51 WsfSAR_Sensor(WsfScenario& aScenario);
52 ~WsfSAR_Sensor() override;
53
54 bool AttemptToDetect(double aSimTime, WsfPlatform* aTargetPtr, Settings& aSettings, WsfSensorResult& aResult) override;
55 WsfSensor* Clone() const override;
56 bool Initialize(double aSimTime) override;
57 void PlatformAdded(double aSimTime, WsfPlatform* aPlatformPtr) override;
58 void PlatformDeleted(WsfPlatform* aPlatformPtr) override;
59 bool ProcessInput(UtInput& aInput) override;
60 void TurnOff(double aSimTime) override;
61 void TurnOn(double aSimTime) override;
62 void Update(double aSimTime) override;
63
64 size_t GetEM_RcvrCount() const override;
65 WsfEM_Rcvr& GetEM_Rcvr(size_t aIndex) const override;
66 size_t GetEM_XmtrCount() const override;
67 WsfEM_Xmtr& GetEM_Xmtr(size_t aIndex) const override;
68
69 const char* GetScriptClassName() const override { return "WsfSAR_Sensor"; }
70
71 static std::unique_ptr<UtScriptClass> CreateScriptClass(const std::string& aClassName, UtScriptTypes* aScriptTypesPtr);
72
83
84 bool CanImageNow(double aSimTime,
85 double& aDwellTime,
86 double& aResolution,
87 double& aCNR,
88 double& aDopplerMargin,
89 int& aFailureReasons);
90
91 double GetDwellTime() const;
92 void SetDwellTime(double aDwellTime);
93
94 double GetResolution() const;
95 void SetResolution(double aResolution);
96
99 double GetAchievedCNR() const { return mAchievedCNR; }
100
104 double GetAchievedResolution() const { return mAchievedAzimuthResolution; }
105
108 unsigned int GetTurnOffEventNumber() const { return mTurnOffEventNumber; }
109
110 double GetBackscatterCoefficient() const { return mBackscatterCoefficient; }
111
112 // Some compilers require inner classes to be declared friends if they want to access outer class members
113 class SAR_Chance;
114 friend class SAR_Chance;
115 class SAR_Mode;
116 friend class SAR_Mode;
117
119 struct Geometry
120 {
123
125 double mAltitude;
126
129
132
136
140
143
147 };
148
151 {
152 public:
153 SAR_Chance(WsfPlatform* aTargetPtr);
154 ~SAR_Chance();
155
158 double mAreaSum;
159 double mLocationWCS[3];
165 };
166
168 class SAR_Mode : public WsfSensorMode, public WsfSensorBeam
169 {
170 public:
176
177 SAR_Mode();
178 SAR_Mode(const SAR_Mode& aSrc);
179 ~SAR_Mode() override = default;
180 SAR_Mode& operator=(const SAR_Mode&) = delete;
181
182 // WsfSensorMode methods.
183 size_t GetBeamCount() const override { return 1; }
184 WsfSensorBeam* GetBeamEntry(size_t /* aBeamIndex */) override { return this; }
185
186 // WsfSensorBeam methods.
187 WsfEM_Rcvr* GetEM_Rcvr() override { return mRcvrPtr.get(); }
188 WsfEM_Xmtr* GetEM_Xmtr() override { return mXmtrPtr.get(); }
189
190 bool AttemptToDetect(double aSimTime, WsfPlatform* aTargetPtr, Settings& aSettings, WsfSensorResult& aResult) override;
191
192 void Deselect(double aSimTime) override;
193 void Select(double aSimTime) override;
194
195 WsfMode* Clone() const override;
196 bool Initialize(double aSimTime) override;
197 bool ProcessInput(UtInput& aInput) override;
198
199 void Calibrate();
200
202 {
203 public:
205 SAR_ErrorModel(const SAR_ErrorModel& aSrc);
206 ~SAR_ErrorModel() override = default;
207
208 bool ProcessInput(UtInput& aInput) override;
209 bool Initialize(WsfSensorMode* aSensorModePtr) override;
210 SAR_ErrorModel* Clone() const override { return new SAR_ErrorModel(); }
211
212 std::unique_ptr<wsf::SphericalMeasurementErrors> ComputeMeasurementErrors(WsfSensorResult& aResult) const override;
213 void ApplyMeasurementErrors(const wsf::SphericalMeasurementErrors& aErrors, WsfSensorResult& aResult) override;
214 void ApplySAR_MeasurementErrors(const wsf::SphericalMeasurementErrors& aErrors, SAR_Chance& aChance);
215 const UtMatrixd* GetErrorCovarianceMatrix() const { return &mCovarianceMatrix; }
216
217 private:
218 void ApplyRangeDopplerErrors(WsfEM_Antenna* aAntennaPtr, WsfPlatform* aTargetPtr, SAR_Chance* aChancePtr);
219
220 void ComputeRangeDopplerErrors(double aSimTime,
221 const WsfPlatform* aTargetPtr,
222 double& aRangeError,
223 double& aDopplerError) const;
224
226 bool mComputeRangeDopplerErrors{false};
228 double mSAR_Errors[15];
229
231 bool mSAR_ErrorsSet[15];
232
233 mutable UtMatrixd mErrorsSqrd;
234 mutable UtMatrixd mCovarianceMatrix;
235 mutable ut::CloneablePtr<WsfPlatform> mTempPlatformPtr{nullptr};
236 WsfEM_Antenna* mAntennaPtr{nullptr};
237 };
238
239 void ComputeGeometry(double aSimTime, Geometry& aGeometry);
240
241 double ComputeCNR(const Geometry& aGeometry, double aPRF, double aDwellTime, double aResolution);
242
243 double ComputeDwellTime(const Geometry& aGeometry, double aResolution);
244
245 // double ComputePixelCount(double aRange,
246 // double aOpticalCrossSection);
247
248 double ComputePRF(const Geometry& aGeometry);
249
250 double ComputeAzimuthResolution(const Geometry& aGeometry, double aDwellTime);
251
252 double ComputeGroundRangeResolution(const Geometry& aGeometry);
253
254 bool ComputeImageCenter(double aLocationWCS_1[3], double aLocationWCS_2[3], bool aFirstPass = false);
255
256 void ComputeFOV(const Geometry& aGeometry);
257
258 double ComputeSlantRange(double aAltitude, double aDepressionAngle, double& aGrazingAngle);
259
260 double ComputeSquintAngle(WsfPlatform* aTargetPtr, double& aSlantRange);
261
262 void ComputeUpdateInterval(double aSimTime);
263
264 void PredictPerformance(const Geometry& aGeometry,
265 double& aPRF,
266 double& aDwellTime,
267 double& aAzimuthResolution,
268 double& aCNR,
269 double& aMinimumPRF);
270
271 bool WithinUnambiguousRange(WsfSensorResult& aResult);
272
273 void SetIntegrationGain(double aIntegrationGain) override { mIntegrationGain = aIntegrationGain; }
274
277
280
283
285 std::unique_ptr<WsfEM_Antenna> mAntennaPtr;
286
288 std::unique_ptr<WsfEM_Xmtr> mXmtrPtr;
289
291 std::unique_ptr<WsfEM_Rcvr> mRcvrPtr;
292
294 double mKa;
295
297 double mKd;
298
301
304
307
310
313
316
319
322
323
326
329
332
336
339
342
349
352
356
359 };
360
361private:
362 WsfSAR_Sensor(const WsfSAR_Sensor& aSrc);
363 WsfSAR_Sensor& operator=(const WsfSAR_Sensor&) = delete;
364
365 void BuildAndSendImage(double aSimTime, SAR_Mode& aMode);
366
367 void ClearSensingChances();
368
369 void AddSensingChance(double aSimTime, const SAR_Mode& aMode, const Geometry& aGeometry, WsfPlatform* aTargetPtr);
370
371 void ProcessModeChange(double aSimTime, size_t aOldModeIndex, size_t aNewModeIndex);
372
373 void SpotModeBegin(double aSimTime, SAR_Mode& aMode, Geometry& aGeometry);
374
375 void SpotModeEnd(double aSimTime, SAR_Mode& aMode);
376
377 void SpotModeUpdate(double aSimTime, Settings& aSettings);
378
379 void StripModeBegin(double aSimTime, SAR_Mode& aMode, Geometry& aGeometry);
380
381 void StripModeEnd(double aSimTime, SAR_Mode& aMode);
382
383 void StripModeUpdate(double aSimTime, Settings& aSettings);
384
385 void NotifyObservers(double aSimTime, SAR_Mode* aModePtr, SAR_Chance* aChancePtr, WsfSensorResult& aResult, bool aDetected);
386
388 std::vector<SAR_Mode*> mSAR_ModeList;
389
391 using Chances = std::vector<std::unique_ptr<SAR_Chance>>;
392 Chances mChances;
393
396 unsigned int mStreamNumber;
397
401 unsigned int mFrameNumber;
402
404 double mBackscatterCoefficient;
405
407 double mIntensityMin;
408
410 double mIntensityMax;
411
413 double mIntensityRange;
414
416 double mLastUpdateTime;
417
419 double mModeStartTime;
420
422 size_t mLastModeIndex;
423
425 unsigned int mTurnOffEventNumber;
426
429 bool mRescaleSubstandardImage;
430
433 bool mAutomaticTurnOff;
434
436 bool mSAR_ConstraintPlotting;
437
439 bool mShowStatus;
440
442 bool mCallSensorTrackObservers;
443
445 Geometry mGeometry;
446
448 double mAchievedCNR;
449
451 double mAchievedAzimuthResolution;
452
454 double mAchievedGroundRangeResolution;
455
457 WsfPlatform mTempPlatform;
458};
459
460// Script Accessor Class
462{
463public:
464 WsfScriptSAR_SensorClass(const std::string& aClassName, UtScriptTypes* aScriptTypesPtr);
465
470
471 UT_DECLARE_SCRIPT_METHOD(GetResolution_1);
472 UT_DECLARE_SCRIPT_METHOD(GetResolution_2);
473 UT_DECLARE_SCRIPT_METHOD(SetResolution_1);
474 UT_DECLARE_SCRIPT_METHOD(SetResolution_2);
475};
476
477#endif
Definition WsfEM_Antenna.hpp:49
Definition WsfEM_Rcvr.hpp:68
Definition WsfEM_Xmtr.hpp:55
Definition WsfMode.hpp:32
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
A detection opportunity for a specific platform.
Definition WsfSAR_Sensor.hpp:151
double mSignalSum
Definition WsfSAR_Sensor.hpp:157
size_t mTargetIndex
Definition WsfSAR_Sensor.hpp:162
SAR_Chance(WsfPlatform *aTargetPtr)
Definition WsfSAR_Sensor.cpp:1339
double mComputedDopplerError
Definition WsfSAR_Sensor.hpp:161
WsfTrack * mTrackPtr
Definition WsfSAR_Sensor.hpp:156
double mComputedRangeError
Definition WsfSAR_Sensor.hpp:160
bool mNowDetecting
Definition WsfSAR_Sensor.hpp:164
unsigned int mNumberOfDetections
Definition WsfSAR_Sensor.hpp:163
double mAreaSum
Definition WsfSAR_Sensor.hpp:158
double mLocationWCS[3]
Definition WsfSAR_Sensor.hpp:159
Definition WsfSAR_Sensor.hpp:202
bool ProcessInput(UtInput &aInput) override
Definition WsfSAR_Sensor.cpp:3032
SAR_ErrorModel()
Definition WsfSAR_Sensor.cpp:3010
const UtMatrixd * GetErrorCovarianceMatrix() const
Definition WsfSAR_Sensor.hpp:215
SAR_ErrorModel * Clone() const override
Create a clone of "this" object.
Definition WsfSAR_Sensor.hpp:210
bool Initialize(WsfSensorMode *aSensorModePtr) override
Definition WsfSAR_Sensor.cpp:3175
The 'mode' of the sensor.
Definition WsfSAR_Sensor.hpp:169
std::unique_ptr< WsfEM_Antenna > mAntennaPtr
The Antenna for the Mode.
Definition WsfSAR_Sensor.hpp:285
OperatingMode mOperatingMode
The operating mode (spot, strip, etc.).
Definition WsfSAR_Sensor.hpp:282
double mResolution
Desired azimuth resolution.
Definition WsfSAR_Sensor.hpp:300
~SAR_Mode() override=default
std::unique_ptr< WsfEM_Xmtr > mXmtrPtr
The transmitter for a Mode.
Definition WsfSAR_Sensor.hpp:288
double mDwellTime
Desired or computed dwell/integration time.
Definition WsfSAR_Sensor.hpp:303
WsfSAR_Sensor * mSAR_SensorPtr
The pointer to the derived sensor class.
Definition WsfSAR_Sensor.hpp:276
double mKd
Doppler fold-over margin factor (also called the over-collect ratio).
Definition WsfSAR_Sensor.hpp:297
bool mComputePRF
Compute the pulse repetition frequency.
Definition WsfSAR_Sensor.hpp:341
bool mComputeDwellTime
For spot requests, compute dwell time necessary to achieve the required image resolution.
Definition WsfSAR_Sensor.hpp:338
OperatingMode
Definition WsfSAR_Sensor.hpp:172
@ cOM_SPOT
Definition WsfSAR_Sensor.hpp:173
@ cOM_STRIP
Definition WsfSAR_Sensor.hpp:174
std::unique_ptr< WsfEM_Rcvr > mRcvrPtr
The receiver for a Mode.
Definition WsfSAR_Sensor.hpp:291
SAR_Mode()
Definition WsfSAR_Sensor.cpp:1363
double mMinimumCNR
Minimum allowable clutter-to-noise limit.
Definition WsfSAR_Sensor.hpp:309
double mIntegrationGain
Integration gain for non-Swerling detector.
Definition WsfSAR_Sensor.hpp:328
WsfEM_Rcvr * GetEM_Rcvr() override
Definition WsfSAR_Sensor.hpp:187
double mAdjustmentFactor
A term to represent a general adjustment (multiplier) to the radar range equation.
Definition WsfSAR_Sensor.hpp:331
double mCurrentAzimuthResolution
The current azimuth resolution.
Definition WsfSAR_Sensor.hpp:315
SAR_ErrorModel * mSAR_ErrorModelPtr
The pointer to the derived error model class.
Definition WsfSAR_Sensor.hpp:279
double mKa
Doppler filter broadening factor.
Definition WsfSAR_Sensor.hpp:294
bool mAutomaticTurnOff
Definition WsfSAR_Sensor.hpp:348
double mCurrentGroundRangeResolution
The current ground range resolution.
Definition WsfSAR_Sensor.hpp:318
double mMaximumDwellTime
Maximum dwell/integration.
Definition WsfSAR_Sensor.hpp:306
double mImageWidth
Definition WsfSAR_Sensor.hpp:355
double mMaxDetectableSpeed
The speed above which an object cannot be seen.
Definition WsfSAR_Sensor.hpp:312
double mAngularResolution
The angular resolution of a pixel (radians).
Definition WsfSAR_Sensor.hpp:325
double mOneM2DetectRange
If non-zero, this represents the 1 m^2 detection range.
Definition WsfSAR_Sensor.hpp:334
SAR_Mode & operator=(const SAR_Mode &)=delete
double mImageCenterWCS[3]
The approximate image center.
Definition WsfSAR_Sensor.hpp:358
WsfEM_Xmtr * GetEM_Xmtr() override
Definition WsfSAR_Sensor.hpp:188
size_t GetBeamCount() const override
Definition WsfSAR_Sensor.hpp:183
double mImageHeight
Image height and width in meters; used for spot SAR.
Definition WsfSAR_Sensor.hpp:354
bool mInhibitSubstandardCollection
Inhibit collection if the computed dwell time is greater than the maximum allowable.
Definition WsfSAR_Sensor.hpp:351
void SetIntegrationGain(double aIntegrationGain) override
Definition WsfSAR_Sensor.hpp:273
WsfSensorBeam * GetBeamEntry(size_t) override
Definition WsfSAR_Sensor.hpp:184
bool Initialize(double aSimTime) override
Definition WsfSAR_Sensor.cpp:317
double GetAchievedResolution() const
Definition WsfSAR_Sensor.hpp:104
WsfSAR_Sensor(WsfScenario &aScenario)
Definition WsfSAR_Sensor.cpp:114
const char * GetScriptClassName() const override
Definition WsfSAR_Sensor.hpp:69
WsfSensor * Clone() const override
Definition WsfSAR_Sensor.cpp:211
unsigned int GetTurnOffEventNumber() const
Definition WsfSAR_Sensor.hpp:108
bool AttemptToDetect(double aSimTime, WsfPlatform *aTargetPtr, Settings &aSettings, WsfSensorResult &aResult) override
Definition WsfSAR_Sensor.cpp:184
FailureReasons
Definition WsfSAR_Sensor.hpp:74
@ cFR_DOPPLER_FOLDOVER
The Doppler frequency returns would be ambiguous.
Definition WsfSAR_Sensor.hpp:79
@ cFR_INSUFFICIENT_CLUTTER_TO_NOISE
Clutter-to-Noise ratio is too low.
Definition WsfSAR_Sensor.hpp:80
@ cFR_INSUFFICIENT_RESOLUTION
The desired resolution cannot be achieved.
Definition WsfSAR_Sensor.hpp:81
@ cFR_BEYOND_HORIZON
The area is beyond the radar horizon.
Definition WsfSAR_Sensor.hpp:76
@ cFR_DWELL_TIME_LIMIT_EXCEEDED
The dwell time limit was exceeded.
Definition WsfSAR_Sensor.hpp:77
@ cFR_AMBIGUOUS_RANGE
The range would be ambiguous.
Definition WsfSAR_Sensor.hpp:78
@ cFR_FIELD_OF_VIEW_EXCEEDED
The area is outside the field of view.
Definition WsfSAR_Sensor.hpp:75
double GetBackscatterCoefficient() const
Definition WsfSAR_Sensor.hpp:110
double GetAchievedCNR() const
Definition WsfSAR_Sensor.hpp:99
bool ProcessInput(UtInput &aInput) override
Definition WsfSAR_Sensor.cpp:366
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
UT_DECLARE_SCRIPT_METHOD(GetDwellTime_2)
UT_DECLARE_SCRIPT_METHOD(SetResolution_2)
WsfScriptSAR_SensorClass(const std::string &aClassName, UtScriptTypes *aScriptTypesPtr)
Definition WsfSAR_Sensor.cpp:2845
UT_DECLARE_SCRIPT_METHOD(SetDwellTime_2)
UT_DECLARE_SCRIPT_METHOD(GetResolution_1)
UT_DECLARE_SCRIPT_METHOD(GetDwellTime_1)
UT_DECLARE_SCRIPT_METHOD(GetResolution_2)
UT_DECLARE_SCRIPT_METHOD(SetDwellTime_1)
UT_DECLARE_SCRIPT_METHOD(SetResolution_1)
WsfScriptSensorClass(const std::string &aClassName, UtScriptTypes *aScriptTypesPtr)
Definition WsfScriptSensorClass.cpp:133
WsfSensorBeam()
Definition WsfSensorBeam.cpp:20
friend class WsfSensorMode
Definition WsfSensorBeam.hpp:60
virtual void ApplyMeasurementErrors(WsfSensorResult &aResult)
Definition WsfSensorMode.cpp:590
virtual WSF_DEPRECATED void ComputeMeasurementErrors(WsfSensorResult &aResult, double &aAzError, double &aElError, double &aRangeError, double &aRangeRateError) final
Definition WsfSensorMode.cpp:608
Definition WsfSensorResult.hpp:27
Definition WsfSensor.hpp:133
bool ProcessInput(UtInput &aInput) override
Definition WsfSensor.cpp:380
void Update(double aSimTime) override
Definition WsfSensor.cpp:497
virtual WsfEM_Rcvr & GetEM_Rcvr(size_t aIndex) const
Definition WsfSensor.cpp:660
WsfSensor(const WsfScenario &aScenario)
Definition WsfSensor.cpp:52
virtual size_t GetEM_RcvrCount() const
Definition WsfSensor.cpp:646
void PlatformDeleted(WsfPlatform *aPlatformPtr) override
Definition WsfSensor.cpp:355
WsfSensor * Clone() const override=0
virtual WsfEM_Xmtr & GetEM_Xmtr(size_t aIndex) const
Definition WsfSensor.cpp:714
bool Initialize(double aSimTime) override
Definition WsfSensor.cpp:255
virtual size_t GetEM_XmtrCount() const
Definition WsfSensor.cpp:700
WsfSensor & operator=(const WsfSensor &aSrc)=delete
void TurnOff(double aSimTime) override
Definition WsfSensor.cpp:523
virtual bool AttemptToDetect(double aSimTime, WsfPlatform *aTargetPtr, Settings &aSettings, WsfSensorResult &aResult)
Definition WsfSensor.cpp:224
void PlatformAdded(double aSimTime, WsfPlatform *aPlatformPtr) override
Definition WsfSensor.cpp:334
void TurnOn(double aSimTime) override
Definition WsfSensor.cpp:563
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
Definition WsfStandardSensorErrorModel.hpp:47
void ComputeGeometry(WsfEM_XmtrRcvr *aXmtrRcvrPtr, WsfPlatform *aTargetPtr, WsfEM_Xmtr *aXmtrPtr, double &rdr_height_msl, double &rdr_lat, double &rdr_lon, double &rkfact, double &tgt_height_msl, double &tgt_lat, double &tgt_lon, double &ground_range, double &tanept, double &slant_range, double &tgt_az, double &tgt_el, double &tgt_x, double &tgt_z)
Definition WsfEM_ALARM_Geometry.cpp:31
Data container to contain geometry data.
Definition WsfSAR_Sensor.hpp:120
double mSlantRange
The range from the sensing platform to the center-of-interest.
Definition WsfSAR_Sensor.hpp:128
double mGroundSpeed
The ground speed of the sensing platform.
Definition WsfSAR_Sensor.hpp:122
double mDepressionAngle
The depression angle.
Definition WsfSAR_Sensor.hpp:131
double mScanAngle
Definition WsfSAR_Sensor.hpp:146
double mAltitude
The altitude of the sensor.
Definition WsfSAR_Sensor.hpp:125
double mSquintAngle
Definition WsfSAR_Sensor.hpp:135
double mGrazingAngle
The angle between the line of sight vector and the tangent plane at the center-of-interest.
Definition WsfSAR_Sensor.hpp:142
double mTotalAngle
Definition WsfSAR_Sensor.hpp:139
A standard set of errors associated with single sensor mono-static detections.
Definition WsfStandardSensorErrorModel.hpp:26
Copyrights Multiple, All Rights Reserved