DATA ACQUISITION EQUIPMENT
U.S. GEOLOGICAL SURVEY
WOODS HOLE FIELD CENTER (WHFC)


Sidescan-Sonar Towfish:

sis1000.jpg (238580 bytes)   Datasonics model SIS-1000 (100 kHz).

Data Collection Platform:

isisfur.jpg (314461 bytes)  Triton Elics International ISIS(TM)

Windows 95 based Pentium machine
Saves sidescan-sonar data via network interface or on an Exabyte 8200 tape subsystem
Will accept up to 5 channels of data
Serial I/O ports (i.e., for navigation)
Parallel (Centronics) ports for printing the sidescan-sonar data
Array processor handling the digitized sidescan-sonar signal
12 bit analog to digital converter OR:
DSP card for digital signals

The topside data acquisition computer the USGS uses to collect and store the digital signal is the ISISTM system, which runs under the Windows 95 operating system and is built by Triton Elics International, Inc., Watsonville, CA using a 12-bit (72 db effective dynamic range) A/D converter in conjunction with an array processor. ISISTM is capable of digitizing up to four channels of information at aggregate rates of up to 750 kHz, thus preserving the content and the dynamic range of the sidescan-sonar signal. An installed Digital Signal Processing (DSP) board is an alternative to handling signals digitized at the towfish (SIS-1000). Port and starboard sidescan-sonar data are displayed in real-time on a high-resolution color display (1280 x 1024 pixels). Telemetry from navigation systems and the towfish, including full towfish attitude information, is displayed in separate windows. The backup data storage media used is 8 mm Exabyte tape.  The USGS WHFC is currently recording directly to disk on separate computer systems using the Network File System (NFS) protocol and archiving the data to CD-ROM.

Sidescan-Sonar files collected using the ISISTM system have the following 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.)

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. The isis header and isis sonar formats for the ISIS are described on the next pages.


   Return to the data page

OR, Browse the Q-MIPS file format...


Q-MIPS DATA FILE FORMAT

The header structure labelled 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: These 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.

#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;

};

   Return to the data page


Return to USGS Cruise ALPH98013 home page