WSF
WsfRadarSensor.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 WSFRADARSENSOR_HPP
13#define WSFRADARSENSOR_HPP
14
15#include "wsf_export.h"
16
17#include <memory>
18#include <vector>
19
20#include "TblLookup.hpp"
22#include "WsfEM_Antenna.hpp"
23class WsfEM_Clutter;
24#include "WsfEM_Rcvr.hpp"
25#include "WsfEM_Xmtr.hpp"
26#include "WsfMarcumSwerling.hpp"
27#include "WsfSensor.hpp"
28#include "WsfSensorBeam.hpp"
29#include "WsfSensorMode.hpp"
30#include "WsfSensorResult.hpp"
31
34{
35public:
36 WsfRadarSensor(WsfScenario& aScenario);
37 WsfRadarSensor(const WsfRadarSensor& aSrc);
39
40 WsfSensor* Clone() const override;
41 bool Initialize(double aSimTime) override;
42 void PlatformAdded(double aSimTime, WsfPlatform* aPlatformPtr) override;
43 bool ProcessInput(UtInput& aInput) override;
44 void Update(double aSimTime) override;
45 void PerformScheduledDetections(double aSimTime) override;
46
47 size_t GetEM_RcvrCount() const override;
48 WsfEM_Rcvr& GetEM_Rcvr(size_t aIndex) const override;
49 size_t GetEM_RcvrCount(size_t aModeIndex) const override;
50 WsfEM_Rcvr& GetEM_Rcvr(size_t aModeIndex, size_t aIndex) const override;
51 size_t GetEM_XmtrCount() const override;
52 WsfEM_Xmtr& GetEM_Xmtr(size_t aIndex) const override;
53 size_t GetEM_XmtrCount(size_t aModeIndex) const override;
54 WsfEM_Xmtr& GetEM_Xmtr(size_t aModeIndex, size_t aIndex) const override;
55
57
58 // Some compilers require inner classes to be declared friends if they want to access outer class members
59 class RadarBeam;
60 class RadarMode;
61 friend class RadarBeam;
62 friend class RadarMode;
63
68 {
69 public:
70 RadarBeam();
71 RadarBeam(const RadarBeam& aSrc);
72 RadarBeam& operator=(const RadarBeam& aRhs);
73 ~RadarBeam() override;
74
75 // WsfSensorBeam methods
76 WsfEM_Rcvr* GetEM_Rcvr() override { return mRcvrPtr.get(); }
77 WsfEM_Xmtr* GetEM_Xmtr() override { return mXmtrPtr.get(); }
78
79 void AttemptToDetect(double aSimTime, WsfPlatform* aTargetPtr, Settings& aSettings, WsfSensorResult& aResult);
80
81 double GetAdjustmentFactor() const { return mAdjustmentFactor; }
82 double GetIntegrationGain() const override { return mIntegrationGain; }
83 void SetIntegrationGain(double aIntegrationGain) override { mIntegrationGain = aIntegrationGain; }
84 int GetNumberOfPulsesIntegrated() const override { return mNumberOfPulsesIntegrated; }
85 bool UsingDetector() const { return mUseDetector; }
86 wsf::MarcumSwerling& GetDetector() { return mDetector; }
87
90 std::shared_ptr<wsf::DetectionProbabilityTable>& GetProbabilityTable() { return mProbabilityTablePtr; }
91
92 double GetDopplerResolution() const { return mDopplerResolution; }
93 WsfEM_Clutter* GetClutter() const override { return mClutterPtr; }
94 double GetClutterAttenuationFactor() const { return mClutterAttenuationFactor; }
95
96 bool Initialize(double aSimTime,
97 unsigned int aBeamIndex,
98 WsfSensor* aSensorPtr,
99 RadarMode* aModePtr,
100 bool aCanTransmit,
101 bool aCanReceive,
102 bool aShowCalibrationData,
103 bool aIsMultiBeam);
104
105 bool ProcessInput(UtInput& aInput) override;
106
107 WsfStringId GetClutterType() const { return mClutterType; }
108
109 std::unique_ptr<WsfEM_Antenna> mAntennaPtr;
110
112 std::unique_ptr<WsfEM_Xmtr> mXmtrPtr;
113
115 std::unique_ptr<WsfEM_Rcvr> mRcvrPtr;
116
120
122 double mErrorModelAzBeamwidth; // radians
123 double mErrorModelElBeamwidth; // radians
124 double mErrorModelPulseWidth; // seconds
126
127 private:
129
130 void AttemptToDetect(double aSimTime,
131 WsfPlatform* aTargetPtr,
132 Settings& aSettings,
133 WsfEM_Xmtr* aXmtrPtr,
134 WsfSensorResult& aResult);
135
136 void Calibrate(bool aPrint);
137
138 double ComputeIntegratedPulseCount(RadarMode& aMode);
139
140 bool InitializeDetector(RadarMode& aMode);
141
143 bool mCanTransmit;
144
146 bool mUseDetector;
147
149 double mDopplerResolution;
150
152 double mOneM2DetectRange;
153
155 double mLookDownFactor;
156
158 double mPRF_Factor;
159
161 double mPostLockonDetectionThresholdAdjustment;
162
164 double mPostLockonAdjustmentDelayTime;
165
167 double mLoopGain;
168
170 double mAdjustmentFactor;
171
173 double mIntegrationGain;
174
177 int mNumberOfPulsesIntegrated;
178
184 wsf::MarcumSwerling mDetector;
185
188 std::shared_ptr<wsf::DetectionProbabilityTable> mProbabilityTablePtr;
189
194 double mClutterAttenuationFactor;
195
197 WsfStringId mClutterType;
198 };
199
202 {
203 public:
204 RadarMode();
205 RadarMode(const RadarMode& aSrc);
206 RadarMode& operator=(const RadarMode& aRhs);
207 ~RadarMode() override;
208
209 // WsfSensorMode methods.
210 size_t GetBeamCount() const override { return mBeamList.size(); }
211 WsfSensorBeam* GetBeamEntry(size_t aIndex) override { return mBeamList[aIndex]; }
212
213 WsfMode* Clone() const override;
214 bool Initialize(double aSimTime) override;
215 bool ProcessInput(UtInput& aInput) override;
216
217 bool AttemptToDetect(double aSimTime, WsfPlatform* aTargetPtr, Settings& aSettings, WsfSensorResult& aResult) override;
218
219 double GetAltFreqSelectDelay() const override { return mAltFreqSelectDelay; }
220 void ScheduleAltFreqChange(double aSimTime, int aAltFreqId = -1) override;
221 bool IsAltFreqChangeScheduled() const override { return mAltFreqChangeScheduled; }
222 double GetLastAltFreqSelectTime() const override { return mLastAltFreqSelectTime; }
223 bool IsFrequencyAgile() const override { return mIsFrequencyAgile; }
224
225 void Deselect(double aSimTime) override;
226 void Select(double aSimTime) override;
227
232 std::vector<RadarBeam*> mBeamList;
233
234 protected:
235 void SelectAlternateFrequency(double aSimTime, int aAltFreqId = -1) override;
236
241 };
242
243private:
245 std::vector<RadarMode*> mRadarModeList;
246
248 std::vector<WsfEM_Xmtr*> mXmtrList;
249
251 std::vector<WsfEM_Rcvr*> mRcvrList;
252
254 bool mAnyModeCanTransmit;
255
257 bool mAnyModeCanReceive;
258
260 WsfPlatform* mTempGeometryPtr;
261};
262
263#endif
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
An abstract class for computing clutter power.
Definition WsfEM_Clutter.hpp:25
Definition WsfEM_Rcvr.hpp:68
Definition WsfEM_Xmtr.hpp:55
Definition WsfMode.hpp:32
WsfPlatform * GetPlatform() const
Definition WsfPlatformPart.hpp:107
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
Definition WsfRadarSensor.hpp:68
std::unique_ptr< WsfEM_Xmtr > mXmtrPtr
The transmitter for a radar beam.
Definition WsfRadarSensor.hpp:112
WsfEM_Xmtr * GetEM_Xmtr() override
Definition WsfRadarSensor.hpp:77
double GetClutterAttenuationFactor() const
Definition WsfRadarSensor.hpp:94
bool UsingDetector() const
Definition WsfRadarSensor.hpp:85
WsfEM_Clutter * mClutterPtr
Definition WsfRadarSensor.hpp:119
wsf::MarcumSwerling & GetDetector()
Definition WsfRadarSensor.hpp:86
double GetIntegrationGain() const override
Definition WsfRadarSensor.hpp:82
void SetIntegrationGain(double aIntegrationGain) override
Definition WsfRadarSensor.hpp:83
double GetDopplerResolution() const
Definition WsfRadarSensor.hpp:92
std::unique_ptr< WsfEM_Antenna > mAntennaPtr
Definition WsfRadarSensor.hpp:109
double mErrorModelElBeamwidth
Definition WsfRadarSensor.hpp:123
double GetAdjustmentFactor() const
Definition WsfRadarSensor.hpp:81
WsfStringId GetClutterType() const
Definition WsfRadarSensor.hpp:107
WsfEM_Clutter * GetClutter() const override
Definition WsfRadarSensor.hpp:93
std::shared_ptr< wsf::DetectionProbabilityTable > & GetProbabilityTable()
Definition WsfRadarSensor.hpp:90
double mErrorModelPulseWidth
Definition WsfRadarSensor.hpp:124
double mErrorModelDopplerResolution
Definition WsfRadarSensor.hpp:125
double mErrorModelAzBeamwidth
Additional parameters associated with measurement errors.
Definition WsfRadarSensor.hpp:122
int GetNumberOfPulsesIntegrated() const override
Definition WsfRadarSensor.hpp:84
WsfEM_Rcvr * GetEM_Rcvr() override
Definition WsfRadarSensor.hpp:76
RadarBeam()
Definition WsfRadarSensor.cpp:434
std::unique_ptr< WsfEM_Rcvr > mRcvrPtr
The receiver for a radar beam.
Definition WsfRadarSensor.hpp:115
A 'mode' of the sensor.
Definition WsfRadarSensor.hpp:202
bool mExplicitBeamUsed
Definition WsfRadarSensor.hpp:231
void SelectAlternateFrequency(double aSimTime, int aAltFreqId=-1) override
Definition WsfRadarSensor.cpp:1720
bool mAltFreqChangeScheduled
Definition WsfRadarSensor.hpp:238
double GetLastAltFreqSelectTime() const override
Definition WsfRadarSensor.hpp:222
WsfSensorBeam * GetBeamEntry(size_t aIndex) override
Definition WsfRadarSensor.hpp:211
bool mImplicitBeamUsed
Definition WsfRadarSensor.hpp:230
double mLastAltFreqSelectTime
Definition WsfRadarSensor.hpp:239
RadarMode()
Definition WsfRadarSensor.cpp:1348
std::vector< RadarBeam * > mBeamList
Definition WsfRadarSensor.hpp:232
bool IsFrequencyAgile() const override
Definition WsfRadarSensor.hpp:223
size_t GetBeamCount() const override
Definition WsfRadarSensor.hpp:210
bool IsAltFreqChangeScheduled() const override
Definition WsfRadarSensor.hpp:221
double GetAltFreqSelectDelay() const override
Definition WsfRadarSensor.hpp:219
bool mIsFrequencyAgile
Definition WsfRadarSensor.hpp:240
bool mCanReceive
Definition WsfRadarSensor.hpp:229
double mAltFreqSelectDelay
Definition WsfRadarSensor.hpp:237
bool mCanTransmit
Definition WsfRadarSensor.hpp:228
void UpdateXmtrRcvrLists()
Definition WsfRadarSensor.cpp:225
WsfRadarSensor(WsfScenario &aScenario)
Definition WsfRadarSensor.cpp:54
WsfRadarSensor & operator=(const WsfRadarSensor &)=delete
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
Definition WsfSensorBeam.hpp:58
WsfSensorBeam()
Definition WsfSensorBeam.cpp:20
WsfSensorMode()
Definition WsfSensorMode.cpp:47
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
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
virtual void PerformScheduledDetections(double aSimTime)
Definition WsfSensor.cpp:1415
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
Computation of probability of detection using the Marcum-Swerling algorithm.
Definition WsfMarcumSwerling.hpp:29
Copyrights Multiple, All Rights Reserved