GEO 365N/384S Seismic Data Processing Computational Assignment 3 |
In this section, we will apply an improved method of stacking (Fowler, 1988) to the same dataset.
scons -cto remove (clean) previously generated files.
stacks
Figure 8. Viking Graben dataset after NMO stacking with an ensemble of constant velocities. |
---|
To generate the stacks and display them on your screen, run
scons stacks.view
The map defined by equation (1) is shown in Figure 9. To display it, run
scons map.view
map
Figure 9. Fourier-domain velocity map used in Fowler's DMO method. | |
---|---|
scons dmo.viewCompare the results by running
sfpen Fig/dmo.vpl Fig/stacks.vplDo you notice any improvements?
dmo
Figure 10. Viking Graben dataset after DMO stacking with an ensemble of constant velocities. |
---|
To pick the DMO-corrected velocity automatically from the envelope (Figure 11), run
scons vpick.view
vpick
Figure 11. Migration velocity picked automatically from DMO stacks. |
---|
Run
scons slice.viewto see the result (Figure 12.)
slice
Figure 12. DMO stack generated by slicing the constant-velocity stacks. |
---|
scons envelope.viewto display the result (Figure 13.)
Modify the SConstruct file to try several other CMP locations and select one that shows the most interesting change.
envelope
Figure 13. Comparison of velocity analysis before and after DMO at a selected CMP location. | |
---|---|
from rsf.proj import * # Download pre-processed CMP gathers # from the Viking Graben dataset Fetch('paracdp.segy','viking') # Convert to RSF Flow('paracdp tparacdp','paracdp.segy', 'segyread tfile=${TARGETS[1]}') # Convert to CDP gathers, time-power gain and high-pass filter Flow('cmps','paracdp', ''' intbin xk=cdpt yk=cdp | window max1=4 | pow pow1=2 | bandpass flo=5 | put label3=Midpoint unit3=km o3=1.619 d3=0.0125 ''') # Extract offsets Flow('offsets mask','tparacdp', ''' headermath output=offset | intbin head=$SOURCE xk=cdpt yk=cdp mask=${TARGETS[1]} | dd type=float | scale dscale=0.001 ''') # Window bad traces Flow('maskbad','cmps', 'mul $SOURCE | stack axis=1 | mask min=1e-20') Flow('mask2','maskbad mask','spray axis=1 n=1 | mul ${SOURCES[1]}') # NMO stack with an ensemble of constant velocities Flow('stacks','cmps offsets mask2', ''' stacks half=n v0=1.4 nv=121 dv=0.02 offset=${SOURCES[1]} mask=${SOURCES[2]} ''',split=[3,'omp']) # Taper midpoint Flow('stackst','stacks','costaper nw3=100') Result('stacks','stackst', ''' byte gainpanel=all | transp plane=23 memsize=5000 | grey3 frame1=500 frame2=100 frame3=30 point1=0.8 point2=0.8 title="Constant-Velocity Stacks" label3=Velocity unit3=km/s ''') # Apply double Fourier transform (cosine transform) Flow('cosft','stackst','pad n3=2401 | cosft sign1=1 sign3=1') # Transpose f-v-k to v-f-k Flow('transp','cosft','transp',split=[3,'omp']) # Fowler DMO: mapping velocities Flow('map','transp', ''' math output="x1/sqrt(1+0.25*x3*x3*x1*x1/(x2*x2))" | cut n2=1 ''') Result('map', ''' byte gainpanel=all allpos=y bar=bar.rsf | grey3 title="Fowler Map" label1=Velocity unit1=km/s label3=Wavenumber barlabel=Velocity barunit=km/s frame1=50 frame2=500 frame3=1000 color=x scalebar=y ''') Flow('fowler','transp map','iwarp warp=${SOURCES[1]} | transp', split=[3,'omp']) # Inverse Fourier transform Flow('dmo','fowler','cosft sign1=-1 sign3=-1 | window n3=2142') Result('dmo', ''' byte gainpanel=all | transp plane=23 memsize=5000 | grey3 frame1=500 frame2=100 frame3=30 point1=0.8 point2=0.8 title="Constant-Velocity DMO Stacks" label3=Velocity unit3=km/s ''') # Compute envelope for picking Flow('envelope','dmo','envelope | scale axis=2',split=[3,'omp']) # Pick velocity Flow('vpick','envelope','pick rect1=25 rect2=50 vel0=1.45') Result('vpick', ''' grey mean=y color=j scalebar=y barreverse=y barunit=km/s title="Picked Migration Velocity" label2="CMP Number" unit2= ''') # Take a slice Flow('slice','dmo vpick','slice pick=${SOURCES[1]}') Result('slice','grey title="Viking Graben DMO Stack" ') # Check one CMP location p = 1500 # !!! MODIFY ME !!! Flow('before','stackst','window n3=1 f3=%d | envelope' % p) Flow('after','envelope','window n3=1 f3=%d' % p) for case in ('before','after'): Plot(case, ''' window max1=3.5 | grey color=j allpos=y title="%s DMO" label2=Velocity unit2=km/s ''' % case.capitalize()) Flow('vpick1','vpick','window n2=1 f2=%d' % p) Plot('vpick1', ''' graph yreverse=y transp=y plotcol=7 plotfat=7 pad=n min2=1.4 max2=3.8 wantaxis=n wanttitle=n ''') Plot('after2','after vpick1','Overlay') Result('envelope','before after2','SideBySideAniso') End() |
GEO 365N/384S Seismic Data Processing Computational Assignment 3 |