NMO Correction Calculator: Normal Moveout Time Shift for CMP Gathers

NMO Correction Calculator

Calculate the reflection travel time and normal moveout at a given offset, model a full offset gather to see stretch factor grow with offset, or solve for the maximum offset that keeps NMO stretch within a chosen mute threshold. Everything updates live.

Reflection Time and Moveout at One Offset

Reflection Time T(x)
–
Moveout (T(x) minus T0)
–
NMO Stretch Factor
–
Reflection time follows the hyperbolic moveout equation, T(x) squared equals T0 squared plus offset squared divided by NMO velocity squared. The stretch factor is the fractional frequency distortion introduced by the NMO correction, computed as T(x) minus T0 divided by T(x). Stretch grows with offset and shrinks with T0, which is why shallow events are muted at much shorter offsets than deep ones.

NMO Correction Across a Full Offset Gather

TraceOffsetReflection Time T(x)MoveoutStretchMute Status
Each row represents one trace in a common midpoint gather at the entered offset. Traces whose stretch factor exceeds the mute threshold are flagged, since the NMO stretch at those offsets distorts the wavelet enough that most processing flows mute them before stack rather than let the distortion degrade the stacked trace.
NMO Stretch vs Offset
Stretch factor Mute threshold

Solve the Maximum Offset for a Stretch Mute Threshold

Maximum Offset
–
Reflection Time at Max Offset
–
Moveout at Max Offset
–
This solves the hyperbolic moveout equation directly for the offset at which the stretch factor reaches the chosen threshold. Offsets beyond this value are typically muted before stack. A common industry default is a thirty percent stretch mute, though shallow, high resolution targets often use a tighter threshold.

Calculate the reflection travel time and normal moveout at a given offset, model a full offset gather to see stretch factor grow with offset, or solve for the maximum offset that keeps NMO stretch within a chosen mute threshold. Everything updates live.

Every trace in a common midpoint gather records the same reflector at a different offset, and every one of those traces arrives a little later than the zero offset time as offset increases. Normal moveout correction removes that offset dependent delay so the traces can be stacked coherently, but the correction itself introduces a side effect worth understanding before it gets applied blindly across an entire gather.

Start with a single offset and velocity to see the reflection time and moveout directly. Move into the offset gather model to watch stretch factor grow across an entire spread and see exactly which traces a standard mute threshold would remove. Or solve backward from a chosen stretch mute percentage to find the maximum offset a gather can keep before that threshold is crossed.

The Hyperbolic Moveout Equation

For a single flat reflector and a constant NMO velocity, reflection time at offset follows a simple hyperbola, the reflection time squared equals the zero offset time squared plus offset squared divided by NMO velocity squared. Moveout is just the difference between that reflection time and the zero offset time, and it grows with offset and shrinks as the zero offset time increases, since deeper events flatten out relative to their offset.

Hyperbolic moveout curves for three reflectors at different zero offset times showing how reflection time increases with offset
The shallow event curves the most with offset. The deep event is nearly flat across the same spread.

This is the same relationship that stacking velocity analysis is built around, picking the NMO velocity that best flattens a gather at each zero offset time is exactly semblance velocity analysis in practice.

Why NMO Stretch Matters

Applying the moveout correction shifts each sample on a trace by a different amount depending on how far into the trace it sits, and that non uniform shift compresses the wavelet, lowering its dominant frequency. The fractional frequency distortion is called the stretch factor, and it is computed directly from the same two travel times already in the moveout equation, reflection time minus zero offset time, divided by reflection time.

Line chart of NMO stretch factor versus offset for shallow, mid depth, and deep reflectors with a thirty percent mute line
The shallow event crosses a 30 percent stretch mute near 1000 meters. The deep event barely moves.

Stretch factor is zero at zero offset and grows monotonically with offset, and for any fixed offset it is larger for shallow events than for deep ones, since a small zero offset time makes the offset term dominate the moveout equation much more strongly. This is exactly why a shallow event needs a shorter offset mute than a deep one using the same acquisition geometry.

Muting the Stretch: What Thirty Percent Actually Means

A common industry default mutes any sample where the stretch factor exceeds thirty percent, on the reasoning that beyond that point the wavelet has lost enough high frequency content that it degrades the stack rather than contributing useful signal. This tool solves the moveout equation directly for the offset at which a chosen stretch threshold is reached, so a processor can set an explicit offset mute rather than relying on a rule of thumb table.

Diagram of an offset gather showing traces kept below a stretch mute threshold in teal and muted traces beyond it in red
Traces beyond the solved maximum offset are typically muted before stack to protect bandwidth.

Tighter thresholds, twenty percent or lower, are common on high resolution shallow targets where preserving bandwidth matters more than keeping every trace in the stack. Looser thresholds are sometimes tolerated on deep, lower frequency targets where the stretch penalty is smaller to begin with.

Common Mistakes

Applying the same offset mute across an entire gather regardless of zero offset time, when shallow events reach a given stretch threshold at far shorter offsets than deep ones.

Confusing moveout, the raw time shift applied to a trace, with stretch factor, the fractional frequency distortion that shift introduces, they are related but are not the same quantity.

Assuming a fixed stretch mute percentage is correct for every survey, when the right threshold depends on the resolution requirements and frequency content of the specific target.

Ignoring stretch entirely on the assumption that NMO correction is purely a time shift with no consequence for the stacked wavelet.

Who Uses This

Seismic processors setting an offset mute for NMO correction who want an explicit offset value rather than a generic rule of thumb.

Geophysicists running velocity analysis who need a quick check on reflection time and moveout at a specific offset and zero offset time.

QC analysts reviewing a processing sequence who want to verify that a chosen mute threshold is being applied consistently across shallow and deep events.

Students and early career processors building intuition for how the moveout equation and stretch factor relate to each other.

Try It Above

Use the quick convert tab for a single offset check, move to the offset gather model to see stretch factor and mute status across a full spread with presets for shallow, mid depth, and deep events, or use the solve maximum offset tab to work out the exact offset where a chosen stretch threshold is reached.

Related Calculators and References

Continue building your workflow with the Dominant Frequency vs Resolution Calculator. For background on the formulas used above, see SEG Wiki: Normal-moveout correction.