Chapter 4 Moveout, velocity, and stacking
Chapter 4Moveout, velocity, and stacking
Interpolation
1.5 4.5 7.5 10.50 12
From-y
To-x0 12
1 3 5 7 9 11
Interpolation
1.5 4.5 7.5 10.50 12
From-y
To-x0 12
1 3 5 7 9 11
Interpolation
1.5 4.5 7.5 10.50 12
From-y
To-x0 12
1 3 5 7 9 11y1
y2
y3
y4
y5
y6
x1
x2
x3
x4
1
1
1
1
1
1
=
Interpolation: Different set of points
2 2.5 9,5 120 12
From-y
To-x0 12
1 3 5 7 9 11
Interpolation: Loop over input
2 2.5 9.5 120 12
From-y
To-x0 12
1 3 5 7 9 11y1
y2
y3
y4
y5
y6
x1
x2
x3
x4
1 1
1
1
=
n=size(x,1)for i=1:n j=closest_y(..) y(j)=y(j)+x(i)end
Note how not all output are filledand some are filled twice
Interpolation: Loop over input
2 2.5 9.5 120 12
0 12
1 3 5 7 9 11y1
y2
y3
y4
y5
y6
x1
x2
x3
x4
1 1
1
1
=
Note how not all output are filledand some are filled twice
1
2
3
4
5
6
7
8
9
10
11
12
Function
2
2.5
9.5
12
0
5.5
12
x y
Interpolation: Loop over output
2 2.5 9.5 120 12
From-y
To-x0 12
1 3 5 7 9 11y1
y2
y3
y4
y5
y6
x1
x2
x3
x4
1
1
1
1
1
1
=
n=size(x,1)for i=1:n j=closest_x(..) y(i)=y(i)+x(j)end
Interpolation: Loop over output
2 2.5 9.5 120 12
From-y
To-x0 12
1 3 5 7 9 11y1
y2
y3
y4
y5
y6
x1
x2
x3
x4
1
1 1
1 1
1
=
n=size(x,1)for i=1:n j=closest_x(..) y(i)=y(i)+x(j)end
Interpolation: Loop over output
2 2.5 9.5 120 12
0 12
1 3 5 7 9 11y1
y2
y3
y4
y5
y6
x1
x2
x3
x4
1
1
1
1
1
1
=
1
2
3
4
5
6
7
8
9
10
11
12
Function
2
2.5
9.\5
12
1
3
3
9.5
9.5
12
x y
Interpolation: Loop over output (adjoint)
2 2.5 9.5 120 12
From-y
To-x0 12
1 3 5 7 9 11y1
y2
y3
y4
y5
y6
x1
x2
x3
x4
1
1 1
1 1
1
=
n=size(x,1)for i=1:n j=closest_x(..) x(i)=x(i)+y(j)end
Note how the adjoint is now summing two points
Interpolation: Loop over output (adjoint)
2 2.5 9.5 120 12
0 12
1 3 5 7 9 11y1
y2
y3
y4
y5
y6
x1
x2
x3
x4
1
1 1
1 1
1
=
Note how the adjoint is now summing two points
1
2
3
4
5
6
7
8
9
10
11
12
Function
1
8
16
11
1
3
5
7
9
11
xy
Formal inversion
Map to y
Least squares inverse
Check
y = Bxx = (B!B)"1B!y
x = (B!B)"1B!Bx = Ix = x
Interpolation
1.5 4.5 7.5 10.50 12
From-y
To-x0 12
1 3 5 7 9 11y1
y2
y3
y4
y5
y6
x1
x2
x3
x4
1
1
1
1
1
1
=
By x
Interpolation
1.5 4.5 7.5 10.50 12
0 12
1 3 5 7 9 111
1
1
1
1
1
1 1
1
1 1
1
x = (BB!)"1B!y
B’B
=
2
1
2
1
B’B
0.5
1
0.5
1
Inverse(B’B)
Interpolation
1.5 4.5 7.5 10.50 12
0 12
1 3 5 7 9 11
1 1
1
1 1
1
x = (BB!)"1B!y
0.5
1
0.5
1
y1
y2
y3
y4
y5
y6
x1
x2
x3
x4
=
NMO: Common Midpoint gather
What we recordz
x position
t
offset
NMO: Common Midpoint gather
What we wantz
x position
t
offset
NMO: Simple geometry
h
z !z2 + h2
Text0 h
2z
v
2!
z2 + h2
v
v2t2 = z2 + h2
t2 = !2 +h2
v2
NMO Code and matrixd1
d2
d3
d4
d5
d6
d7
d8
d9
d10
111
11
11
11
=
dNm
m1
m2
m3
m4
m5
m6
m7
m8
m9
m10
zztt
tau
tsubrotine nmo(adj, add, slow,h, t0,dt, n,zz,tt) logical :: adj,add (forward, back/ add to output) real :: slow(:),h !slowness (1./velocity) and offset real :: t0,dt !sampling of the time axis integer :: nt !number of samples time axis real :: zz(:),tt(:) ! data with/without moveout real :: z,hs,t !tau, x/v, moveout out time integer :: iz,it !non-moved/moved out time call adjnull(adj,add,tt,zz) !possible zero output do iz=1,nz ! loop over nmoed (tau) space z=t0+dt*(iz-1) !nmoed time hs=h*slow(iz) !offset/velocity t=sqrt(z*z+hs*hs) ! travetlime at the offset it=1.5+(t-t0)/dt !nearest time sample if(it<nt) then !are we within trace range if(adj) then !creating moveout tt(it)=tt(it)+zz(iz) else !doing nmo zz(iz)=zz(iz)+tt(it) end if end if end doend subroutine
NMO Forwardd1
d2
d3
d4
d5
d6
d7
d8
d9
d10
1 1 11 1
1 11
1
=
d N m
m1
m2
m3
m4
m5
m6
m7
m8
m9
m10
zz tt
subrotine nmo(adj, add, slow,h, t0,dt, n,zz,tt) logical :: adj,add (forward, back/ add to output) real :: slow(:),h !slowness (1./velocity) and offset real :: t0,dt !sampling of the time axis integer :: nt !number of samples time axis real :: zz(:),tt(:) ! data with/without moveout real :: z,hs,t !tau, x/v, moveout out time integer :: iz,it !non-moved/moved out time call adjnull(adj,add,tt,zz) !possible zero output do iz=1,nz ! loop over nmoed (tau) space z=t0+dt*(iz-1) !nmoed time hs=h*slow(iz) !offset/velocity t=sqrt(z*z+hs*hs) ! travetlime at the offset it=1.5+(t-t0)/dt !nearest time sample if(it<nt) then !are we within trace range if(adj) then !creating moveout tt(it)=tt(it)+zz(iz) else !doing nmo zz(iz)=zz(iz)+tt(it) end if end if end doend subroutine
tau
t
NMO Forwardd1
d2
d3
d4
d5
d6
d7
d8
d9
d10
1 1 11 1
1 11
1
=
d N m
m1
m2
m3
m4
m5
m6
m7
m8
m9
m10
zz tt
What does a nearer offset look like?
tau
t
subrotine nmo(adj, add, slow,h, t0,dt, n,zz,tt) logical :: adj,add (forward, back/ add to output) real :: slow(:),h !slowness (1./velocity) and offset real :: t0,dt !sampling of the time axis integer :: nt !number of samples time axis real :: zz(:),tt(:) ! data with/without moveout real :: z,hs,t !tau, x/v, moveout out time integer :: iz,it !non-moved/moved out time call adjnull(adj,add,tt,zz) !possible zero output do iz=1,nz ! loop over nmoed (tau) space z=t0+dt*(iz-1) !nmoed time hs=h*slow(iz) !offset/velocity t=sqrt(z*z+hs*hs) ! travetlime at the offset it=1.5+(t-t0)/dt !nearest time sample if(it<nt) then !are we within trace range if(adj) then !creating moveout tt(it)=tt(it)+zz(iz) else !doing nmo zz(iz)=zz(iz)+tt(it) end if end if end doend subroutine
NMO Nearer offsetd1
d2
d3
d4
d5
d6
d7
d8
d9
d10
1 11 1
11
11
11
=
d N m
m1
m2
m3
m4
m5
m6
m7
m8
m9
m10
zz tt
tau
t
subrotine nmo(adj, add, slow,h, t0,dt, n,zz,tt) logical :: adj,add (forward, back/ add to output) real :: slow(:),h !slowness (1./velocity) and offset real :: t0,dt !sampling of the time axis integer :: nt !number of samples time axis real :: zz(:),tt(:) ! data with/without moveout real :: z,hs,t !tau, x/v, moveout out time integer :: iz,it !non-moved/moved out time call adjnull(adj,add,tt,zz) !possible zero output do iz=1,nz ! loop over nmoed (tau) space z=t0+dt*(iz-1) !nmoed time hs=h*slow(iz) !offset/velocity t=sqrt(z*z+hs*hs) ! travetlime at the offset it=1.5+(t-t0)/dt !nearest time sample if(it<nt) then !are we within trace range if(adj) then !creating moveout tt(it)=tt(it)+zz(iz) else !doing nmo zz(iz)=zz(iz)+tt(it) end if end if end doend subroutine
NMO Nearer offsetd1
d2
d3
d4
d5
d6
d7
d8
d9
d10
1 11 1
11
11
11
=
d N m
m1
m2
m3
m4
m5
m6
m7
m8
m9
m10
zz tt
First sample moves up and more diagonal
Note we have created a linear operator
tau
t
subrotine nmo(adj, add, slow,h, t0,dt, n,zz,tt) logical :: adj,add (forward, back/ add to output) real :: slow(:),h !slowness (1./velocity) and offset real :: t0,dt !sampling of the time axis integer :: nt !number of samples time axis real :: zz(:),tt(:) ! data with/without moveout real :: z,hs,t !tau, x/v, moveout out time integer :: iz,it !non-moved/moved out time call adjnull(adj,add,tt,zz) !possible zero output do iz=1,nz ! loop over nmoed (tau) space z=t0+dt*(iz-1) !nmoed time hs=h*slow(iz) !offset/velocity t=sqrt(z*z+hs*hs) ! travetlime at the offset it=1.5+(t-t0)/dt !nearest time sample if(it<nt) then !are we within trace range if(adj) then !creating moveout tt(it)=tt(it)+zz(iz) else !doing nmo zz(iz)=zz(iz)+tt(it) end if end if end doend subroutine
Stacking/spreading as an operator
y1,1 y12 y1,3 y1,4 y1,5 x11 1 1 1 1=
Forward: Copy dataAdjoint: Stack
d S m
Stacking/spreading as an operator
y1,1 y1,2 y1,3 y1,4 y1,5
y21 y22 y23 y24 y25
y31 y32 y33 y34 y35
y41 y42 y43 y44 y45
y51 y62 y53 y54 y55
x1
x2
x3
x4
x5
=
11
11
11
11
11
11
11
11
11
11
11
11
1
d S m
Combining the two: Matrix/operator
11
11
1
1 11
11
1 11 1
1
1 11 1
1
1 11
1
11
11
11
11
11
11
11
11
11
11
11
11
1
y1,1 y1,2 y1,3 y1,4 y1,5
y21 y22 y23 y24 y25
y31 y32 y33 y34 y35
y41 y42 y43 y44 y45
y51 y62 y53 y54 y55
x1
x2
x3
x4
x5
=
moved out data (d) Moveout (N) Spread (S)
stackedtrace(m)
Stacking as on operatorsubrotine stack(adj, add, slow,h, t0,dt, n,stack,gather) logical :: adj,add (forward, back/ add to output) real :: slow(:) !slowness (1./velocity) real :: t0,dt,h0,dh !sampling of the time/offset axis integer :: nt,nh !number of samples time offset axis real :: stack(:),gather(:,:) ! stack and gather real ::h !offset integer :: ih !current offset call adjnull(adj,add,tt,zz) !possible zero output do ih=1,nh ! loop over offset h=h0+dh*(ih-1) call nmo(adj,.true.,h,t0,dt,nt,stack,gather(:,ih)) end doend subroutine