An algorithm for 3D residual static corrections

William S. Harlan (based on ideas from Greg Lazear)


This algorithm is designed to obtain enough information in one pass through 3D surface seismic data to estimate reflection static corrections. During this pass, a running buffer retains traces whose sources and receivers are close to the next expected trace. Each new trace is cross-correlated with traces in the buffer, and the cross-correlations are saved in a disk file. The necessary static corrections are optimized iteratively from the saved correlation functions, and corrections are applied in a second and final pass through the data. This note uses a notation which might clarify the details.

Assume that surface seismic data amplitudes $d(\svector{x}_i,\svector{x}^k,t)$ were recorded over time $t$ for many pairs of 3D ground positions for sources $\svector{x}_i$ and receivers $\svector{x}^k$. Sources are indexed with subscripts, and receivers with superscripts.

The time axis has been stretched according to some ``normal moveout'' which is a function of the source-receiver offset $\Vert \svector{x}_i - \svector{x}^k \Vert$ and the midpoint $\Vert \svector{x}_i + \svector{x}^k \Vert/2$. After such adjustments, nearby traces are assumed to resemble each other within a time window, except for time-invariant, surface-consistent source shifts $\Delta t_i$ and receiver shifts $\Delta t^k$:

d(\svector{x}_i,\svector{x}^k,t) \approx d(t - \Delta t_i - \Delta t^k )
~~\mbox{for}~~t_1 < t < t_2.
\end{displaymath} (1)

The approximation is expected to worsen as the collection of traces includes sources and receivers farther apart. The time window should be as deep as possible and should include strong reflections.

Define a cross correlation $c_{ij}^{kl}(\tau)$ for specific pairs of nearby sources and receivers:

c_{ij}^{kl}(\tau) \equiv
c_{ji}^{lk}(-\tau) \equiv
...vector{x}^k,t-\tau) ~
d(\svector{x}_j,\svector{x}^l,t) ~ d t .
\end{displaymath} (2)

These crosscorrelations are calculated only between traces whose sources, receivers, and/or midpoints are within a limited distance of each other:
\Vert \svector{x}_i - \svector{x}_j \Vert < x_{\max} ~,~
...r{x}^l)/2 \Vert
< x^{\raisebox{-4pt}{$\scriptstyle \max$}}~ .
\end{displaymath} (3)

To the extent that our data model (1) is correct, then
\mbox{the lags} ~~
\tau_{ij}^{kl} \approx \Delta t_i - \Del...
...lta t^l
~~\mbox{will maximize}~~
c_{ij}^{kl}(\tau_{ij}^{kl}) .
\end{displaymath} (4)

The following algorithm suggests itself. Pick lags $\tau_{ij}^{kl}$ that do maximize the correlations, then solve a least-squares problem:
\Delta t_i ~\mbox{and}~ \Delta t^k
~\mbox{to ...
...kl} -
\Delta t_i + \Delta t_j - \Delta t^k + \Delta t^l )^2 .
\end{displaymath} (5)

The above algorithm requires that a great many noisy cross-correlations be picked for possibly unreliable peaks. Instead, we can prepare and model cross-correlations of different partial sums of the data. Some information will be lost, but the sums will improve the signal-to-noise ratio of the correlations and will improve the reliability of the picked lags at correlation peaks.

Several partial sums are possible. The most common is probably a crosscorrelation of each trace with a stack of those traces that share a particular midpoint. (Remember the nearby-midpoint constraint in (3) applies to all crosscorrelations.)

C_i^k (\tau) \equiv \sum_{jl} c_{ij}^{kl}(\tau) .
\end{displaymath} (6)

In addition we could calculate the following sums of all crosscorrelations sharing a trace with a particular source or receiver
C_i (\tau) \equiv \sum_{jkl} c_{ij}^{kl}(\tau) ~ ~\mbox{and} ~~
C^k (\tau) \equiv \sum_{ijl} c_{ij}^{kl}(\tau)
\end{displaymath} (7)

or also calculate the sum of all crosscorrelations sharing traces with a particular pair of sources or receivers
C_{ij} (\tau) \equiv \sum_{kl} c_{ij}^{kl}(\tau) ~ ~\mbox{and} ~~
C^{kl} (\tau) \equiv \sum_{ij} c_{ij}^{kl}(\tau) .
\end{displaymath} (8)

Again we limit sums to nearby traces as in (3). We can examine the lags over a limited range $\vert \tau \vert < \tau_{\max}$ and find the peaks of any of these summed crosscorrelations:
\{ \tau_i^k , \tau_i , \tau^k , \tau_{ij} , \tau^{kl} \}
... , ~ C_{ij} (\tau_{ij}) ,
~\mbox{and} ~
C^{kl} (\tau^{kl}) .
\end{displaymath} (9)

The peaks of the crosscorrelations should ideally coincide with sums of surface-consistent shifts. To fit any or all of these picked peaks, find the sum of source shifts $\Delta t_i$ and receiver shifts $\Delta t^k$ which fit the picked lags in a least-squares sense:
$\displaystyle \min_{\Delta t_i \Delta t^k } ~~
\sum_{i,k} ( \tau_i^k - \Delta t...
...t^k )^2 +
\sum_i ( \tau_i - \Delta t_i )^2 +
\sum_k ( \tau^k - \Delta t^k )^2 +$      
$\displaystyle \sum_{i,j} ( \tau_{ij} - \Delta t_i + \Delta t_j )^2 +
\sum_{k,l} ( \tau^{kl} - \Delta t^k + \Delta t^l )^2$     (10)

The simplest algorithm would use only the first of these sums.

We could also maximize summed crosscorrelations more directly, but the non-linearity is more inconvenient:

\max_{\Delta t_i \Delta t^k }
\left [
C_i^k( \Delta t_i + \D...
..._i + \Delta t_j ) +
C^{kl}( \Delta t^k + \Delta t^l )
\right ]
\end{displaymath} (11)

The original data are corrected implicitly with these shifts:
d(\svector{x}_i,\svector{x}^k,t )
\Leftarrow d(\svector{x}_i,\svector{x}^k,t - \Delta t_i - \Delta t^k ) .
\end{displaymath} (12)

We could begin the algorithm again with these corrected data, improving the ability to pick correlation peaks. In practice we need not correct the data explicitly. We only adjust the original crosscorrelations:
c_{ij}^{kl}(\tau ) \Leftarrow
c_{ij}^{kl}(\tau - \Delta t_i + \Delta t_j
- \Delta t^k + \Delta t^l ) .
\end{displaymath} (13)

We can then recalculate the sums (6), (7), and (8) and repeat the rest of the algorithm. After convergence, the data are explicitly corrected with the accumulated shifts.

harlan 2018-08-08