VR-Vantage 3.1 API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
ssISAR Class Reference

This class provides the implementation of ISAR. More...

Public Member Functions

 ssISAR ()
 Default Constructor.
 ~ssISAR ()
 Default Destructor.
void setNoiseParameters (float power_law, float scale_coefficient, float sea_state_shift)
 This function sets the parameters that determine how sea state noise is added to the scene.
void addShipInView (ssShipMotion *shipMotion, ssObject *shipObject)
 This class maintains a list of ship motion objects that are within view.
void clearShipsInView ()
 This class maintains a list of ship motion objects that are within view.
int getNumShipsInView ()
 Return the number of ships that this class has been told are in view for the current integration cycle.
bool update (ssSensor *sensor)
 Update this ISAR sensor implementation.
double getSimulationTime ()
 Get the currently simulation time, in seconds, based on the timer that is being used by this ISAR sensor.
void getDisplayImageProperties (float &CPI_s, float &minIntensity, float &maxIntensity, float &minRange, float &maxRange, float &minRangeRate, float &maxRangeRate, int &numRangePixels, int &numRangeRatePixels)
 Get Display image (not ISAR image) final properties.
void computeIsarImage (float *imageData, int imageWidth, int imageHeight, int components, float horzFOV, float vertFOV, ssSensor *sensor)
 At the end of an integration period, this method should be called to generate an ISAR image from the images that have been generated for this period.
void setUseVectorISAR (bool flag)
bool getUseVectorISAR ()

Private Member Functions

void unscaleDoppler (float *imgData, int imgWidth, int imgHeight, int components, ssSensor *sensor)
void findAxisExtents (float *imgData, int imgWidth, int imgHeight, int components, ISAR_LIMITS &limits, ssSensor *sensor)
void constructImage (float *imgData, int imgWidth, int imgHeight, int components, bool area_weight, float minAbsRangeRate, ISAR_LIMITS limits)
 Creates an ISAR image using a radiance array as input.
void computeNumSensorBins (ssSensor *sensor, double sample_time_start_sec, double sample_time_end_sec, int maxHorzBins, int maxVertBins, ISAR_LIMITS &limits)
 Approximates the horizontal, vertical bin counts using the arc/aperture determined due to a continuous ship rotation without changes direction.
VECTOR computeMaxFlipTimeInterval (ssSensor *sensor, double maxDeltaTimeStep, double angularTolDeg=60)
 Calculates the maximum time interval for a continuous ship rotation without changes direction.
void computeSensorLookAngles (double &x_rad, double &y_rad, double &z_rad, ssSensor *sensor, double sample_time_sec)
 Calculates the Ship Rotation to position ship for notional ISAR view.
double computeApparentArc (ssSensor *sensor, double sample_time_start_sec, double sample_time_end_sec)
 Uses the contiguous sampling times returned by computeMaxFlipTimeInterval().
VECTOR getCurrentPath (ssSensor *sensor)
VECTOR computePathAngularVelocity (ssSensor *sensor, double sample_time_sec)
 Calculates the Ship Motion Rotation Matrix for relative ISAR position.
void stretchRadianceArray (float *savedRadianceArray, int size, float fmin=0, float fmax=0)
 Modify the contents of the passed in array by applying gain and level.
void outputTestFile (const char *fileName, const float *imageData, int imageWidth, int imageHeight, int counter)
 Opens the file that is specified by name and writes the contents of the passed in array of floating point values to that file.

Private Attributes

double m_integrationPeriod
bool m_isflipped
int m_numHorizontalBins
int m_numVerticalBins
float m_CPI
ISAR_LIMITS m_limits
int m_numRangePixels
int m_numRangeRatePixels
float m_powerLaw
float m_scaleCoefficient
float m_seaStateShift
ssTimerm_integrationTimer
ssTimerm_simulationTimer
ssShipMotionm_activeShipMotion
ssObjectm_activeShipObject
int m_numShipsInView
bool m_useVectorISAR

Detailed Description

This class provides the implementation of ISAR.

This class uses the rotational motion of the ship that is within view to determine the size of the synthetic aperture for this sensor during each integration period. The size of the synthetic aperture determines the resulting clarity of the final radar image.

Constructor & Destructor Documentation

ssISAR::ssISAR ( )

Default Constructor.

ssISAR::~ssISAR ( )

Default Destructor.

Member Function Documentation

void ssISAR::setNoiseParameters ( float  power_law,
float  scale_coefficient,
float  sea_state_shift 
)

This function sets the parameters that determine how sea state noise is added to the scene.

These parameters and algorithms require updates for better fidelity. There are currently no physics here!

    scale_coefficient*(sea_state+sea_state_shift)^power_law
