VR-Vantage 2.8 API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
At_Surface.h
Go to the documentation of this file.
1 /* © 1998 JRM Technologies, Inc.*/
2 
3 
4 
5 /***********************************
6 Copyright JRM Enterprises, Inc. 1998
7 All rights reserved.
8 
9 This code is the intellectual property of JRM Enterprises, Inc.
10 It may not be used or released as source or compiled binary form
11 without the prior written consent of JRM Enterprises, Inc.
12 ***********************************/
13 
14 
15 #ifndef _At_Surface_
16 #define _At_Surface_
17 
18 #include "LOS_Prop.h"
19 
20 #ifdef __cplusplus
21 extern "C"
22 {
23 #endif // __cplusplus
24 
25 
26  // ---------- State Updates -------------
27 
28  // UpdateObjectKinematics() is intended to update the position and FOV for this object by indexing into the proper track record based on the simtime.
29  // INPUTS : sens points to object with one or more track records filled in.
30  // E defines the Earth ellipsoid for geodetic to geocentric conversion
31  // simtime is the simulation time in seconds.
32  // OUTPUTS: object->{geoc_loc, geod_loc} corresponding to simtime (from track records)
33  // object->{ned_linear_velocity, ned_angular_velocity, ned_linear_acceleration, ned_angular_acceleration} corresponding to simtime (from track records).
34  SIGSIM49_API int UpdateObjectKinematics(OBJECT *object, ellipsoid E, double simtime);
35 
36  // ObjectThermalSpinUp() forms nodal mesh for object matl systems and plays a time-step update to initialize them.
37  SIGSIM49_API int ObjectThermalSpinUp(OBJECT *object, double spinupPeriod, METIN *metin);
38 
39  // UpdateObjectMSPOLYARRAYTemperatures() merely updates the ms_poly_array temperatures (degK) with the mp_table.Tsurf temperatures corresponding to the instantiated material system.
41 
42  // ReturnScatterAspect() gets the most relevant XPatch scatter center table for that target az/el aspect and frequency.
43  // Returns FALSE if no appropriate data exists.
44  // Not required if CalcRFReflectedPower is to be called, but useful if one is to pass this info to 3rd party codes.
45  // "el" [deg] measured from FR plane toward D,
46  // "az" [deg] measured on FR plane counter-clockwise about D from F
47  // "freq" [Hz]
48  //SIGSIM49_API jrmbool ReturnScatterAspect(OBJECT *object, double az, double el, double freq, SCATTER_ASPECT *sa);
49  SIGSIM49_API jrmbool ReturnScatterAspect(OBJECT *object, double az, double el, double freq, RCS_ASPECT *aspect);
50 
51  // ReturnRCSAspect() makes sure that the relavent RCS data is available for this az/el aspect and frequency
52  // Returns FALSE if no appropriate data exists.
53  // Not required if CalcRFReflectedPower is to be called, but useful if one is to pass this info to 3rd party codes.
54  // "el" [deg] measured from FR plane toward D,
55  // "az" [deg] measured on FR plane counter-clockwise about D from F
56  // "freq" [Hz]
57  SIGSIM49_API jrmbool ReturnRCSAspect(OBJECT *object, double az, double el, double freq, RCS_ASPECT *ra);
58 
59  /*
60  // CalcObjectRCS() performs coherent ray-sums over all scatter centers to calculate rcs and stores in object->rcs.
61  // Internal function.
62  SIGSIM49_API int CalcObjectRCS(OBJECT *object);
63  */
64  SIGSIM49_API jrmComplex getSigSimTargetRCS(double az_deg, double el_deg, double freq_Hz, RCS_TABLE *rcs_table, enum Polarization pol);
65  SIGSIM49_API void getSigSimTargetRCSAllPol (double az_deg, double el_deg, double freq_Hz, RCS_TABLE *rcs_table, jrmComplex *HH, jrmComplex *HV, jrmComplex *VH, jrmComplex *VV);
66 
67 
68  // GetProjectedRCS inputs an object, along with the hitpoint at that object, and desired frequency in [Hz],
69  // and calculates (based on the object->mp_table) the effective single-value projected RCS [dBm2] and STDDEV [dBm2] at the hitpoint
70  SIGSIM49_API double GetProjectedRCS(OBJECT *object, double freq_Hz, LOS_DB_INTERSECT *intersect);
71 
72  // GetProjectedRCS_Terrain inputs a terrain object, along with the hitpoint at that object, and desired frequency in [Hz],
73  // and calculates (based on the object->mp_table) the effective single-value projected Sigma0Mean [dBm2] and Sigma0StDev [dBm2] at the hitpoint
74  SIGSIM49_API int GetProjectedRCS_Terrain(OBJECT *terrain, double freq_Hz, LOS_DB_INTERSECT intersect, double *Sigma0Mean, double *Sigma0StDev);
75 
76  // Get2DProjectedRCS_Terrain inputs a terrain object, along with the desired spectral domain [um] and hitpoint information,
77  // and calculates (based on the object->mp_table) the effective single-value projected RCS [dBm2] and STDDEV [dBm2] at each hitpoint in the FOV.
78  // INPUTS: E defines the eath ellipsoid.
79  // fov gives the resolution and angular extents of the FOV
80  // spectrum gives the desired spectral domain and resolution
81  // terrain = pointer to the terrain object (can be NULL)
82  // object_id_of_interest : If >=0, only those pixels which fall on this object_id will be calculated (all the rest will return -1E-28 dBsm for Sigma0Mean and Sigma0StDev). If object_id_of_interest<0, all pixels will be calculated.
83  // object_id_map = an FOV array of object IDs for the corresponding view, indexed as object_id_map[horiz_index*sens.fov.vsamples+vert_index]. NOTE : object_id_map = -1 for no intersect.
84  // ms_index_map = an FOV array of indices into the mp_table array for the corresponding terrain or object, indexed as ms_index_map[horiz_index*sens.fov.vsamples+vert_index]. NOTE : ms_index = -1 for no intersect.
85  // range_map = an FOV array of ranges to the corresponding hitpoint, indexed as range_map[horiz_index*sens.fov.vsamples+vert_index]. NOTE: range for no-intersect can be taken to be any large number, or use IntersectEllipsoid(sens.geoc_loc, NED2XYZ(metin.fm.E,sens.fov.ned_view,sens.fov.geoc_loc), metin.fm.E, &hitpoint_geoC, &range); to find range to TOA in that direction.
86  // normal_map = an FOV array of surface normals (local NED) at the corresponding hitpoint, indexed as normal_map[horiz_index*sens.fov.vsamples+vert_index]. NOTE: Take advantage of XYZ2NED or FRD2NED functions in ellipsoid.h to translate to NED.
87  // OUTPUTS: Sigma0Mean is a pointer to a spectral array of terrain RCS values [dBm2] of size fov.hsamples*fov.vsamples*spectrum.nlambda.
88  // Sigma0StDev is a pointer to a spectral array of standard deviations [dBm2] in the terrain RCS, of size fov.hsamples*fov.vsamples*spectrum.nlambda.
89  SIGSIM49_API int Get2DProjectedRCS_Terrain(ellipsoid E, FOV fov, SPECTRAL_DOMAIN spectrum, OBJECT *terrain, int object_id_of_interest, int *object_id_map, int *ms_index_map, double *range_map, VECTOR *normal_map, double **Sigma0Mean, double **Sigma0StDev);
90 
91 
92  // ----------- Signature Prediction ------------------------
93  // GetAtSurfaceRadiance3D() calculates the 2D spectral at-surface radiance field corresponding
94  // to the sensor's FOV using a filled in los_map that defines the intersection at each pixel.
95  // INPUTS : sens = the transmitter/receiver
96  // los_map is a pointer to a 2D LOS_DB_INTERSECT array containing the hitpoint info (object_id, material, range, location, etc).
97  // terrain = pointer to the terrain object (can be NULL)
98  // voiobject = an array of entities/non-entities (can be NULL)
99  // num_voiobjects = number of entities/non-entities in the voiobject array
100  // metin = meteorological & atmospheric conditions to be passed to the LOS atmospherics routine for each pixel LOS.
101  // eimap = the environmental influence map to be used.
102  // brdf_model = the brdf model to use.
103  // light_enable = the brdf model to use.
104  // OUTPUTS: radiance3D is a pointer to a 2D spectral radiance array [W/cm2/sr/um] at-surface, indexed as radiance3D[horiz_index*sens.fov.vsamples+vert_index].
105  // HDR_map is a pointer to an FOV reflectivity array at-surface, indexed as HDR_map[horiz_index*sens.fov.vsamples+vert_index].
106  SIGSIM49_API int GetAtSurfaceRadiance3D(SENSOR sens, double **radiance3D, double **HDR_map,
107  LOS_2D_MAP *los_map, METIN metin, OBJECT *terrain, int num_voiobjects,
108  OBJECT *voiobject, ENVIRONMENTAL_INFLUENCE_MAP eimap, BRDF_MODEL brdf_model, jrmbool emission_enable, jrmbool light_enable);
109 
110 
111  // GetAtSurfaceRadiance3D_GPU() calculates the 2D spectral at-surface radiance field corresponding to the sensor's FOV.
112  // INPUTS : sens = the transmitter/receiver
113  // terrain = pointer to the terrain object (can be NULL)
114  // voi_object = an array of entities/non-entities (can be NULL)
115  // num_voiobjects = number of entities/non-entities in the voiobject array
116  // object_index_map = an FOV array of indices into the voiobject array, indexed as object_index_map[horiz_index*sens.fov.vsamples+vert_index]. NOTE: object_index = -1 for terrain, = -2 for no intersect.
117  // ms_index_map = an FOV array of indices into the mp_table array for the corresponding terrain or object, indexed as ms_index_map[horiz_index*sens.fov.vsamples+vert_index]. NOTE : ms_index = -1 for no intersect.
118  // range_map = an FOV array of ranges to the corresponding hitpoint, indexed as range_map[horiz_index*sens.fov.vsamples+vert_index]. NOTE: range for no-intersect can be taken to be any large number, or use IntersectEllipsoid(sens.geoc_loc, NED2XYZ(metin.fm.E,sens.fov.ned_view,sens.fov.geoc_loc), metin.fm.E, &hitpoint_geoC, &range); to find range to TOA in that direction.
119  // normal_map = an FOV array of surface normals (local NED) at the corresponding hitpoint, indexed as normal_map[horiz_index*sens.fov.vsamples+vert_index]. NOTE: Take advantage of XYZ2NED or FRD2NED functions in ellipsoid.h to translate to NED.
120  // metin = meteorological & atmospheric conditions to be passed to the LOS atmospherics routine for each pixel LOS.
121  // OUTPUTS: radiance3D is a pointer to a 2D spectral radiance array [W/cm2/sr/um] at-surface, indexed as radiance3D[horiz_index*sens.fov.vsamples+vert_index].
122  // HDR_map is a pointer to an FOV reflectivity array at-surface, indexed as HDR_map[horiz_index*sens.fov.vsamples+vert_index].
123  // rdot_map is a pointer to an FOV range rate map, indexed as rdot_map[horiz_index*sens.fov.vsamples+vert_index].
124  SIGSIM49_API int GetAtSurfaceRadiance3D_GPU(SENSOR sens, double **radiance3D, double **HDR_map, double **rdot_map, int *object_index_map, int *ms_index_map, double *range_map, VECTOR *normal_map, METIN metin, OBJECT *terrain, int num_voiobjects, OBJECT *voiobject, ENVIRONMENTAL_INFLUENCE_MAP eimap, BRDF_MODEL brdf_model);
125 
126  // GetAtSurfaceRadiance3D_CPU() inputs sensor FOV and desired spectral domain, the terrain and objects within the sensor's VOI, and an ENVIRONMENTAL_INFLUENCES_MAP,
127  // and calculates the 2D spectral at-surface radiance field corresponding to the sensor's FOV.
128  // OUTPUTS: radiance3D is a pointer to a 2D spectral radiance map [W/cm2/sr/um] at-surface.
129  // HDR_map is a pointer to a 2D HDR (Hemispherical-Directional Reflectivity) map [unitless] at-surface.
130  // los_map is a pointer to a 2D LOS_DB_INTERSECT array so that hitpoint info (object_id, etc) can be returned.
131  SIGSIM49_API int GetAtSurfaceRadiance3D_CPU(FOV fov, SPECTRAL_DOMAIN spectrum, double **radiance3D, double **HDR_map, LOS_2D_MAP *los_map, METIN metin, OBJECT *terrain, int num_voiobjects, OBJECT *voiobject, ENVIRONMENTAL_INFLUENCE_MAP eimap, BRDF_MODEL brdf_model);
132 
133  // CalcDirectionalRadiance_rademit() inputs a hitpoint location and an ENVIRONMENTAL_INFLUENCE_MAP at that location,
134  // and outputs a spectral at-surface radiance and HDR in the direction hitpoint.to_eye, at desired resolution given by sens.spectrum.
136  long nmatls, MATL_PROP_TABLE *mp_table, BRDF_MODEL brdf_model,
137  SENSOR sens, jrmbool emission_enable, jrmbool light_enable, double *atsurface, double *HDR);
138 
139  // CalcDirectionalRadiance() inputs a hitpoint location and an ENVIRONMENTAL_INFLUENCE_MAP at that location,
140  // and outputs a spectral at-surface radiance and HDR in the direction hitpoint.to_eye, at desired resolution given by spectrum.
141  SIGSIM49_API int CalcDirectionalRadiance(METIN *metin, ENVIRONMENTAL_INFLUENCE_MAP eimap, LOS_DB_INTERSECT hitpoint, long nmatls, MATL_PROP_TABLE *mp_table, BRDF_MODEL brdf_model, SPECTRAL_DOMAIN spectrum, double *atsurface, double *HDR);
142 
143 
144  // ---------------------------- RF SIGNATURES ----------------------------------------------------
145 
146  // AllocateRFPowerDensity() allocates memory for RF_POWER_DENSITY spectral arrays, each of nlambda elements.
148 
149  // AllocateRFPower() allocates memory for RF_POWER spectral arrays, each of nlambda elements.
150  SIGSIM49_API int AllocateRFPower(RF_POWER *rf, long nlambda);
151 
152  // CalcRFReflectedPower_Object inputs an object and sensor, along with the hitpoint at that object, orientation of the ifov, and 1-way RF transmittance and noise,
153  // and calculates (based on the object->rcs table and sensor power density distribution) the reflected (spectral) RF_POWER and RCS [dBm2] returned.
154  SIGSIM49_API int CalcRFReflectedPower_Object(SPECTRAL_DOMAIN spectrum, OBJECT object, LOS_DB_INTERSECT intersect, double **RCS, double *rftrans1way, double *rfnoise1way, RF_POWER *rfpower);
155 
156  // CalcRFReflectedPower_Terrain inputs a terrain object, along with the hitpoint, orientation of the ifov, and with the 1-way RF transmittance and noise,
157  // and calculates (based on the object->mp_table[ms_index] Ulaby-Dobson RCS parameters and sensor power density distribution) the reflected (spectral) RF_POWER and RCS [dBm2] returned.
158  SIGSIM49_API int CalcRFReflectedPower_Terrain(SPECTRAL_DOMAIN spectrum, OBJECT terrain, LOS_DB_INTERSECT intersect, double **RCS, double *rftrans1way, double *rfnoise1way, RF_POWER *rfpower);
159 
160  // CalcRFReflectedPower inputs the sensor, orientation of the ifov, meteorological conditions, and geometry,
161  // and calculates the post-reflection (spectral) RF_POWER, along with the 1-way transmittance and RF noise [W/cm2/um], RCS [dBm2], and hitpoint information.
162  // To be used when the endpoint intersection is unknown.
163  SIGSIM49_API int CalcRFReflectedPower(SENSOR sens, EULERzyx ifov_orient_NED, METIN metin, OBJECT *terrain, int num_voiobjects, OBJECT *voiobject, LOS_DB_INTERSECT *hitpoint, double **RCS, double **rftrans1way, double **rfnoise1way, RF_POWER *rfpower);
164 
165  // CalcRFReflectedPowerKE inputs the sensor fov and spectrum, orientation of the ifov, meteorological conditions, and geometry,
166  // and calculates the post-reflection (spectral) RF_POWER, along with the 1-way transmittance and RF noise [W/cm2/um], RCS [dBm2], and hitpoint information.
167  // To be used when the endpoint intersection is known.
168  SIGSIM49_API int CalcRFReflectedPowerKE(FOV sensfov, SPECTRAL_DOMAIN spectrum, EULERzyx *ifov_orient_NED, METIN metin, OBJECT *terrain, int num_voiobjects, OBJECT *voiobject, LOS_DB_INTERSECT *hitpoint, double **RCS, double **rftrans1way, double **rfnoise1way, RF_POWER *rfpower);
169 
170  // RFPowerCoherentSum performs coherent sum of RF_POWER at relative range_m.
171  SIGSIM49_API int RFPowerCoherentSum(RF_POWER A, RF_POWER B, RF_POWER *sum, double range_m, SPECTRAL_DOMAIN spectrum);
172 
173  // GetRFReflectedPower2DHV_GPU() calculates the 2D at-surface RF power field corresponding to the sensor's FOV.
174  // INPUTS : sens = the transmitter/receiver
175  // terrain = pointer to the terrain object (can be NULL)
176  // voi_object = an array of entities/non-entities (can be NULL)
177  // num_voiobjects = number of entities/non-entities in the voiobject array
178  // object_index_map = an FOV array of indices into the voiobject array, indexed as object_index_map[horiz_index*sens.fov.vsamples+vert_index]. NOTE: object_index = -1 for terrain, = -2 for no intersect.
179  // ms_index_map = an FOV array of indices into the mp_table array for the corresponding terrain or object, indexed as ms_index_map[horiz_index*sens.fov.vsamples+vert_index]. NOTE : ms_index = -1 for no intersect.
180  // range_map = an FOV array of ranges to the corresponding hitpoint, indexed as range_map[horiz_index*sens.fov.vsamples+vert_index]. NOTE: range for no-intersect can be taken to be any large number, or use IntersectEllipsoid(sens.geoc_loc, NED2XYZ(metin.fm.E,sens.fov.ned_view,sens.fov.geoc_loc), metin.fm.E, &hitpoint_geoC, &range); to find range to TOA in that direction.
181  // normal_map = an FOV array of surface normals (local NED) at the corresponding hitpoint, indexed as normal_map[horiz_index*sens.fov.vsamples+vert_index]. NOTE: Take advantage of XYZ2NED or FRD2NED functions in ellipsoid.h to translate to NED.
182  // metin = meteorological & atmospheric conditions to be passed to the LOS atmospherics routine for each pixel LOS.
183  // OUTPUTS: power2DHV is a pointer to an FOV spectral RF power array at-surface, indexed as power2DHV[horiz_index*sens.fov.vsamples+vert_index].
184  // RCS_map is a pointer to an FOV RCS array at-surface [dBm2], indexed as RCS_map[horiz_index*sens.fov.vsamples+vert_index].
185  // rdot_map is a pointer to an FOV range rate map [m/s], indexed as rdot_map[horiz_index*sens.fov.vsamples+vert_index].
186  // rftrans1way_map is a pointer to an FOV transmission map, indexed as rftrans1way_map[horiz_index*sens.fov.vsamples*sens.spectrum.nlambda+vert_index*sens.spectrum.nlambda].
187  // rfnoise1way_map is a pointer to an FOV rf noise map [W/cm2/um], indexed as rfnoise1way_map[horiz_index*sens.fov.vsamples*sens.spectrum.nlambda+vert_index*sens.spectrum.nlambda].
188  SIGSIM49_API int GetRFReflectedPower2DHV_GPU(SENSOR sens, RF_POWER **power2DHV, double **RCS_map, double **rdot_map, double **rftrans1way_map, double **rfnoise1way_map, int *object_index_map, int *ms_index_map, double *range_map, VECTOR *normal_map, METIN metin, OBJECT *terrain, int num_voiobjects, OBJECT *voiobject);
189 
190  // GetRFReflectedPower2DHV_CPU() inputs a sensor, the terrain and objects within the sensor's VOI, and the meterolorogical conditions,
191  // and calculates the 2D at-surface RF power field corresponding to the sensor's FOV.
192  // OUTPUTS: power2DHV is a pointer to a 2D spectral RF power array at-surface.
193  // los_map is a pointer to a 2D LOS_DB_INTERSECT array so that hitpoint info (object_id, etc) can be returned.
194  SIGSIM49_API int GetRFReflectedPower2DHV_CPU(SENSOR sens, RF_POWER **power2DHV, LOS_2D_MAP *los_map, METIN metin, OBJECT *terrain, int num_voiobjects, OBJECT *voiobject);
195 
196  // GetTotalRFPower2D() calculates the band-integrated, polarization-summed 2D power ,
197  // given a fully polarized, spectral description in a 2D array of RF_POWERs.
198  SIGSIM49_API int GetTotalRFPower2D(SENSOR sens, double **power2D, RF_POWER *power2DHV);
199 
200  // FreePowerHVArrays() frees the memory associated with an RF_POWER's spectral arrays.
202 
203  // FreePower2DHVMap() frees the memory associated with a 2D RF_POWER map.
204  SIGSIM49_API int FreePower2DHVMap(RF_POWER *power2DHV, int hsamples, int vsamples);
205 
206  // FreePowerMap() frees the memory associated with a power map.
207  SIGSIM49_API int FreePowerMap(double *power);
208 
209 
210 
211  // ---- The following routines should really all be in At-Aperture.c/h ------------------------
212 
213  // WeddingCakeRectangular returns Wedding Cake distribution (rectangular format, no phase) defined by
214  // WeddingCake (theta [rad]) :
215  // Param Meaning
216  // 0 [deg] angular half-width of main lobe
217  // 1 [dB] ratio of 1st side lobe max power relative to main lobe ( = 10 log10(1st_side_lobe_max/main_max) )
218  // 2 [deg] angular half-width of 1st side lobe
219  // 3 [dB] ratio of 2nd side lobe max power relative to main lobe ( = 10 log10(2nd_side_lobe_max/main_max) )
220  // 4 [deg] angular half-width of 2nd side lobe
221  // 5 [dB] ratio of 3rd side lobe max power relative to main lobe ( = 10 log10(3rd_side_lobe_max/main_max) )
222  // 6 [deg] angular half-width of 3rd side lobe
223  // 7 [UNUSED]
224  SIGSIM49_API double WeddingCakeRectangular(double *coef, double theta);
225 
226 
227  // WeddingCakeRadial returns Wedding Cake distribution (radial axis, no phase) defined by
228  // WeddingCake (theta [rad]) :
229  // Param Meaning
230  // 0 [deg] angular half-width of main lobe
231  // 1 [dB] ratio of 1st side lobe max power relative to main lobe ( = 10 log10(1st_side_lobe_max/main_max) )
232  // 2 [deg] angular half-width of 1st side lobe
233  // 3 [dB] ratio of 2nd side lobe max power relative to main lobe ( = 10 log10(2nd_side_lobe_max/main_max) )
234  // 4 [deg] angular half-width of 2nd side lobe
235  // 5 [dB] ratio of 3rd side lobe max power relative to main lobe ( = 10 log10(3rd_side_lobe_max/main_max) )
236  // 6 [deg] angular half-width of 3rd side lobe
237  // 7 [UNUSED]
238  SIGSIM49_API double WeddingCakeRadial(double *coef, double theta);
239 
240  // GaussianRadial() returns radial Gaussian distribution of -3dB point beamwidth/2 [rad] sampled at angle theta [rad] from centerline.
241  SIGSIM49_API double GaussianRadial(double beamwidth, double theta);
242 
243 
244  // GetRFPowerEmitted() returns an RF_POWER (which contains spectral arrays) for a given spectral array of TRANSMITTER_RECEIVER DISTRIBUTIONs defined by spectrum and transmitter, at the transmitter antenna.
245  // INPUTS : pixel_angle is a 2D vector of angles [rad] measured from FRONT, which define the desired FOV sample direction.
246  // spectrum defines the spectral array.
247  // transmitter is a pre-allocated and filled array of TRANSMITTER_RECEIVERs of number spectrum.nlambda, each of which contains the DISTRIBUTION information of the RF transmitter source, at-antenna.
248  // OUTPUTS: rfpower is a pointer to an RF_POWER whose spectral arrays will be allocated and filled by this routine.
249  SIGSIM49_API int GetRFPowerEmitted(dVEC_HV pixel_angle, SPECTRAL_DOMAIN spectrum, TRANSMITTER_RECEIVER *transmitter, RF_POWER *rfpower);
250 
251  // GetRFPowerDensityAccepted() returns an RF_POWER_DENSITY (which contains spectral arrays) for a given spectral array of TRANSMITTER_RECEIVER DISTRIBUTIONs defined by spectrum and receiver, at the receiver antenna.
252  // INPUTS : pixel_angle is a 2D vector of angles [rad] measured from FRONT, which define the desired FOV sample direction.
253  // spectrum defines the spectral array.
254  // receiver is a pre-allocated and filled array of TRANSMITTER_RECEIVERs of number spectrum.nlambda, each of which contains the DISTRIBUTION information of the RF receiver acceptance.
255  // rfpowerdensity_ataperture describes the RF_POWER_DENSITY at the receiver aperture, but not all of this power is necessarily accepted due to efficiency and polarization losses.
256  // OUTPUTS: rfpowerdensity_accepted is a pointer to an RF_POWER_DENSITY whose spectral arrays will be allocated and filled by this routine.
257  SIGSIM49_API int GetRFPowerDensityAccepted(dVEC_HV pixel_angle, SPECTRAL_DOMAIN spectrum, TRANSMITTER_RECEIVER *receiver, RF_POWER_DENSITY rfpowerdensity_ataperture, RF_POWER_DENSITY *rfpowerdensity_accepted);
258 
259  // GetRFPowerDensityAccepted_2DHV merely loops over GetRFPowerDensityAccepted to provide a 2D map of accepted powerdensities, one for each pixel.
260  // INPUTS : fov defines an array of 2D vectors of angles [rad] measured from FRONT, which define the desired FOV sample direction.
261  // spectrum defines the spectral array.
262  // receiver is a pre-allocated and filled array of TRANSMITTER_RECEIVERs of number spectrum.nlambda, each of which contains the DISTRIBUTION information of the RF receiver acceptance.
263  // rfpowerdensity_ataperture describes the RF_POWER_DENSITY at the receiver aperture, for each pixel, but not all of this power is necessarily accepted due to efficiency and polarization losses.
264  // OUTPUTS: rfpowerdensity_accepted is a pointer to an unallocated RF_POWER_DENSITY array, each of whose spectral arrays will be allocated and filled by this routine.
265  SIGSIM49_API int GetRFPowerDensityAccepted_2DHV(FOV fov, SPECTRAL_DOMAIN spectrum, TRANSMITTER_RECEIVER *receiver, RF_POWER_DENSITY *rfpowerdensity_ataperture, RF_POWER_DENSITY **rfpowerdensity_accepted);
266 
267  // FreePowerDensityHVArrays() frees the memory associated with an RF_POWER_DENSITY's spectral arrays.
269 
270  // FreePowerDensity2DHVMap() frees the memory associated with a 2D RF_POWER_DENSITY map.
271  SIGSIM49_API int FreePowerDensity2DHVMap(RF_POWER_DENSITY *powerdensity2DHV, int hsamples, int vsamples);
272 
273  // FreeRadianceMap() frees the memory associated with a power density map.
274  SIGSIM49_API int FreePowerDensityMap(double *powerdensity);
275 
276 
277 #ifdef __cplusplus
278 }
279 #endif // __cplusplus
280 
281 
282 #endif // _At_Surface_


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