next up previous [pdf]

Next: COMMON-MIDPOINT STACKING Up: Moveout, velocity, and stacking Previous: Formal inversion

THE NORMAL MOVEOUT MAPPING

Recall the traveltime equation ([*]).
$\displaystyle v^2   t^2$ $\textstyle =$ $\displaystyle z^2  + x^2$ (8)
$\displaystyle t^2$ $\textstyle =$ $\displaystyle \tau^2  + { x^2 \over v^2 }$ (9)

where $\tau$ is traveltime depth. This equation gives either time from a surface source to a receiver at depth $\tau$, or it gives time to a surface receiver from an image source at depth $\tau$.

A seismic trace is a signal $d(t)$ recorded at some constant $x$. We can convert the trace to a ``vertical propagation'' signal $m(\tau)=d(t)$ by stretching $t$ to $\tau$. This process is called ``normal moveout correction'' (NMO). Typically we have many traces at different $x$ distances each of which theoretically produces the same hypothetical zero-offset trace. Figure 4.1 shows a marine shot profile before and after NMO correction at the water velocity. You can notice that the wave packet reflected from the ocean bottom is approximately a constant width on the raw data. After NMO, however, this waveform broadens considerably--a phenomenon known as ``NMO stretch."

stretch
Figure 1.
Marine data moved out with water velocity. Input on the left, output on the right.
stretch
[pdf] [png] [scons]

The NMO transformation ${\bf N}$ is representable as a square matrix. The matrix ${\bf N}$ is a $(\tau,t)$-plane containing all zeros except an interpolation operator centered along the hyperbola. The dots in the matrix below are zeros. The input signal $d_t$ is put into the vector $\bold d$. The output vector $\bold m$--i.e., the NMO'ed signal--is simply $(d_6,d_6,d_6, d_7,d_7, d_8,d_8, d_9, d_{10}, 0)$. In real life examples such as Figure 4.1 the subscript goes up to about one thousand instead of merely to ten.


\begin{displaymath}
{\bf m\eq Nd} \eq
\left[
\begin{array}{c}
m_1 \\
m_2 \...
...\\
d_7 \\
d_8 \\
d_9 \\
d_{10}
\end{array} \right]
\end{displaymath} (10)

You can think of the matrix as having a horizontal $t$-axis and a vertical $\tau$-axis. The 1's in the matrix are arranged on the hyperbola $t^2=\tau^2+x_0^2/v^2$. The transpose matrix defining some ${\bf\tilde d}$ from $\bold m$ gives synthetic data ${\bf\tilde d}$ from the zero-offset (or stack) model $\bold m$, namely,


\begin{displaymath}
{\bf\tilde d \eq N' m } \eq
\left[
\begin{array}{c}
\til...
...6 \\
m_7 \\
m_8 \\
m_9 \\
m_{10}
\end{array} \right]
\end{displaymath} (11)

A program for nearest-neighbor normal moveout as defined by equations (4.10) and (4.11) is nmo0(). Because of the limited alphabet of programming languages, I used the keystroke z to denote $\tau$.

user/gee/nmo0.c
    for (iz=0; iz < n; iz++) {   
	z = t0 + dt*iz;           /* Travel-time depth */
	xs= x * slow[iz];
	t = hypotf(z,xs);         /* Hypotenuse */
	it = 0.5 + (t - t0) / dt; /* Round to nearest neighbor. */
	if( it < n ) {
	    if( adj ) zz[iz] += tt[it];
	    else      tt[it] += zz[iz];
	}
    }
A program is a ``pull'' program if the loop creating the output covers each location in the output and gathers the input from wherever it may be. A program is a ``push'' program if it takes each input and pushes it to wherever it belongs. Thus this NMO program is a ``pull'' program for doing the model building (data processing), and it is a ``push'' program for the data building. You could write a program that worked the other way around, namely, a loop over $t$ with $z$ found by calculation $z=\sqrt{t^2/v^2-x^2}$. What is annoying is that if you want a push program going both ways, those two ways cannot be adjoint to one another.

Normal moveout is a linear operation. This means that data can be decomposed into any two parts, early and late, high frequency and low, smooth and rough, steep and shallow dip, etc.; and whether the two parts are NMO'ed either separately or together, the result is the same. The reason normal moveout is a linear operation is that we have shown it is effectively a matrix multiply operation and that operation fulfills ${\bf N(d_1+d_2) = Nd_1+Nd_2}$.


next up previous [pdf]

Next: COMMON-MIDPOINT STACKING Up: Moveout, velocity, and stacking Previous: Formal inversion

2009-03-16