Parameters
[in]power_law- exponent of the equation used to model noise
[in]scale_coefficient- coefficient of the equation used to model noise
[in]sea_state_shift- additive term to sea state in the equation used to model noise
void ssISAR::addShipInView ( ssShipMotion shipMotion,
ssObject shipObject 
)

This class maintains a list of ship motion objects that are within view.

This method should be used in conjunction with clearShipsInView() to maintain an accurate list of which ships are currently within view. The motion of these ships are used to compute the resolution of the ISAR image.

Parameters
shipMotion- The ship motion object that should be added to our list of active ships.
void ssISAR::clearShipsInView ( )
inline

This class maintains a list of ship motion objects that are within view.

This method remove all ships motion objects that this class is using and should be used in conjunction with addShipInView() to maintain an accurate list of which ships are currently within view.

int ssISAR::getNumShipsInView ( )
inline

Return the number of ships that this class has been told are in view for the current integration cycle.

bool ssISAR::update ( ssSensor sensor)

Update this ISAR sensor implementation.

If the return value is true, a new ISAR image should be created this frame, which means that computeIsarImage() should be called. If false is returned, computeIsarImage() should not be called this frame.

Parameters
sensor- Sensor that is currently being used
windSpeed- The speed of the wind in knots
Returns
True if a new ISAR image should be created this frame, false if it should not.
double ssISAR::getSimulationTime ( )

Get the currently simulation time, in seconds, based on the timer that is being used by this ISAR sensor.

void ssISAR::getDisplayImageProperties ( float &  CPI_s,
float &  minIntensity,
float &  maxIntensity,
float &  minRange,
float &  maxRange,
float &  minRangeRate,
float &  maxRangeRate,
int numRangePixels,
int numRangeRatePixels 
)

Get Display image (not ISAR image) final properties.

void ssISAR::computeIsarImage ( float *  imageData,
int  imageWidth,
int  imageHeight,
int  components,
float  horzFOV,
float  vertFOV,
ssSensor sensor 
)

At the end of an integration period, this method should be called to generate an ISAR image from the images that have been generated for this period.

The location of the sensor relative to the ship (it is pitching and rolling) has been used to generate multiple images that make the synthetic aperture of the radar. This call brings those images together to form a single higher quality image.

Parameters
imageData- The most recently rendered image of the ship
imageWidth- Pixel width of the image that is being passed in
imageHeight- Pixel height of the image that is being passed in
components- number of color channels per pixel
horzFOV- The current horizontal field-of-view of the camera
vertFOV- The current vertical field-of-view of the camera
sensor- Sensor that is currently being used
void ssISAR::setUseVectorISAR ( bool  flag)
inline
bool ssISAR::getUseVectorISAR ( )
inline
void ssISAR::unscaleDoppler ( float *  imgData,
int  imgWidth,
int  imgHeight,
int  components,
ssSensor sensor 
)
private
void ssISAR::findAxisExtents ( float *  imgData,
int  imgWidth,
int  imgHeight,
int  components,
ISAR_LIMITS limits,
ssSensor sensor 
)
private
void ssISAR::constructImage ( float *  imgData,
int  imgWidth,
int  imgHeight,
int  components,
bool  area_weight,
float  minAbsRangeRate,
ISAR_LIMITS  limits 
)
private

Creates an ISAR image using a radiance array as input.

This method my be one of the most important in the entire ISAR implementations. The rendered ship is passes in as a full resolution radiance array. The image is processed to represent the ISAR image by scaling it based on the number of passed in range and cross-range bins. The resulting ISAR image is then written back into the image array that was passed in.

Parameters
[in,out]imgData- radiance array in, ISAR image out
imgWidth- Pixel width of the image that is being passed in
imgHeight- Pixel height of the image that is being passed in
components- number of color channels per pixel
area_weight- if true, assumes intensity should be redistributed when binning such that intensity/unitarea is conserved.
minAbsRangeRate- min detectable target velocity [m/s]
limits- min/max limits found from scenegraph sampling for intensity, range, rangerate. /////////////////////////////////////////////////////////////////////////
void ssISAR::computeNumSensorBins ( ssSensor sensor,
double  sample_time_start_sec,
double  sample_time_end_sec,
int  maxHorzBins,
int  maxVertBins,
ISAR_LIMITS limits 
)
private

Approximates the horizontal, vertical bin counts using the arc/aperture determined due to a continuous ship rotation without changes direction.

This thethod uses ISARSensorApparentArc() and assumes ship coordinate origin are set at the metacentric height, the ship's length lies along the x-axis, and the z-axis is vertical

