Since velocity increases with depth,
at wide enough offset a deep enough path
will arrive sooner than a shallow path.
In other words,
traveltime curves for shallow events
must cut across the curves of deeper events.
Where traveltime curves cross,
NMO is no longer a one-to-one transformation.
To see what happens to the stacking process
I prepared Figures 3-5
using a typical marine recording geometry
(although for clarity I used
larger ) and we will use
a typical Texas gulf coast average velocity,
where
.
First we repeat the calculation of Figure 2
with constant velocity and more reflectors.
We see in Figure 3 that the stack reconstructs
the model except for two details:
(1) the amplitude diminishes with time, and
(2) the early waveforms have become rounded.
nmo0alfa0
Figure 3 Synthetic CMP gather for constant velocity earth and reconstruction. | ![]() |
Then we repeat the calculation
with the Gulf coast typical velocity gradient .The polarity reversal on the first arrival of the wide offset trace
in Figure 4
is evidence that in practice traveltime curves do cross.
(As was plainly evident in Figures
,
and
crossing traveltime curves are even more significant elsewhere in the world.)
Comparing Figure 3 to Figure 4
we see that an effect of the velocity gradient
is to degrade the stack's reconstruction of the model.
Velocity gradient has ruined the waveform on the shallowest event,
at about 400ms.
If the plot were made on a finer mesh
with higher frequencies,
we could expect ruined waveforms a little deeper too.
nmo0alfa.5
Figure 4 Synthetic CMP gather for velocity linearly increasing with depth (typical of Gulf of Mexico) and reconstruction. | ![]() |
Our NMO and stack subroutines can be used for modeling or for data processing.
In designing these programs we gave no thought to signal amplitudes
(although results showed an interesting AVO effect in Figure 2.)
We could redesign the programs so that the modeling operator has the
most realistic amplitude that we can devise.
Alternately, we could design the amplitudes
to get the best approximation to
which should result in ``Stack''
being a good approximation to ``Model.''
I experimented with various weighting functions until
I came up with
subroutines nmo1()
and stack1() (like stack0()
)
which embodies the weighting function
and which produces the result in Figure 5.
nmo1alfa.5
Figure 5 Synthetic CMP gather for velocity linearly increasing with depth and reconstruction with weighting functions in subroutine nmo1(). Lots of adjustable parameters here. | ![]() |
The result in Figure 5 is very pleasing.
Not only is the amplitude as a function of time better preserved,
more importantly, the shallow wavelets are less smeared
and have recovered their rectangular shape.
The reason the reconstruction is much better is
the cosine weighting implicit in .It has muted away much of the energy in the shallow asymptote.
I think this energy near the asymptote is harmful
because the waveform stretch is so large there.
Perhaps a similar good result could be found by experimenting
with muting programs such as mutter()
.
However, subroutine nmo1()
differs from mutter()
in two significant respects:
(1) nmo1() is based on a theoretical concept
whereas mutter() requires observational parameters
and (2) mutter() applies a weighting in
the coordinates of the (t,x) input space,
while nmo1() does that
but also includes the coordinate
of the the output space.
With nmo1() events from different
depths see different mutes
which is good where a shallow event asymptote
crosses a deeper event far from its own asymptote.
In practice the problem of crossing traveltime curves is severe,
as evidenced by
Figures
-
and both weighting during NMO and muting should be used.
subroutine nmo1( adj, add, slow, x, t0, dt, n,zz, tt )
integer it, iz, adj, add, n
real xs, t , z, slow(n), x, t0, dt, zz(n), tt(n), wt
call adjnull( adj, add, zz,n, tt,n)
do iz= 1, n { z = t0 + dt*(iz-1)
xs = x * slow(iz)
t = sqrt ( z * z + xs * xs) + 1.e-20
wt = z/t * (1./sqrt(t)) # weighting function
it = 1 + .5 + (t - t0) / dt
if( it <= n )
if( adj == 0 )
tt(it) = tt(it) + zz(iz) * wt
else
zz(iz) = zz(iz) + tt(it) * wt
}
return; end
It is important to realize that the most accurate possible
physical amplitudes are not necessarily those for which
.Physically accurate amplitudes involve many theoretical
issues not covered here.
It is easy to include some effects
(spherical divergence based on velocity depth variation)
and harder to include others
(surface ghosts and arrays).
We omit detailed modeling here
because it is the topic of so many other studies.