Seismic data processing


Processing of seismic data is divided into two parts: Real-time QC display, and ordinary processing. At this stage only real-time processing is accounted for. Ordinary processing is complicated by the fact that geometry setting av SEGY data must first deal with the effect of an irregular line shape as the ship navigates icecovered waters.

GEODE seismograph

The acquisition system comprises two GEODE seismographs. One takes data from the 24-channel streamer and the other from the sonobuoys. The GEODES are either operated as two independent units, controlled by two laptops, or in a networked mode, controlled by a single laptop (determined later). Data is stored on the laptop(s), which run(s) Win XP. Navigation data is received via serial RS-232 from a dedicated survey computer. Nav data is stored in a separate file, alternating with shot info generated by the GEODE laptop itself (like FLDR SEGY parameter).

The GEODE is a pretty nifty piece of engineering. Is has excellent specifications and rugged packaging. The small size makes it easy to handle. The laptop Windows controlling software is intuitive and provides the features needed - with one exception, and that is the possibility to have various on-line QC displays. In particular, a near trace plot is needed. If we could transfer last shot data over network to another Linux box we could harness the power of Seismic Unix to make a real-time near trace plot. So we have written a small Python script that monitors a specified directory, and reports via UDP network broadcast telegrams that data are available. A script on a Linux box listens for these UDP telegrams and fetches data when they are ready.

This is a screenshot of the GEODE laptop where the Python script is running in a Command Prompt window on the right. The GEODE was triggered and data was written to file 180.sgy (click to enlarge).

Screenshot of Python script monitoring GEODE laptop data directory and announcing changes via UDP broadcast telegrams on port 25000. Click to enlarge.

The screenshot shows that the SEGY file 180.sgy increased in size by 8672 bytes. In order to facilitate later processing by Seismic Unix, the beginning reel header (3600 bytes) of this file is extracted and inserted in front of last shot data, increasing total package size to 8672+3600=12272 bytes. The program only looks for changes in SEGY files; the file extension must be *.sgy (not case sensitive). Here you can download the GEODE file monitoring and network file transfer program. The program contains a Constants section that specifies monitored data directory, UDP (and TCP) port number, and SEGY file extension. Alter these values by editing the program in IDLE - the Python IDE that is included in the Windows version of Python - or in any text editor.

Constants section in GEODE file monitoring script. Edit these to suit your system.


Linux box with on-line Seismic Unix QC plots

The Linux box has Seismic Unix installed. A script listens for UDP broadcast telegrams and fetches data when available. Data is written to two files. One is called last-shot.su and keeps, as the name implies, data from the last GEODE shot. The other holds accumulated data, and the file name is identical to the file name on the GEODE laptop, except that file extension is *.su (it is in Seismic Unix format, see description here) instead of the original *.sgy. In this way you also get an automatic back-up of GEODE laptop files.

The script, called read_GEODE.py, is documented here.

After file storage is completed, a script called qc.sh is executed. This script uses Seismic Unix to make plots of interest. Below is an example of a Linux real-time QC screen produced by qc.sh. A sinus signal of varying frequency is injected into ch1 of the GEODE signal cable. Click to enlarge.

Fig. 1. Real-time QC display of GEODE data, using Seismic Unix (click to enlarge).

Four plots are shown:

  1. To the left, a near trace plot of channel no. 1.
  2. In the middle, an amplitude vs. time plot.
  3. To the right, a so called Gabor spectrogram is shown. It produces a three-dimensional plot of signal power versus frequency and time.
  4. Lower right, frequency plot of ch.1 signal.

Below is a listing of qc.sh file - download script here. It must be mentioned that the $LOGFILE variable contains the name of the accumulated data file (in Seismic Unix format, see description here), and the $FILE variable holds the name of a file that contains data from the last shot. $CHANNEL is the channel number to watch. Notice how both size and position of each #plot window is determined (e.g. xbox=850 ybox=10 wbox=410 hbox=460). At the end there is a plot commented out, if you want to make a frequency diagram of all channels versus shot number. A similar QC display, showing "real" data from one-channel mini-streamer, is shown here (from a regional OBS survey, seismic source consisted of several large airguns - that's why the signature is terrible ....)