Parameters
sensor- current sensor object
sample_time_start_sec- calculation start time in seconds
sample_time_end_sec- calculation end time in seconds
maxHorzBins- maximum number of bins there can be in the horizontal direction
maxVertBins- maximum number of bins there can be in the vertical direction
limits- min/max limits found from scenegraph sampling for intensity, range, rangerate. /////////////////////////////////////////////////////////////////////////
VECTOR ssISAR::computeMaxFlipTimeInterval ( ssSensor sensor,
double  maxDeltaTimeStep,
double  angularTolDeg = 60 
)
private

Calculates the maximum time interval for a continuous ship rotation without changes direction.

Assumes ship coordinate origin are set at the metacentric height, Ship length lies along the x-axis, z-axis is vertical

Parameters
sensor- Current sensor object
maxDeltaTimeStep- Largest acceptable time step (seconds) that can be taken to sample the rotational motion
angularTolDeg- threshold of minimum change in angle [degree] of the ship tangential (rotation) velocity that denotes change in direction. The art of good enough. sigh...
Returns
maximum time interval (start and stop time in seconds) of continuous rotation in the sampling interval
void ssISAR::computeSensorLookAngles ( double &  x_rad,
double &  y_rad,
double &  z_rad,
ssSensor sensor,
double  sample_time_sec 
)
private

Calculates the Ship Rotation to position ship for notional ISAR view.

Assumes ship coordinate origin are set at the metacentric height, Ship length lies along the x-axis, z-axis is vertical.

NOTE: y-rad needs to be checked as it is not currently used

Parameters
[out]x_rad- rotation angle [radians] with z-axis as rotor(heading)
[out]y_rad- rotation angle [radians] with y-axis as rotor HOWEVER this rotation is not currently needed/used
[out]z_rad- rotation angle [radians] with x-axis as rotor(roll)
sensor- current sensor object
sample_time_sec- elapsed time in seconds
double ssISAR::computeApparentArc ( ssSensor sensor,
double  sample_time_start_sec,
double  sample_time_end_sec 
)
private

Uses the contiguous sampling times returned by computeMaxFlipTimeInterval().

Assumes ship coordinate origin are set at the metacentric height, Ship length lies along the x-axis, z-axis is vertical

Parameters
sensor- current sensor object
sample_time_start_sec- calculation start time in seconds
sample_time_end_sec- calculation end time in seconds
Returns
angle width in radians of the arc
VECTOR ssISAR::getCurrentPath ( ssSensor sensor)
private
VECTOR ssISAR::computePathAngularVelocity ( ssSensor sensor,
double  sample_time_sec 
)
private

Calculates the Ship Motion Rotation Matrix for relative ISAR position.

Assumes ship coordinate origin are set at the metacentric height, Ship length lies along the x-axis, z-axis is vertical.

NOTE: Sensor look is not needed currently

Parameters
sensor- current sensor object
sample_time_sec- elapsed time in seconds
Returns
Path Angular Velocity Vector for notional position in homogeneous coordinates
void ssISAR::stretchRadianceArray ( float *  savedRadianceArray,
int  size,
float  fmin = 0,
float  fmax = 0 
)
private

Modify the contents of the passed in array by applying gain and level.

The manipulation will result in the minimum and maximum values stored in the array matching the passed in values for min and max. All array value in between these two value will be modified so that they maintain their relative spacing between these new min and max values. This manipulation will "stretch" the values stored in the array so that they range from the passed in min to the passed in max.

void ssISAR::outputTestFile ( const char *  fileName,
const float *  imageData,
int  imageWidth,
int  imageHeight,
int  counter 
)
private

Opens the file that is specified by name and writes the contents of the passed in array of floating point values to that file.

Member Data Documentation

double ssISAR::m_integrationPeriod
private
bool ssISAR::m_isflipped
private
int ssISAR::m_numHorizontalBins
private
int ssISAR::m_numVerticalBins
private
float ssISAR::m_CPI
private
ISAR_LIMITS ssISAR::m_limits
private
int ssISAR::m_numRangePixels
private
int ssISAR::m_numRangeRatePixels
private
float ssISAR::m_powerLaw
private
float ssISAR::m_scaleCoefficient
private
float ssISAR::m_seaStateShift
private
ssTimer* ssISAR::m_integrationTimer
private
ssTimer* ssISAR::m_simulationTimer
private
ssShipMotion* ssISAR::m_activeShipMotion
private
ssObject* ssISAR::m_activeShipObject
private
int ssISAR::m_numShipsInView
private
bool ssISAR::m_useVectorISAR
private

The documentation for this class was generated from the following file:


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