loading page

Step-by-step NMO correction
  • Leonardo Uieda
Leonardo Uieda

Corresponding Author:[email protected]

Author Profile


Corresponding author: [email protected]

This is a part of The Leading Edge “Geophysical Tutorials” series. You can read more about it in \citet{Hall_2016a}.

Open any textbook about seismic data processing and you will inevitably find a section about the normal moveout (NMO) correction. There you’ll see that we can correct the measured travel-time of a reflected wave \(t\) at a given offset \(x\) to obtain the travel-time at normal incidence \(t_{0}\) by applying the following equation

\begin{equation} \label{eq:traveltime} \label{eq:traveltime}t_{0}^{2}=t^{2}-\dfrac{x^{2}}{v_{\mathrm{NMO}}^{2}}\\ \end{equation}

in which \(v_{\mathrm{NMO}}\) is the NMO velocity. There are variants of this equation with different degrees of accuracy, but we’ll use this one for simplicity.

When applied to a common midpoint (CMP) section, the equation above is supposed to turn the hyperbola associated with a reflection into a straight horizontal line. What most textbooks won’t tell you is how, exactly, do you apply this equation to the data?

Read on and I’ll explain step-by-step how the algorithm for NMO correction from \citet{Yilmaz_2001} works and how to implement it in Python. The accompanying Jupyter notebook \citep{Perez_2007} contains the full source code, with documentation and tests for each function. You can download the notebook at github.com/seg or github.com/pinga-lab/nmo-tutorial.