Skip Navigation
USGS - science for a changing world

Woods Hole Science Center

Skip Navigation

Files collected using the ISISTM system have the following basic format (Q-MIPS):

					
			1st rec   ----    ----    ---- *** Data is stored in 
			  |      ----    ----    ---- *** 1024 byte records for
			  |        .                            each channel
			  |        .                      (*** 256 byte trailer.)
			  |        .
			  |        .
			  V        .
			End rec  ----    ----    ---- ***
			         Chan    Chan2   ChanX  (*** = 256 byte trailer.)
			

QMIPS-style data files are stored in binary format. Each data file contains a 2048 byte file header followed by the sidescan-sonar data stream which consists of at least two channels of sidescan-sonar information and a 256 byte trailer. The trailer contains parameters relevant to the collected sidescan-sonar, such as altitude, file name, pitch, roll, date of collection, time of day, etc. Below is an example of the Q-MIPS file format. The header structure labeled isis_header is the 1024 byte portion that occurs once at the beginning of a file. The structure labeled isis_sonar is the 256 byte trailer which is placed at the end of every ping.

NOTE: The following example structures were designed for PC`s, which align on 16-bit boundaries. If you are using a 32- or 64-bit machine, alignment will have to be forced as these structures will be larger than 256 bytes on those machines. Creating a union of these structures with a 1024 or 256 byte (respectively) unsigned char buffer generally works. Also note the defines. The WORD define for RISC machines, or any 32-bit machine, should be changed to unsigned short.


Example QMIPS Sample Profile


Input parameters or comments are notated in green.

#define BYTE unsigned char
#define WORD unsigned int /* PC: 16 bit */
#define DWORD unsigned long /* PC: 32 bit */
STRUCT ISIS_HEADER
{
/* header header */
/*****************/
BYTE fileFormat; /* always decimal 50 */
BYTE reserved;
BYTE softwareRev[6];
BYTE spare1[20];

/* digitizer parameters */
/************************/
WORD sampleRate; /* in Ksamples/sec */
WORD numChannels; /* 1-4 */
WORD bitsPerPixel; /* 8 or 12 */
WORD pixelsPerChannelPerPing; /* (WORD COUNT) */
float speedOfSoundInWater; /* two way travel time in meters/sec */
float noLongerUsed; WORD asyncChannelNumber; /* if 8 no async chan. otherwise, asynchronous */
WORD numsonarChannels; /* 1 to 4 */
WORD ch1_processingAvailable;
WORD ch2_processingAvailable;
WORD ch3_processingAvailable;
WORD ch4_processingAvailable;

/* nav system parameters */

WORD timeDelay; /* tenths of seconds */
BYTE navSystemName[100];
BYTE projectionType[12];
BYTE spheriodType[12];
WORD zone;
float originLat;
float originLong;
float offsetLat;
float offsetLong;
WORD navUnits; /* 0 = meters */
/* 1 = feet */
/* 2 = yards */
/* 3 = degrees */
/* site parameters */

WORD diveNumber;
WORD blockNumber;
WORD trackNumber;
WORD runNumber;
BYTE spare4[100];

/* annotation */

BYTE operatorAnnotation[100];
BYTE sonarName[40];

/* sonar parameters */
/************************/

WORD triggerDirection; /* -1 is neg, 0 is equal, 1 isos */
DWORD triggerMagnitude;
float triggerWidth;
WORD ch1_frequency; /* in kHz */
WORD ch2_frequency;
WORD ch3_frequency;
WORD ch4_frequency;
float ch1_horizBeamAngle; /* degrees */
float ch2_horizBeamAngle;
float ch3_horizBeamAngle;
float ch4_horizBeamAngle;

/* name of this file */

char thisFileName[45];

/* which channels are half wave rectified */
/* -------------------------------------- */

WORD ch1_halfWaveRectify;
WORD ch2_halfWaveRectify;
WORD ch3_halfWaveRectify;
WORD ch4_halfWaveRectify;

/* left over */

BYTE spare5[486];
};
STRUCT ISIS_SONAR
{

/* time and date stamp */

BYTE day;
BYTE month;
BYTE year;
BYTE hour;
BYTE minute;
BYTE seconds;
WORD tenthsSeconds;

/* misc. info */

BYTE fileName[12];
WORD pingNumber;
WORD asyncByteOffset; /* when non-zero, indicates where */
/* sync (subbottom) channel starts */

BYTE spare1[12];

/* digitizer parameters */

BYTE spare2[4];
float timeInterval; /* multiplier (fraction) to make window in time of an uncorrected channel */
float APaltitude;/* altitude from array processor computed from water column */
WORD triggerChannel;
WORD altSource; /* which altitude to use:
0 = from telemetry
1-4 = channel 1-4 water column
5 = manual entry */

DWORD waterColumn;
DWORD triggerPeriod;
WORD ch_1signalDivisor;/* chan 1 signal divisor multiply by 100 */
float telemFishDepth;
float telemFishHeading;
float telemFishPitch;
float telemFishRoll;
float telemFishAlt; /* meters - comes from manual entry or */
/* towfish telem. */
BYTE spare3[10];

/* sonar parameters */

BYTE ch1_spare4[8];
WORD ch1_bandWidth; /* in kilohertz */
WORD ch1_sampleScheme;
WORD ch1_rangeScale; /* meters */
WORD ch1_gain;
WORD ch1_pulseWidth; /* microseconds */
WORD sampleRate;
WORD ch1_corrected; /* boolean */
BYTE ch2_spare4[8];
WORD ch2_bandWidth; /* in kilohertz */
WORD ch2_sampleScheme;
WORD ch2_rangeScale; /* meters */
WORD ch2_gain;
WORD ch2_pulseWidth; /* microseconds */
WORD ch2_spare;
WORD ch2_corrected; /* boolean */
BYTE ch3_spare4[8];
WORD ch3_bandWidth; /* in kilohertz */
WORD ch3_sampleScheme;
WORD ch3_rangeScale; /* meters */
WORD ch3_gain;
WORD ch3_pulseWidth; /* microseconds */
WORD ch3_spare;
WORD ch3_corrected; /* boolean */
BYTE ch4_spare4[8];
WORD ch4_bandWidth; /* in kilohertz */
WORD ch4_sampleScheme;
WORD ch4_rangeScale;/* meters */
WORD ch4_gain;
WORD ch4_pulseWidth; /* microseconds */
WORD ch4_spare;
WORD ch4_corrected;/* boolean */

/* nav system parameters */

BYTE nav_sensor[4]; /* sensor code */
WORD eventNumber;
BYTE station_1_code; /* station code data as */
/* BYTE station_2_code; */
BYTE station_3_code;
BYTE station_4_code;
float range_1;/* ranges to the nav stations/*
float range_2;
float range_3;
float range_4;

/* #define nav_telemetry.latitude *((double) & nav_telemetry.navEasting) */
/* re-use easting and northing variable space for latitude. */
/* If a system collects XY data pairs, then the navEasting and navNorthing fields would been commented and set to floats.*/

/*float navEasting; /* (x) in meters */
/*float navNorthing; /* (y) in meters */
double navEasting; /* USGS uses lat & lon */
float navDepth; /* (z) in meters */
float navRms; /* root mean square -- quality factor of nav solution */
float navFishHeading; /* degrees */
float navFishSpeed;/* knots */
float navShipGyro;/* degrees */

DWORD navFixNumber; /* sequential value */
double navLongitude; /* double precision */
BYTE spare6[2];/* alphanumeric */
BYTE navFixHour;
BYTE navFixMinute;
BYTE navFixSeconds;
BYTE navSpare;

WORD julianDay;/* cable out */
WORD layback;
};


Skip Navigation

Accessibility FOIA Privacy Policies and Notices

Take Pride in America logo USAGov logo U.S. Department of the Interior | U.S. Geological Survey

URL: woodshole.er.usgs.gov/operations/sfmapping/qmips.htm
Page Contact Information: WHSC Webmaster
Page Last Modified: Wednesday, 19-Dec-2007 12:47:26 EST