Listing of qc.sh. Download by right clicking here

    1 #!/bin/sh
    2 #=====================================================================================
    3 #        A r c t i c   O c e a n   T r a n s e c t   -   2 0 0 5
    4 #
    5 #                    U S C G   H E A L E Y
    6 #
    7 # THIS PROGRAM IS CALLED FROM read_GEODE.py - ONLY EDIT,
    8 # DO NOT EXECUTE
    9 #
   10 # The on-line QC script is executed after new SEGY data has
   11 # been received by the read_GEODE.py script.
   12 #
   13 # Input : One parameter: Name of file that holds accumulated data.
   14 #
   15 # Tips:
   16 #        * Don't insert comments in multi-line commands!
   17 #        * -geometry 500x200+100+10  means:
   18 #           window size     = 500 px width, 200 px height
   19 #            -"-   position = 100 px X-coordinate on screen
   20 #                              10 px Y-coordinate on screen
   21 #        * Trace headers used by GEODE. Example of surange output
   22 #          from GEOLDE *.sgy file:
   23 #          ............................................................
   24 #          olem@linux:~/www/Healy-2005/software/QC> surange < 180.su
   25 #          116 traces:
   26 #           fldr=(181,238)  tracf=(1,2)  trid=1 nvs=1 nhs=1
   27 #           scalco=1 gx=(0,1)  counit=1 ns=1024 dt=1000
   28 #           year=5 day=203 hour=(10,12)  minute=(0,59)  sec=(0,58)
   29 #           timbas=1
   30 #          ............................................................
   31 #          fldr   = Field record counter (= FFID)
   32 #          tracf  = Trace within field record
   33 #          trid   = Trace identification code; 1 = seismic data
   34 #          nvs    = Number of vertically summed traces yielding this trace.
   35 #          nhs    = Number of horizontally stacked traced yielding this trace.
   36 #          scalco = Scalar for coordinates (+ = multiplier, - = divisor)
   37 #          gx     = X receiver group coordinate.
   38 #          counit = Coordinate units (1 = length in meters or feet, 2 = arc seconds).
   39 #          ns     = Number of samples in this trace.
   40 #          dt     = Sample interval of this trace in microseconds.
   41 #          year, day, hour, minute, sec: OK
   42 #          timbas = Time basis (1 = local, 2 = GMT, 3 = other).
   43 #          Ref.: http://www2.geo.uib.no/seismic-unix/
   44 #
   45 #
   46 # University of Bergen, Dept. of Earth Science, Bergen, Norway
   47 # http://www2.geo.uib.no/Healy-2005
   48 #
   49 # July 22, 2005 - O. Meyer
   50 #=====================================================================================
   51 
   52 
   53 # Constants used
   54 
   55 CHANNEL=1                   # Trace (in each shot) to display
   56 NO_OF_CHANNELS=2            # Total number of channels in Seismic Unix data files
   57 FILE="./last_shot.su"       # Last shot file (name by convention)
   58 LOGFILE=$1                  # Parameter on invocation line: File name, accumulated data
   59 
   60 # First get rid of old plots
   61 #   zap ximage              # Use these on RedHat
   62 #   zap xgraph
   63 #   killall gnuplot_x11
   64     killall xgraph          # Use these on Suse Linux
   65     killall ximage
   66 
   67 
   68 #--------------------------------------------------------------------------------------------------------------
   69 #           Process last shot : Plot amplitude vs. time for selected channel
   70 #--------------------------------------------------------------------------------------------------------------
   71 
   72 suwind key=tracf min=$CHANNEL max=$CHANNEL < $FILE | \
   73   suxgraph style=seismic -geometry 280x470+665+5 \
   74     grid1=dot grid2=dot \
   75     title="GEODE ch=$CHANNEL time signal" \
   76     label1="TWT [s]" \
   77     label2="Amplitude" \
   78     windowtitle="Time signal, ch=$CHANNEL" &
   79 
   80 
   81 #--------------------------------------------------------------------------------------------------------------
   82 #           Process last shot : Plot Gabor spectrogram (instantanous frequency)
   83 #--------------------------------------------------------------------------------------------------------------
   84 
   85 #suwind key=tracf min=$CHANNEL max=$CHANNEL < $FILE | \
   86     #sugabor < $FILE | suximage xbox=310 ybox=5 wbox=300 hbox=550 cmap=hsv6 x2end=200 \
   87 suwind key=tracf min=$CHANNEL max=$CHANNEL < $FILE | \
   88   sugabor | suximage xbox=990 ybox=5 wbox=330 hbox=470 cmap=hsv6 \
   89       x2end=150 \
   90       label1="TWT [s]" label2="Frequency [Hz]" \
   91       title="Gabor spectrogram, ch=$CHANNEL" \
   92       windowtitle="Gabor spectrogram" &
   93 
   94 
   95 #--------------------------------------------------------------------------------------------------------------
   96 #           Process last shot : Plot frequency spectrum on selected channel
   97 #--------------------------------------------------------------------------------------------------------------
   98 
   99 suwind key=tracf min=$CHANNEL max=$CHANNEL < $FILE | \
  100   sufft | suamp mode=amp | \
  101   suop op=db | \
  102   suxgraph style=normal -geometry 610x200+665+510 \
  103     x1end=250 \
  104     grid1=dot grid2=dot \
  105     title="GEODE ch $CHANNEL spectrum" \
  106     label1="Frequency [Hz]" \
  107     label2="Amplitude [dB]" \
  108     windowtitle="Last shot frequency spectrum, ch=$CHANNEL" &
  109 
  110 
  111 #--------------------------------------------------------------------------------------------------------------
  112 #           Process whole data file : "Near-trace plot"
  113 #--------------------------------------------------------------------------------------------------------------
  114 
  115 suwind key=tracf j=$NO_OF_CHANNELS s=$CHANNEL < $LOGFILE | \
  116     suximage perc=95 xbox=5 ybox=5 wbox=655 hbox=705 cmap=hsv0 \
  117     label1="Two-way traveltime [s]" label2="Shot no." windowtitle="Near trace plot, ch=$CHANNEL, file=$LOGFILE"  &
  118 
  119 
  120 #--------------------------------------------------------------------------------------------------------------
  121 #           Process whole data file : Frequency spectrum
  122 #--------------------------------------------------------------------------------------------------------------
  123 
  124 #suspecfx < $LOGFILE | \
  125 #   suximage xbox=5 ybox=670 wbox=690 hbox=250 cmap=hsv6 x1end=200 \
  126 #   label1="Frequency [Hz]" label2="Trace no." windowtitle="Frequency spectrum, file=$LOGFILE" &
  127 
  128 #---------------------------------------------------------------------------------------------------------------
  129 #         E N D   O F   S C R I P T
  130 #----------------------------------------------------------------------------------------------------------------
  131 exit    # this must be the last command
  132 

Listing of qc.sh. Download script by right-clicking here.

Please send bug reports or comments to .


Links

 


University of Bergen
Dept. of Earth Science (IFG)
Allé gt. 41, N-5007 Bergen, Norway
Tel: (+47) 5558 3600