![]() |
![]() |
![]() |
![]() | GEO 365N/384S Seismic Data Processing Computational Assignment 5 | ![]() |
![]() |
In this part of the assignment, we will process the Viking Graben data to attenuate multiple reflections using the parabolic Radon transform.
scons -cto remove (clean) previously generated files.
scons cmps.viewYou can also improve the results using your work from Assignment 4.
![]() |
---|
vscan1
Figure 4. Initial velocity analysis. From left to right: selected CMP gather, gather after muting first arrivals, semblance scan with the picked primary velocity trend. |
![]() ![]() ![]() |
scons vscan1.viewAs evident from the semblance scan, the gather is heavily contaminated by multiples, including water-layer multiples and surface-related peglegs. For further processing, we will attempt to pick the primary velocity trend, using muting and automatic picking.
![]() |
---|
parab
Figure 5. Applying the parabolic Radon transform. From left to right: NMO using the picked velocity trend, parabolic Radon transform, data reconstructed by the inverse transform. |
![]() ![]() ![]() |
scons parab.viewAs with the linear Radon, the transform is implemented in the temporal Fourier domain and makes use of the Toeplitz structure to accelerate least-squares inversion.
![]() |
---|
cut
Figure 6. Isolating signal in the parabolic Radon domain. From left to right: parabolic Radon transform, isolated nearly-flat events, signal reconstructed by the inverse transform. |
![]() ![]() ![]() |
scons cut.view
![]() ![]() |
---|
primary,pvscan1
Figure 7. Separating signal (primary reflections) and noise (multiple reflections). (a) From left to right: input CMP gather, estimated primaries, estimated multiples. (b) Velocity analysis using semblance scan. From left to right: using all data, using estimated primaries, using estimated multiples. |
![]() ![]() ![]() ![]() ![]() |
scons primary.view pvscan1.view
from rsf.proj import * # Download Viking Graben data Fetch('seismic.segy','viking') #Fetch('seismic.segy','VikingGrabbenLine12', # top='/home/p1/seismic_datasets/SeismicProcessingClass', # server='local') # Convert from SEGY to RSF Flow('viking tviking viking.asc viking.bin','seismic.segy', ''' segyread tfile=${TARGETS[1]} hfile=${TARGETS[2]} bfile=${TARGETS[3]} ''') # Far-field wavelet Fetch('FarField.dat','Mobil_Avo_Viking_Graben_Line_12', top='open.source.geoscience/open_data', server='http://s3.amazonaws.com') # Convert from ASCII to RSF Flow('wavelet','FarField.dat', ''' echo in=$SOURCE data_format=ascii_float n1=500 o1=0 d1=0.0008 label1=Time unit1=s n2=1 | dd form=native ''') # Subsample to data sampling Flow('wavelet4','wavelet','window j1=5 | pad n1=1500') prog = Program('convolve.c') convolve = str(prog[0]) # Estimate PEF by iterative least-squares inversion Flow('filter0',None,'spike n1=100 k1=1') Flow('filter',['wavelet4',convolve,'filter0'], ''' conjgrad ./${SOURCES[1]} nf=100 data=${SOURCES[0]} niter=100 mod=${SOURCES[2]} ''') # Wavelet deconvolution Flow('wdecon',['filter','wavelet4',convolve], ''' ./${SOURCES[2]} data=${SOURCES[1]} adj=n | add ${SOURCES[1]} scale=-1,1 | window n1=100 ''') # Process all traces Flow('decon',['filter','viking',convolve], ''' ./${SOURCES[2]} data=${SOURCES[1]} adj=n | add ${SOURCES[1]} scale=-1,1 ''') # Average trace amplitude Flow('arms','decon', 'mul $SOURCE | stack axis=1 | math output="log(input)" ') # shot/offset indeces: fldr and tracf Flow('index','tviking','window n1=2 f1=2 | transp') Flow('fldr tracf scarms','arms index', ''' sc index=${SOURCES[1]} out2=${TARGETS[1]} pred=${TARGETS[2]} niter=10 ''') # Apply to all traces Flow('ampl','scarms', ''' math output="exp(-input/2)" | spray axis=1 n=1500 d=0.004 o=0 ''') Flow('adecon','decon ampl','mul ${SOURCES[1]}') # Convert to CDP gathers, time-power gain Flow('cmps','adecon', ''' intbin xk=cdpt yk=cdp | window max1=4 | pow pow1=2 ''') Result('cmps', ''' byte gainpanel=all | transp plane=23 memsize=5000 | grey3 frame1=750 frame2=1000 frame3=20 point1=0.8 point2=0.8 title="CMP Gathers" label2="CMP Number" ''') # Extract offsets Flow('offsets mask','tviking', ''' headermath output=offset | intbin head=$SOURCE xk=cdpt yk=cdp mask=${TARGETS[1]} | dd type=float | scale dscale=0.001 ''') # Extract one CMP gather ######################## Flow('mask1','mask','window n3=1 f3=1200 squeeze=n') Flow('cmp','cmps mask1', 'window n3=1 f3=1200 | headerwindow mask=${SOURCES[1]}') Plot('cmp','grey title="CMP gather" clip=8.66') Flow('offset','offsets mask1', ''' window n3=1 f3=1200 squeeze=n | headerwindow mask=${SOURCES[1]} ''') # Mute Flow('mute','cmp', ''' reverse which=2 | put label2=Offset unit2=km o2=0.287 d2=0.05 | mutter half=n v0=1.2 ''') Plot('mute','grey title="Mute first arrival" clip=8.66') # Velocity scan Flow('vscan1','mute', ''' vscan semblance=y half=n v0=1.2 nv=131 dv=0.02 ''') Plot('vscan1', 'grey color=j allpos=y title="Semblance scan" unit2=km/s') # Automatic pick Flow('vpick1','vscan1', ''' mutter inner=y x0=1.4 half=n v0=0.45 t0=0.5 | pick rect1=50 vel0=1.5 ''') Plot('vpick1', ''' graph yreverse=y transp=y plotcol=7 plotfat=7 pad=n min2=1.2 max2=3.8 wantaxis=n wanttitle=n ''') Plot('vscan2','vscan1 vpick1','Overlay') Result('vscan1','cmp mute vscan2','SideBySideAniso') Flow('nmo','mute vpick1','nmo half=n velocity=${SOURCES[1]}') Plot('nmo','grey title="NMO with primary velocity" ') # Parabolic Radon transform Flow('radon','nmo', 'radon adj=y spk=n parab=y p0=-0.1 dp=0.002 np=151') Plot('radon', ''' grey title="Parabolic Radon transform" label2=Curvature unit2="s/km2_" ''') Flow('inv','radon','radon adj=n parab=y nx=60 dx=0.05 ox=0.287') Plot('inv', 'grey title="Inverse parabolic Radon transform" clip=8.66') Result('parab','nmo radon inv','SideBySideAniso') qmin=0.01 # minimum curvature for noise tmin=0.75 # minimum time for noise Flow('cut','radon','cut min2=%g min1=%g' % (qmin,tmin)) Plot('cut', ''' grey title="Radon transform cut" label2=Curvature unit2="s/km2_" ''') Flow('signal','cut','radon adj=n parab=y nx=60 dx=0.05 ox=0.287') Plot('signal','grey title="Radon transform signal" ') Result('cut','radon cut signal','SideBySideAniso') # Apply inverse NMO Flow('primary','signal vpick1', 'inmo half=n velocity=${SOURCES[1]}') Plot('primary','grey title="Demultiple" clip=8.66') Flow('multiples','mute primary','add scale=1,-1 ${SOURCES[1]}') Plot('multiples','grey title="Multiples" clip=8.66') Result('primary','mute primary multiples','SideBySideAniso') # Velocity scan Flow('pvscan1','primary', ''' vscan semblance=y half=n v0=1.2 nv=131 dv=0.02 ''') Plot('pvscan1', 'grey color=j allpos=y title="Primary semblance scan" ') Flow('mvscan1','multiples', ''' vscan semblance=y half=n v0=1.2 nv=131 dv=0.02 ''') Plot('mvscan1', 'grey color=j allpos=y title="Multiples semblance scan" ') Result('pvscan1','vscan1 pvscan1 mvscan1','SideBySideAniso') End() |
![]() |
![]() |
![]() |
![]() | GEO 365N/384S Seismic Data Processing Computational Assignment 5 | ![]() |
![]() |