WSF
WsfEM_Rcvr.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 WSFEM_RCVR_HPP
13#define WSFEM_RCVR_HPP
14
15#include "wsf_export.h"
16
17#include <string>
18#include <vector>
19
20class UtInput;
23#include "WsfComponent.hpp"
24#include "WsfComponentList.hpp"
25class WsfEM_Antenna;
27class WsfEM_Rcvr;
28#include "WsfEM_Types.hpp"
29class WsfEM_Xmtr;
30#include "WsfEM_XmtrRcvr.hpp"
31class WsfPlatform;
32
38{
39public:
43
45
46 virtual void AddInteractor(WsfEM_Xmtr* aXmtrPtr);
47 virtual void RemoveInteractor(WsfEM_Xmtr* aXmtrPtr);
49};
50
68{
69public:
71
72
73
77
87
88 WsfEM_Rcvr(RcvrFunction aFunction, WsfEM_Antenna* aAntennaPtr = nullptr);
89
90 WsfEM_Rcvr(const WsfEM_Rcvr& aSrc, WsfEM_Antenna* aAntennaPtr = nullptr);
91
92 ~WsfEM_Rcvr() override;
93
95 std::string GetName() const { return "receiver"; }
96
99 ComponentList& GetComponents() { return mComponents; }
100 const ComponentList& GetComponents() const { return mComponents; }
102
103 const char* GetScriptClassName() const override { return "WsfEM_Rcvr"; }
104
105 void Activate();
106
107 virtual void Deactivate();
108
109 virtual double ComputeReceivedPower(double aSourceAz,
110 double aSourceEl,
111 double aEBS_Az,
112 double aEBS_El,
113 double aReceivedPowerDensity,
114 WsfEM_Types::Polarization aPolarization,
115 double aFrequency,
116 double& aAntennaGain);
117
118 virtual double ComputeSignalToNoise(double aReceivedSignalPower, double aClutterPower, double aReceivedInterferencePower);
119
120 bool Initialize(WsfSimulation& aSimulation) override;
121
122 bool ProcessInput(UtInput& aInput) override;
123
124 virtual bool ProcessInputBlock(UtInput& aInput);
125
126 double GetBandwidthEffect(double aSignalFreq, double aSignalBW) const;
127
130 double GetDetectionThreshold() const { return mDetectionThreshold; }
131
134 RcvrFunction GetFunction() const { return mFunction; }
135
138 double GetInstantaneousBandwidth() const { return mInstantaneousBandwidth; }
139
142 double GetNoisePower() const { return mNoisePower; }
143
146 bool IsNoisePowerExplicit() const { return mExplicitNoisePower; }
147
150 double GetNoiseFigure() const { return mNoiseFigure; }
151
155 double GetNoiseMultiplier() const { return mNoiseMultiplier; }
156
159 void SetNoiseMultiplier(double aNoiseMultiplier) { mNoiseMultiplier = aNoiseMultiplier; }
160
161 double GetPolarizationEffect(WsfEM_Types::Polarization aPolarization) const;
162
163 void SetAntennaOhmicLoss(double aAntennaOhmicLoss);
164
165 double GetAntennaOhmicLoss() { return mAntennaOhmicLoss; }
166
169 void SetDetectionThreshold(double aDetectionThreshold) { mDetectionThreshold = aDetectionThreshold; }
170
171 void SetBandwidth(double aBandwidth) override;
172
173 void SetFrequency(double aFrequency) override;
174
175 void SetInstantaneousBandwidth(double aInstantaneousBandwidth);
176
177 void SetNoiseFigure(double aNoiseFigure);
178
179 void SetNoisePower(double aNoisePower);
180
181 void SetPolarization(WsfEM_Types::Polarization aPolarization) override;
182
183 void SetPolarizationEffect(WsfEM_Types::Polarization aPolarization, double aFraction);
184
185 void SetReceiveLineLoss(double aReceiveLineLoss);
186
187 double GetReceiveLineLoss() const { return mReceiveLineLoss; }
188
190
191
192 virtual bool CanInteractWith(WsfEM_Xmtr* aXmtrPtr);
193
194 virtual void UpdateInteractions(WsfEM_Xmtr* aXmtrPtr);
195
196 virtual bool AddInteractor(WsfEM_Xmtr* aXmtrPtr);
197
198 virtual bool RemoveInteractor(WsfEM_Xmtr* aXmtrPtr);
199
201 size_t GetCommInteractorCount() const { return mCommInteractors.size(); }
202
206 WsfEM_Xmtr* GetCommInteractorEntry(unsigned int aIndex) const { return mCommInteractors[aIndex]; }
207
210
215
217 size_t GetSensorInteractorCount() const { return mSensorInteractors.size(); }
218
222 WsfEM_Xmtr* GetSensorInteractorEntry(size_t aIndex) const { return mSensorInteractors[aIndex]; }
223
227 unsigned int GetInteractorCount() const { return mTotalInteractors; }
228
234 WsfEM_Xmtr* GetInteractorEntry(unsigned int aIndex) const;
235
236 virtual void EmitterActiveCallback(double aSimTime, WsfEM_Interaction& aResult);
237 virtual void SignalChangeCallback(double aSimTime, size_t aTargetIndex);
239
241
242 void UpdateNoisePower(double aPulseWidth = 0.0);
243
244 static double ComputeSystemNoiseTemperature(double aElevation,
245 double aAntennaOhmicLoss,
246 double aReceiveLineLoss,
247 double aNoiseFigure,
248 double aFrequency);
250
253 bool CheckXmtrMasking() { return mCheckXmtrMasking && CheckMasking(); }
254
255protected:
256 void UpdateIndices();
257
258 using InteractorList = std::vector<WsfEM_Xmtr*>;
261
266
267private:
268 void UpdatePolarizationEffects();
269
271 ComponentList mComponents;
272
274 WsfEM_Manager* mEM_ManagerPtr;
275
277
278 unsigned int mTotalInteractors;
279 unsigned int mCommBaseIndex;
280 unsigned int mSensorBaseIndex;
281 unsigned int mInterferenceBaseIndex;
283
284 RcvrFunction mFunction;
285 double mPolarizationEffects[WsfEM_Types::cPOL_COUNT];
286 double mExplicitPolarizationEffects[WsfEM_Types::cPOL_COUNT];
287 double mInstantaneousBandwidth;
288 double mNoisePower;
289 double mNoiseFigure;
290 double mNoiseMultiplier;
291 double mAntennaOhmicLoss;
292 double mReceiveLineLoss;
293 double mDetectionThreshold;
294 bool mExplicitInstantaneousBandwidth;
295 bool mExplicitNoisePower;
296
297 bool mCheckXmtrMasking;
298};
299
300#endif
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfAntennaPattern.hpp:35
Definition WsfArticulatedPart.hpp:36
A component list that stores only components of a specified type.
Definition WsfComponentList.hpp:343
WsfComponentT()
Definition WsfComponent.hpp:124
virtual bool Initialize(double aSimTime)
Definition WsfComponent.cpp:45
virtual bool ProcessInput(UtInput &aInput)
Definition WsfComponent.cpp:100
Definition WsfEM_Antenna.hpp:49
Definition WsfEM_Interaction.hpp:68
Definition WsfEM_Manager.hpp:44
Definition WsfEM_Rcvr.hpp:38
virtual void RemoveInteractor(WsfEM_Xmtr *aXmtrPtr)
Definition WsfEM_Rcvr.cpp:52
virtual void AddInteractor(WsfEM_Xmtr *aXmtrPtr)
Definition WsfEM_Rcvr.cpp:45
Definition WsfEM_Rcvr.hpp:68
RcvrFunction GetFunction() const
Definition WsfEM_Rcvr.hpp:134
std::string GetName() const
Required to display error messages in WsfComponentFactoryList.
Definition WsfEM_Rcvr.hpp:95
const char * GetScriptClassName() const override
Definition WsfEM_Rcvr.hpp:103
WsfEM_Xmtr * GetCommInteractorEntry(unsigned int aIndex) const
Definition WsfEM_Rcvr.hpp:206
size_t GetInterferenceInteractorCount() const
Get the number of potentially interacting interference transmitters.
Definition WsfEM_Rcvr.hpp:209
void SetNoiseMultiplier(double aNoiseMultiplier)
Definition WsfEM_Rcvr.hpp:159
unsigned int GetInteractorCount() const
Definition WsfEM_Rcvr.hpp:227
const ComponentList & GetComponents() const
Definition WsfEM_Rcvr.hpp:100
size_t GetCommInteractorCount() const
Get the number of potentially interacting communications transmitters.
Definition WsfEM_Rcvr.hpp:201
double GetAntennaOhmicLoss()
Definition WsfEM_Rcvr.hpp:165
WsfEM_Xmtr * GetSensorInteractorEntry(size_t aIndex) const
Definition WsfEM_Rcvr.hpp:222
WsfEM_Xmtr * GetInterferenceInteractorEntry(size_t aIndex) const
Definition WsfEM_Rcvr.hpp:214
void SetDetectionThreshold(double aDetectionThreshold)
Definition WsfEM_Rcvr.hpp:169
WsfEM_Rcvr(RcvrFunction aFunction, WsfEM_Antenna *aAntennaPtr=nullptr)
Definition WsfEM_Rcvr.cpp:61
WsfEM_RcvrComponent Component
Even though this isn't a component, it must have a role in order to use component factories.
Definition WsfEM_Rcvr.hpp:74
bool CheckXmtrMasking()
Definition WsfEM_Rcvr.hpp:253
size_t GetSensorInteractorCount() const
Get the number of potentially interacting sensor transmitters.
Definition WsfEM_Rcvr.hpp:217
double GetInstantaneousBandwidth() const
Definition WsfEM_Rcvr.hpp:138
double GetNoiseMultiplier() const
Definition WsfEM_Rcvr.hpp:155
double GetReceiveLineLoss() const
Definition WsfEM_Rcvr.hpp:187
InteractorList mInterferenceInteractors
Definition WsfEM_Rcvr.hpp:264
InteractorList mSensorInteractors
Definition WsfEM_Rcvr.hpp:263
ComponentList & GetComponents()
Definition WsfEM_Rcvr.hpp:99
double GetNoisePower() const
Definition WsfEM_Rcvr.hpp:142
bool IsNoisePowerExplicit() const
Definition WsfEM_Rcvr.hpp:146
double GetDetectionThreshold() const
Definition WsfEM_Rcvr.hpp:130
InteractorList mCommInteractors
Definition WsfEM_Rcvr.hpp:262
std::vector< WsfEM_Xmtr * > InteractorList
Definition WsfEM_Rcvr.hpp:258
double GetNoiseFigure() const
Definition WsfEM_Rcvr.hpp:150
WsfComponentListT< WsfEM_RcvrComponent > ComponentList
Definition WsfEM_Rcvr.hpp:75
RcvrFunction
RcvrFunction defines the intended purpose of the receiver.
Definition WsfEM_Rcvr.hpp:80
@ cRF_SENSOR
Active or Semi-Active Sensing (narrowband or matched frequency sensing, e.g. radar).
Definition WsfEM_Rcvr.hpp:83
@ cRF_COMM
Communications.
Definition WsfEM_Rcvr.hpp:82
@ cRF_UNDEFINED
Undefined.
Definition WsfEM_Rcvr.hpp:81
@ cRF_PASSIVE_SENSOR
Passive Sensing (wideband sensing, etc.).
Definition WsfEM_Rcvr.hpp:84
@ cRF_INTERFERER
Interfering system.
Definition WsfEM_Rcvr.hpp:85
bool CheckMasking() const
determine if horizon and terrain masking is to be checked
Definition WsfEM_XmtrRcvr.hpp:166
WsfEM_XmtrRcvr(WsfEM_Antenna *aAntennaPtr=nullptr)
Definition WsfEM_XmtrRcvr.cpp:40
Definition WsfEM_Xmtr.hpp:55
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Polarization
Polarization of the electromagnetic wave.
Definition WsfEM_Types.hpp:21
@ cPOL_COUNT
Number of polarizations.
Definition WsfEM_Types.hpp:29
Copyrights Multiple, All Rights Reserved