VR-Vantage 3.1 API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Radar.h
Go to the documentation of this file.
1 /* © 2006 JRM Technologies, Inc.*/
2 
3 #ifndef _SIGSIM_RADAR_H_
4 #define _SIGSIM_RADAR_H_
5 
6 /***********************************
7 Copyright JRM Enterprises, Inc. 1998
8 All rights reserved.
9 
10 This code is the intellectual property of JRM Enterprises, Inc.
11 It may not be used or released as source or compiled binary form
12 without the prior written consent of JRM Enterprises, Inc.
13 ***********************************/
14 
15 #include "JRMlibrary.h"
16 #include "SigSimDefines.h"
17 #include "sigsimDLLstub.h"
18 
19 
20 #ifdef __cplusplus
21 extern "C"
22 {
23 #endif
24 
25 
26 typedef struct
27 {
28  dVEC_HV *maxpowerdensity; // [W/cm2/um] Maximum power density over cycle
29  double *lag; // [unitless] times 2*PI gives phase lag of Vertical E-field return behind Horizontal
30  double *phase; // [unitless] times 2*PI gives phase of returned field relative to transmitted.
31  double *DopplerShift; // [um] doppler shift in returned field
33 
34 typedef struct
35 {
36  dVEC_HV *maxpower; // [W/um] Maximum power over cycle
37  double *lag; // [unitless] times 2*PI gives phase lag of Vertical E-field return behind Horizontal
38  double *phase; // [unitless] times 2*PI gives phase of returned field relative to transmitted.
39  double *DopplerShift; // [um] doppler shift in returned field
40 } RF_POWER;
41 
42 
43 /* ------- Sea water / Oil slick RCS ave, dev, & wind multiplier ---- */
44 SIGSIM_API double ChaudhryMooreWaterRCS40degZenith(double windvel);
45 SIGSIM_API double waterOilSlickRCS50degZenith(double windvel);
46 SIGSIM_API double ChaudhryMooreWaterRCSDEV40degZenith(double windvel);
47 SIGSIM_API double waterOilSlickRCSDEV50degZenith(double windvel);
48 SIGSIM_API double getWindFactor(char *matname, double windvel, double oilSlickDepth);
49 SIGSIM_API void getMaterialSpecificRFDeviations(char *matname, double windvel, double oilSlickDepth, double *dopdev, double *rcsdev);
50 
51 
52 /* ------- Radar Gain/Directivity/Lobewidth -------------- */
53 
54 typedef struct
55 {
56  DISTRIBUTION H1_Term; // Horizontal or Azimuthal power density distribution for horizontally polarized radiation (RL in local FRD)
57  DISTRIBUTION H2_Term; // Vertical or Radial power density distribution for horizontally polarized radiation (RL in local FRD)
58  DISTRIBUTION V1_Term; // Horizontal or Azimuthal power density distribution for vertically polarized radiation (UD in local FRD)
59  DISTRIBUTION V2_Term; // Vertical or Radial power density distribution for vertically polarized radiation (UD in local FRD)
60  double P_Horiz, P_Vert; // Horizontal and Vertical 1D-integrated Power [W]. Sum of these is referred to as "Total Transmitter Power"
61  double phase_Horiz, phase_Vert; // Horizontal and Vertical phases [unitless 0-1]. Product with 2*PI gives relative phase [rad] of horizontal vs vertical E-field components. Difference is "lag".
62  jrmbool RectangularOrCircular; // TRUE=Rectangular, FALSE=Circular;
63 } TRANSMITTER_RECEIVER; // If receiver, above are flux acceptances/efficiencies.
64 
65 
66 
67 SIGSIM_API double UnityBeamwidth2Gain(double beamwidth_rad);
68 SIGSIM_API double UnityGain2Beamwidth(double gain);
69 SIGSIM_API double UnityDirectivity2Gain(double directivity);
70 SIGSIM_API double UnityGain2Directivity(double gain);
71 SIGSIM_API double LobeBeamwidth2Gain(double beamwidth_rad);
72 SIGSIM_API double LobeGain2Beamwidth(double gain);
73 SIGSIM_API double LobeDirectivity2Gain(double directivity);
74 SIGSIM_API double LobeGain2Directivity(double gain);
75 SIGSIM_API double RectBeamwidth2Gain(double beamwidth_rad);
76 SIGSIM_API double RectGain2Beamwidth(double gain);
77 SIGSIM_API double RectDirectivity2Gain(double directivity);
78 SIGSIM_API double RectGain2Directivity(double gain);
79 
80 
81 
82 /* ------------ RF JAMMERS & DECOYS ----------------- */
83 
84 typedef struct
85 {
86  EULERzyx FRD_orientation; // Gives orientation of beam's FRD system w.r.t. local NED at object geoD
87  char name[SIGSIM_STRING_SIZE]; // name or type
88  double fclo, fchi; // [Hz] Swept Carrier Frequency Range
89  double bandwidth; // [Hz] Bandwidth
90  double fcAgility; // [Hz/s] Carrier Frequency Agility
91  double avepower; // [W] Average power
92  double antgain; // [unitless] Antenna Gain
93  double beamwidth; // [rad] Main-lobe Beamwidth (@ 3dB)
94  double PRF; // [Hz] Pulse Repetition Frequency (if set independently, not matched to ESM value)
95  double PW; // [s] Pulse Width (if set independently, not matched to ESM value)
96  double Pagility; // [unitless 0-1] Agility in matching ESM PW and PRF. 0 = set independently or unused, 1 = fully agile. Set to unused (0) if not RBM, VBM, RGS, VGS - capable.
97  double tlo, thi; // [s] Time-delay range set for range bin masking (RBM), or set tlo>=thi for no RBM capability.
98  double fdlo, fdhi; // [Hz] Doppler frequency range set for velocity bin masking (VBM), or set fdlo>=fdhi for no VBM capability.
99  int RGSflag; // [0-2] Range Gate Stealing method : 0 = no RGS, 1 = walk-off, 2 = break lock.
100  int VGSflag; // [0-2] Velocity Gate Stealing method : 0 = no VGS, 1 = walk-off, 2 = break lock.
101  jrmbool CEflag; // [bool] Cross-Eye capable
102  jrmbool CPflag; // [bool] Cross-Polarization capable
103  jrmbool enabled; // [bool] This jammer is currently enabled
104 } RF_JAMMER; // ----- RF_JAMMER -------
105 
106  SIGSIM_API int AddRF_JAMMER(RF_JAMMER **c, int *nc, RF_JAMMER toadd);
108  SIGSIM_API int LoadRF_JAMMERs(char *filepath, RF_JAMMER **rfjammer, int *nrfjammers);
109  SIGSIM_API int FindRF_JAMMER(RF_JAMMER *rfjammer, int nrfjammers, char *name, RF_JAMMER *found);
110 
111 typedef struct
112 {
113  double aveLength; // [m] mean length of chaff fibers, or square root of known RCS for decoys.
114  double stdLength; // [m] stdev of chaff fiber length distribution, or unused (0) for decoys.
115  double nDensity; // [1/m3] number density of (undistributed) chaff fibers or just-deployed decoys.
116  jrmbool enabled; // [bool] currently enabled/disabled
117 } RF_DECOY; // RF_DECOY definition
118 
119 
120 /* ------------- RCS READERS/RETRIEVERS --------------- */
121 
122 #define NUMBER_RCS_HEADER_FIELDS 12
123 #define NUMBER_RCS_LINE_FIELDS 15
124 
125 
126 typedef struct
127 {
128  int bistatic; // [boolean] Flag: [0=Monostatic data] [1=Bistatic data]
129  double transincident; // [deg] Zenith angle toward transmitter w.r.t. object FUR system
130  double transazimuth; // [deg] Azimuth angle toward transmitter w.r.t. object FUR system
131  int nfreq; // [unitless] number of frequencies for which we have data
132  double minfreq, maxfreq; // [GHz] Minimum and maximum frequencies for which we have data
133  int nincident; // [unitless] Number of Zenith angles for which we have data
134  double minincident, maxincident, stepincident; // [deg] Minimum, maximum and increment of Zenith angle values
135  int nazimuth; // [unitless] Number of Azimuth angles for which we have data
136  double minazimuth, maxazimuth, stepazimuth; // [deg] Minimum, maximum, and increment of Azimuth angle values
137  double *freq; // [GHz] Array of frequencies for which we have data.
138  // Notes on the following:
139  // v=vertical polarization (along projection of object body up-axis on the plane perpendicular to the particular {Zenith, Azimuth} direction chosen)
140  // h=horizontal polarization (along tangent to Zenith=constant circle at particular {Zenith, Azimuth} direction chosen).
141  // First subscript refers to polarization state of the transmitter, second is that of the receiver.
142  // Index via [freq_index*nincident*nazimuth+incident_index*nazimuth+azimuth_index].
143  double *rcsvv, *rcsvh, *rcshv, *rcshh; // [dB m2] Array of Radar Cross Sections of the form 10_m2 log_10( ABSOLUTE_RCS_m2 / 1_m2).
144  double *ampvv, *ampvh, *amphv, *amphh; // [unitless 0-1] Array of Amplitude ratios of form (reflected_amplitude / incident_amplitude).
145  double *phavv, *phavh, *phahv, *phahh; // [deg] Array of Phase Differences of form (reflected_phase - incident_phase).
146 } OLD_RCS_TABLE;
147 
148 
149 typedef struct
150 {
151  VECTOR position; // [m] Position relative to object origin in object FRD
152  jrmComplex amplitude; // [m?] amplitude of scatter center
154 
155 typedef struct
156 {
157  double az, el; // [deg] aspect angle in object FRD
158  // "el" measured from FR plane toward D,
159  // "az" measured on FR plane counter-clockwise about D from F
160  double freq; // [Hz] Frequency in Hz for which this information is valid.
161  double atolerance; // [deg] Amount of offset from an az/el present in the table an inquiry can be and still be valid.
162  double ftolerance; // [Hz] Amount of offset from a freq present in the table an inquiry can be and still be valid.
163  int nsc; // number of scatter centers for this aspect
164  SCATTER_CENTER *sc; // scatter center array for this aspect
166 
167 typedef struct
168 {
169  int naspects;
171 } SCATTER_TABLE;
172 
173 typedef struct
174 {
175  VECTOR position; // [m] Position relative to object origin in object FRD
176  jrmComplex amplitude_hh; // [m2] amplitude of scatter center
177  jrmComplex amplitude_vv; // [m2] amplitude of scatter center
178  jrmComplex amplitude_hv; // [m2] amplitude of scatter center
179  jrmComplex amplitude_vh; // [m2] amplitude of scatter center
181 
182 typedef struct
183 {
184  double az, el; // [deg] aspect angle in object FRD
185  // "el" measured from FR plane toward D,
186  // "az" measured on FR plane counter-clockwise about D from F
187  double freq; // [Hz] Frequency in Hz for which this information is valid.
188  double atolerance; // [deg] Amount of offset from an az/el present in the table an inquiry can be and still be valid.
189  double ftolerance; // [Hz] Amount of offset from a freq present in the table an inquiry can be and still be valid.
190  int nsc; // number of scatter centers for this aspect
191  SCATTER_VECTOR_CENTER *svc; // scatter vector center array for this aspect
193 
194 typedef struct
195 {
196  int naspects;
199 
200 typedef struct
201 {
202  double az, el; // [deg] aspect angle in object FRD
203  // "el" measured from FR plane toward D,
204  // "az" measured on FR plane counter-clockwise about D from F
205  double freq; // [Hz] Frequency in Hz for which this information is valid.
206  double atolerance; // [deg] Amount of offset from an az/el present in the table an inquiry can be and still be valid.
207  double ftolerance; // [Hz] Amount of offset from a freq present in the table an inquiry can be and still be valid.
208  double rcsvv, rcsvh, rcshv, rcshh; // [dB m2] Radar Cross Section of the form 10 log_10( ABSOLUTE_RCS_m2 / 1_m2).
209  double phavv, phavh, phahv, phahh; // [deg] Phase Difference of form (reflected_phase - incident_phase).
210  // Phases represent the phase shift that occurs independently of phase shift due to
211  // Wave propagation to the target and back.
212 } RCS_ASPECT;
213 
214 typedef struct
215 {
216  VECTOR position; // [m] Position relative to object origin in object FRD
217  int naspects;
219 } RCS_TABLE;
220 
221 
222 double Sigma0(double gamma, double A, double grazing_angle_rad);
223 SIGSIM_API int ReadOLDRCSFile(char *in_file, OLD_RCS_TABLE **rcs_table);
225 double UnpolarizedAbsoluteRCSatOrientationFRD(double GHz, VECTOR FRD, OLD_RCS_TABLE rcs);
227 
228 
229 SIGSIM_API int LoadSCData(char *directory, char *filename, SCATTER_TABLE **sc);
231 SIGSIM_API int LoadSCVData(char *directory, char *filename, SCATTER_VECTOR_TABLE **sc);
233 SIGSIM_API int LoadRCSData(char *directory, char *filename, RCS_TABLE **rcs);
235 
236 
237 int ReadRCSLine(FILE* iFieldFile, char* oLine);
238 RCS_TABLE *rcsread(char *fpath);
239 int ReadFieldFile(const char* iFilename, RCS_TABLE** rcs_table);
242 
243 
244 #ifdef __cplusplus
245 }
246 #endif
247 
248 #endif // _SIGSIM_RADAR_H_


Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)