diff --git a/book/tccs/micro/SConstruct b/book/tccs/micro/SConstruct index 5c05155eb..89de2b37b 100644 --- a/book/tccs/micro/SConstruct +++ b/book/tccs/micro/SConstruct @@ -1,3 +1,3 @@ from rsf.tex import * -End(color='ALL',hires='data sov location0-clean location0-noisy location0-hyb stage0-1 stage0-2 stage0-3 stage-1 stage-2 stage-3',use='amsmath,listings,hyperref') +End(color='ALL',hires='data sov location0-clean location0-noisy location0-hyb stage0-1 stage0-2 stage0-3 stage-1 stage-2 stage-3',use='hyperref') diff --git a/book/tccs/micro/paper.tex b/book/tccs/micro/paper.tex index c3c6375ce..4615e639c 100755 --- a/book/tccs/micro/paper.tex +++ b/book/tccs/micro/paper.tex @@ -1,7 +1,7 @@ \published{SEG Expanded Abstracts, 2485-2490, (2015)} \title{Investigating the possibility of locating microseismic sources using distributed sensor networks} -\author{Junzhe Sun$^{*1}$, Tieyuan Zhu$^1$, Sergey Fomel$^1$ and Wen-Zhan Song$^{2}$; $^1$The University of Texas at Austin; $^2$Georgia State University} +\author{Junzhe Sun, Tieyuan Zhu, Sergey Fomel, The University of Texas at Austin, and Wen-Zhan Song, Georgia State University} \maketitle @@ -88,8 +88,8 @@ \section{Numerical Examples} % \label{threelayer} %\end{figure*} \inputdir{cross} -\multiplot*{3}{sov,datatrace-clean,datatrace-noisy}{height=0.145\textheight}{(a) Microseismic source locations overlaid on a three-layer velocity model. (b) Noise-Free microseismic data from three-layer model. (c) Noisy microseismic data from three-layer model. The traces displayed in the right panel correspond to $X=1050\;m$.} -\multiplot*{3}{location0-clean,location0-noisy,location0-hyb}{height=0.145\textheight}{(a) Microseismic source locations imaged by the cross-correlation imaging condition using noise-free data. (b) Microseismic source locations imaged by the cross-correlation imaging condition using noisy data. (c) Microseismic source locations imaged by the hybrid imaging condition using noisy data.} +\multiplot{3}{sov,datatrace-clean,datatrace-noisy}{height=0.145\textheight}{(a) Microseismic source locations overlaid on a three-layer velocity model. (b) Noise-Free microseismic data from three-layer model. (c) Noisy microseismic data from three-layer model. The traces displayed in the right panel correspond to $X=1050\;m$.} +\multiplot{3}{location0-clean,location0-noisy,location0-hyb}{height=0.145\textheight}{(a) Microseismic source locations imaged by the cross-correlation imaging condition using noise-free data. (b) Microseismic source locations imaged by the cross-correlation imaging condition using noisy data. (c) Microseismic source locations imaged by the hybrid imaging condition using noisy data.} \subsection{Three-layer model} @@ -105,7 +105,7 @@ \subsection{Three-layer model} \plot{sov}{height=0.16\textheight}{Microseismic source locations overlaid on Marmousi velocity model. A total of three stages of microseismicity are assumed, each with six hypocenters. \label{fig:marmsov}} \plot{datatrace}{height=0.16\textheight}{Noisy microseismic data from Marmousi model. The trace in the right panel corresponds to $X=1.2\;km$.\label{fig:datamarm}} %\multiplot{2}{location0,location}{width=0.4\textwidth}{Imaged microseismic source locations using hybrid imaging condition of: (a) noisy data from surface array; (b) noisy data from both surface array and downhole sensors. \label{fig:marmloc}} -\multiplot*{6}{stage0-1,stage0-2,stage0-3,stage-1,stage-2,stage-3}{height=0.15\textheight}{Accumulated microseismicity calculated by the hybrid imaging condition using: (a)-(c) noisy data from surface array; (d)-(f) noisy data from both surface array and downhole sensors. Each column is produced after one stage of perforation. \label{fig:marmloc}} +\multiplot{6}{stage0-1,stage0-2,stage0-3,stage-1,stage-2,stage-3}{height=0.15\textheight}{Accumulated microseismicity calculated by the hybrid imaging condition using: (a)-(c) noisy data from surface array; (d)-(f) noisy data from both surface array and downhole sensors. Each column is produced after one stage of perforation. \label{fig:marmloc}} \subsection{Marmousi model} diff --git a/book/tccs/shapestack/Fig/schematic.pdf b/book/tccs/shapestack/Fig/schematic.pdf new file mode 100644 index 000000000..a8040967c Binary files /dev/null and b/book/tccs/shapestack/Fig/schematic.pdf differ diff --git a/book/tccs/shapestack/SConstruct b/book/tccs/shapestack/SConstruct new file mode 100644 index 000000000..e6da8f79a --- /dev/null +++ b/book/tccs/shapestack/SConstruct @@ -0,0 +1,8 @@ +from rsf.tex import * + +End(lclass='geophysics',use='hyperref,listings,moreverb',hires='cmp2 nsnmo sstack wsstack', color='ALL') + +#lclass='segabs' +#Paper('paper',lclass='article',use='pdfpages') + +#End(use='hyperref,listings,moreverb', color='ALL') diff --git a/book/tccs/shapestack/paper.bib b/book/tccs/shapestack/paper.bib new file mode 100644 index 000000000..76ce6b38a --- /dev/null +++ b/book/tccs/shapestack/paper.bib @@ -0,0 +1,309 @@ +@Article{wisecup, + author={R[] D[] Wisecup}, + title={Unambiguous signal recovery above the {N}yquist using random-sample-interval imaging}, + year=1998, + journal={Geophysics}, + volume=62, + issue=2, + pages={763-771}} +@Article{stark, + author={T[] J[] Stark}, + title={Signal recovery beyond conventional {N}yquist: {T}he sample rates used for seismic acquisition do not need to limit the maximum recoverable frequencies}, + year=2013, + journal={The Leading Edge}, + volume=32, + issue=11, + pages={1334-1339}} +@Article{fomel, + author={S[] Fomel}, + title={Shaping regularization in geophysical estimation problems}, + year=2007, + journal={Geophysics}, + volume=72, + issue=2, + pages={R29-R36}} +@Article{fomel2, + author={S[] Fomel}, + title={Nonlinear shaping regularization in geophysical inverse problems}, + year=2008, + journal={78th Annual International Meeting, SEG, Expanded Abstracts}, + pages={2046-2051}} +@Article{claerbout, + author={J[] Claerbout}, + title={Earth soundings analysis: {P}rocessing versus inversion}, + year=1992, + journal={Blackwell Science}} +@Article{claerbout3, + author={J[] Claerbout}, + title={Imaging the earth's interior}, + year=1985, + journal={Blackwell Science}} +@Article{sun, + author={Y[] Sun}, + title={Inverse {NMO} stack in depth-variable velocity}, + year=1997, + journal={Stanford Exploration Project (SEP) Report 94}, + pages={213-222}} +@Article{claerbout2, + author={J[] Claerbout}, + title={A prospect for super resolution}, + year=1996, + journal={Stanford Exploration Project (SEP) Report 93}, + pages={133-136}} +@Article{trickett, + author={S[] Trickett}, + title={Stretch-free stacking}, + year=2003, + journal={73rd Annual International Meeting, SEG, Expanded Abstracts}, + pages={2008-2011}} +@Article{kazemi, + author={N[] Kazemi and H[] R[] Siahkoohi}, + title={Local stretch zeroing {NMO} correction}, + year=2011, + journal={Geophysics}, + volume=188, + issue=1, + pages={123-130}} +@Article{fomel1, + author={S[] Fomel}, + title={Transforming prestack seismic data by {G}ardner continuation}, + year=2014, + journal={SEG Technical Program Expanded Abstracts}, + pages={4643-4649}} +@Article{fomel3, + author={S[] Fomel and Y[] Liu}, + title={Seislet transform and frame}, + year=2010, + journal={Geophysics}, + volume=75, + issue=3, + pages={V25-V38}} +@Article{fomel4, + author={S[] Fomel}, + title={Towards the seislet transform}, + year=2006, + journal={76th Annual International Meeting: SEG}, + pages={2847-2850}} +@Article{fomel5, + author={S[] Fomel}, + title={Applications of plane-wave destruction filters}, + year=2002, + journal={Geophysics}, + volume=67, + pages={1946-1960}} +@Article{fomel6, + author={S[] Fomel}, + title={Predictive painting of 3-{D} seismic volumes}, + year=2010, + journal={Geophysics}, + volume=75, + issue=4, + pages={A25-A30}} +@Article{fomel7, + author={S[] Fomel and A[] Guitton}, + title={Regularizing seismic inverse problems by model reparameterization using plane-wave construction}, + year=2006, + journal={Geophysics}, + volume=71, + issue=5, + pages={A43-A47}} +@Article{liu, + author={Y[] Liu and S[] Fomel and C[] Liu}, + title={Signal and noise separation in prestack seismic data using velocity-dependent seislet transform}, + year=2015, + journal={Geophysics}, + volume=80, + issue=6, + pages={A25-A30}} +@Article{snieder, + author={R[] Snieder and J[] Trampert}, + title={Inverse problems in geophysics}, + year=2015, + journal={SEG Technical Program Expanded Abstracts}, + pages={WD117-WD128}} +@Article{silva, + author={M[] Silva and M[] Porsani and B[] Ursin}, + title={Recursive stack to zero offset along local slopes}, + year=2015, + journal={SEG Technical Program Expanded Abstracts}, + pages={4323-4327}} +@Article{mayne1, + author={W[] H[] Mayne}, + title={Common reflection point horizontal data stacking techniques}, + year=1962, + journal=Geophysics, + volume=27, + issue=6, + pages={927-938}} +@Article{yilmaz, + author={O[] Yilmaz}, + title={Seismic data analysis: Processing, inversion, and interpretation of seismic data}, + year=2001, + journal={SEG}} +@Article{shatilo, + author={A[] Shatilo and F[] Aminzadeh}, + title={Constant normal-moveout ({CNMO}) correction: a technique and test results}, + year=2000, + journal={Geophysical Prospecting}, + volume=48, + pages={473-488}} +@Article{rashed, + author={M[] Rashed}, + title={Fifty years of stacking}, + year=2014, + journal={Acta Geophysica}, + volume=62, + issue=3, + pages={505-528}} +@Article{ronen, + author={S[] Ronen and C[] Liner}, + title={Least-sqaures {DMO} and migration}, + year=2000, + journal={Geophysics}, + volume=65, + issue=5, + pages={1364-1371}} +@Article{ronen2, + author={S[] Ronen}, + title={Wave-equation trace interpolation}, + year=1987, + journal={Geophysics}, + volume=52, + issue=7, + pages={973-984}} +@Article{regimbal, + author={K[] Regimbal and S[] Fomel}, + title={Improving resolution of {NMO} stack using shaping regularization}, + year=2015, + journal={SEG}, + pages={3859-3863}} +@Article{kroode, + author={F[] Kroode and S[] Bergler and C[] Corsten and J[] Willem de Maag and F[] Strijbos and H[] Tijhof}, + title={Broadband seismic data - The importance of low frequencies}, + year=2013, + journal={Geophysics}, + volume=78, + issue=2, + pages={WA3-WA14}} +@Article{saad, + author={Y[] Saad and M[] Schultz}, + title={{GMRES}: {A} generalized minimal residual algorithm for solving nonsymmetric linear systems}, + year=1986, + journal={SIAM}, + volume=7, + issue=3, + pages={856-869}} +@Article{swan, + author={H[] W[] Swan}, + title={Amplitude versus offset analysis in a finely layered media}, + year=1988, + journal={SEG}, + pages={1195-1198}} +@Article{ma, + author={Y[] Ma and W[] Zhu and Y[] Luo and P[] Kelamis}, + title={Super-resolution stacking based on Compressive Sensing}, + year=2015, + journal={SEG}, + pages={3502-3506}} +@Article{miller, + author={R[] D[] Miller}, + title={Normal moveout stretch mute on shallow-reflection data}, + year=1992, + journal={Geophysics}, + volume=57, + issue=11, + pages={1502-1507}} +@Article{byun, + author={B[] S[] Byun and E[] S[] Nelan}, + title={Method and system for correcting seismic traces for normal moveout stretch effects}, + year=1997, + journal={U.S. Patent}, + volume=5, + pages={684-754}} +@Article{hicks, + author={G[] J[] Hicks}, + title={Removing NMO stretch using the {R}adon and {F}ourier- {R}adon transforms}, + year=2001, + journal={63rd Annual Conference and Exhibition, EAGE, Extended Abstracts}, + pages={{A}-18}} +@Article{hilterman, + author={F[] Hilterman and C[] Van Schuyver}, + title={Seismic wide-angle processing to avoid NMO stretch}, + year=2003, + journal={73rd Annual International Meeting, SEG, Expanded Abstracts}, + pages={215-218}} +@Article{rupert, + author={G[] B[] Rupert and J[] H[] Chun}, + title={The block move sum normal moveout correction}, + year=1975, + journal={Geophysics}, + volume={40}, + pages={17-24}} +@Article{perroud, + author={H[] Perroud and M[] Tygel}, + title={Nonstretch {NMO}}, + year=2004, + journal={Geophysics}, + volume={69}, + pages={599-607}} +@Article{masoomzadeh, + author={H[] Masoomzadeh and P[] J[] Barton and S[] C[] Singh}, + title={Nonstretch moveout correction of long-offset multichannel seismic data for subbasalt imaging: Example from the North Atlantic}, + year=2010, + journal={Geophysics}, + volume={75}, + issue={4}, + pages={{R}83-{R}91}} +@Article{zhang, + author={B[] Zhang and K[] Zhang and S[] Guo and K[] Marfurt}, + title={Nonstretching NMO correction of prestack time-migrated gathers using a matching-pursuit algorithm}, + year=2013, + journal={Geophysics}, + volume={78}, + issue={1}, + pages={{U}9-{U}18}} +@Article{dunkin, + author={J[] W[] Dunkin and F[] K[] Levin}, + title={Effects of normal moveout on a seismic pulse}, + year=1973, + journal={Geophysics}, + volume={38}, + pages={635-642}} +@Article{barnes, + author={A[] E[] Barnes}, + title={Another look at {NMO} stretch}, + year=1992, + journal={Elsevier {S}cience {P}ublishing {C}o., {I}nc.}} +@Article{zhdanov, + author={M[] S[] Zhdanov}, + title={Geophysical inverse theory and regularization problems}, + year=2002, + journal={Geophysics}, + volume={57}, + issue={5}, + pages={749-751}} +@Article{smith, + author={G[] C[] Smith and P[] M[] Gidlow}, + title={Weighted stacking for rock property estimation and detection of gas}, + year=1987, + journal={Geophysical {P}rospecting}, + volume={35}, + pages={993-1014}} +@Article{bazelaire, + author={E[] de Bazelaire and J[] R[] Viallix}, + title={Normal moveout in focus}, + year=1994, + journal={Geophysical {P}rospecting}, + volume={42}, + pages={477-499}} +@Article{keys, + author={R[] G[] Keys and D[] J[] Foster}, + title={Comparison of seismic inversion methods on a single real data set}, + year=1998, + journal={Tulsa: Society of Exploration Geophysicists}} +@InProceedings{gardner, + author = {G[] H[] F[] Gardner and S[] Y[] Wang and N[] D[] Pan and Z[] Zhang}, + title = {Dip moveout and prestack imaging}, + booktitle = {18th Annual Offshore Technology Conference}, + pages = {OTC 5158}, + year = 1986} diff --git a/book/tccs/shapestack/paper.tex b/book/tccs/shapestack/paper.tex new file mode 100644 index 000000000..df23e8e39 --- /dev/null +++ b/book/tccs/shapestack/paper.tex @@ -0,0 +1,527 @@ +%%%%%%%%%%%%%%%%%%%% +\title{Increasing resolution of NMO stack using shaping regularization} +\author{Kelly Regimbal and Sergey Fomel} + +\lefthead{Regimbal \& Fomel} +\righthead{Shaping NMO stack} +\footer{TCCS-13} + +\maketitle + +\begin{abstract} +Several problems arise with the assumptions and principles of +conventional NMO and stack, resulting in lower amplitude and lower resolution stacks. We present two methods +that eliminate the effects of ``NMO stretch'' and restore a wider frequency band by replacing conventional +NMO and stack with a regularized iterative inversion to zero offset. The resulting stack is a model that +best fits the data using additional constraints imposed by the method of shaping +regularization. We use shaping regularization to achieve a +stack that has a denser time sampling and contains higher frequencies than the conventional +stack. In the first approach, we define the backward operator of shaping regularization +using the principles of conventional NMO correction and stack. In the second approach, we introduce a recursive +stacking scheme using plane-wave construction in the backward operator of shaping regularization. The advantage of +using recursive stacking along local +slopes in the application to NMO and stack is that it avoids stretching effects caused by NMO correction and is insensitive to non-hyperbolic moveout in the data. Numerical tests confirm each algorithm's ability to attain a higher frequency stack with a denser temporal sampling interval compared to those of the conventional stack and to minimize stretching effects caused by NMO correction. We apply both methods to a marine dataset from the North Sea and achieve noticeable resolution improvements in the stacked sections compared with that of conventional NMO and stack. By treating NMO and stack +as an iterative inversion using shaping regularization, resolution is enhanced by utilizing signal from different offsets and +minimizing stretching effects to reconstruct a high resolution stack. +\end{abstract} + +\section{Introduction} + +In conventional seismic data processing, common midpoint (CMP) stacking is one of the most fundamental processes \cite[]{yilmaz}. +CMP stacking combines normal moveout (NMO)-corrected traces across a CMP gather to produce a single trace with a +higher signal-to-noise ratio \cite[]{rashed}. Several problems arise with the assumptions and principles that +set the foundation for conventional NMO and stack. Conventional NMO correction transforms traces at +non-zero offset into traces that are effectively at zero offset. NMO correction is, therefore, a time coordinate transformation, +where time-variant nonlinear distortions of the seismic traces are introduced in the corrected traces \cite[]{barnes}. +These undesirable distortions of signals on a seismic trace are known as NMO stretch and result in lower frequency +content of the corrected reflection event at far offsets \cite[]{dunkin}. +This violates the assumption of a uniform distribution of phase and frequency of +seismic reflections across the corrected gather. Common procedures to eliminate this stretching effect +involve muting samples with severe distortions. This causes a decrease in fold and can destroy useful +far-offset information essential for amplitude versus offset (AVO) analysis \cite[]{swan}. Inaccuracy in stretch +muting with residual stretching effects can also produce a lower-amplitude and lower-resolution stack \cite[]{miller}. + +Conventional stacking is a simple process that combines the NMO-corrected traces by summing and normalizing. +Stacking is based on the assumption that useful signal is coherent, whereas noise is random. In real seismic +data, coherent noise and noise bursts are common, causing inaccuracy in the conventional stack \cite[]{rashed}. +Traditional stacking also assumes that the NMO-corrected gather has perfectly aligned seismic reflections \cite[]{yilmaz}. +However, NMO correction is an approximation that assumes the travel-time as a function of offset follows a +hyperbolic trajectory in a CMP gather, which might fail in common geologic settings that involve lateral +velocity variations or anisotropy \cite[]{bazelaire}. + +Several algorithms were developed to improve CMP stacking and enhance resolution +of stacked sections by reducing stretching effects. +\cite{claerbout} described inverse NMO stack, which recasts +NMO correction and stacking as an inversion process in the constant velocity case. This approach +combines conventional NMO and stack into one step by solving a set of simultaneous equations using +iterative least-squares optimization. +\cite{sun} extended Claerbout's idea to the case of depth-variable +velocity. The inverse NMO stack operator applied depends on the hyperbolic moveout relation and can +be employed to remove non-hyperbolic events and random noise. +\cite{trickett} uses a variation of Claerbout's inverse NMO stack in his stretch-free stacking method +to avoid NMO stretch. Trickett's results tend to be higher frequency but noisier +than a conventional stack. Multiple other algorithms have been proposed that aim to reduce +NMO-stretching effects \cite[]{byun,hicks,hilterman,rupert,perroud,masoomzadeh,zhang,kazemi}. +\cite{wisecup} introduced random sample interval imaging (RSI$^2$), which +maps the CMP gather into the ``after NMO space'' using the exact moveout times and no +interpolation. The NMO-corrected values are collected in the stack, rather than +summed, where the input sample values are mapped to their correct time values in the stack. +\cite{shatilo} proposed a constant NMO-correction strategy, which applies a constant NMO shift +within a finite-time interval that is equal to the wavelet length of a trace. This approach eliminates wavelet +stretch and preserves higher frequencies than the conventional method, resulting in a higher resolution stack. However, +samples that exist in overlapping time windows are used twice during the correction, resulting in +an amplitude distortion. +\cite{stark} discussed the idea of signal recovery beyond the conventional Nyquist +frequency using an approach similar to the RSI$^2$ algorithm. The method proposed is an output-driven process, +where the stack is defined as a merge trace and has a potentially higher sampling rate than the input +traces. Using this approach, the final stacked sections are not necessarily limited to the data-collected Nyquist frequencies. +More recently, \cite{ma} proposed a stacking technique based +on a sparse inversion algorithm that computes the stack directly from a CMP gather by solving an optimization +problem using principles of compressive sensing. This method eliminates the stretch effect of conventional +CMP stacking and improves resolution in the stacked section. +\cite{silva} introduced a recursive stacking approach using local slopes to compute a stack without stretching effects. +This velocity-independent stacking technique starts at the farthest offset and accumulates the estimated stack until the near offset is reached. + +In this paper, we propose two alternative approaches to NMO and stack using inversion by shaping regularization +\cite[]{fomel}. Shaping regularization implies a mapping of the input model to a space of acceptable models. +The shaping operator is integrated in an iterative inversion algorithm and provides an explicit +control on the estimation result. In this application, the model is a stacked trace, and the data is a +CMP gather. We experiment with two different formulations of shaping regularization in the application of NMO and stack, + which we refer to as shaping NMO stack and plane-wave construction (PWC) stack, which both aim to optimize CMP stacking and + enhance resolution of the final stacked seismic section. We start by reviewing shaping regularization in + the context of NMO and stack and define the operators for shaping NMO stack and PWC stack. We test these approaches +on synthetic examples to demonstrate each algorithm's ability to minimize +stretching effects and improve resolution. We then apply these methods to a field dataset from +the North Sea and, as a result, achieve noticeable resolution improvements in the stacked section in comparison +with conventional NMO and stack. + + +\section{NMO and stack using shaping regularization} + +Geophysical estimation problems are often ill-posed due to insufficient data, +and small changes in the data may result in drastic changes in the model. Regularization is +used to solve ill-posed problems by providing additional constraints on the estimated model \cite[]{zhdanov}. +Shaping regularization is defined as a mapping of the input model $\mathbf{m}$ to the space of acceptable functions. +The mapping is controlled by the shaping operator $\mathbf{S_m}$, which is integrated in an iterative +inversion. Iterative inversion repeatedly uses the difference between the estimated model from the current step +and real data to update the model until convergence occurs \cite[]{ronen}. In the linear case, the solution of the estimation problem using +shaping regularization is defined by +\begin{equation} +\label{eq:inv} +\mathbf{\hat{m}=[I+S_m(BF-I)]^{-1}S_mBd}, +\end{equation} +where $\mathbf{F}$ is the forward operator, $\mathbf{B}$ is the backward operator, and $\mathbf{d}$ +is the input data. We implement the Generalized Minimum Residual (GMRES) algorithm \cite[]{saad} to solve the linear system in equation~\ref{eq:inv}. +GMRES is a general iterative method for inverting sparse, non-symmetric matrices. + +The main idea of shaping regularization in application to NMO stacking is to use signal from different +offsets to recover extra bandwidth in the stacked trace. In conventional NMO correction, estimates +of the zero-offset trace from the data recorded at different offsets may have different spectral bands +due to NMO stretch \cite[]{claerbout2}. At wide offsets, low frequencies exist, which extend the +spectral bandwidth. We are interested in the recovery of both high and low frequencies. +We start by defining vectors and linear operators used in shaping NMO stack as follows: +\begin{itemize} +\item{$\mathbf{m}$ (model) is the desired seismic trace at zero-offset.} + +\item{$\mathbf{d}$ (data) is a CMP gather.} + +\item{$\mathbf{F}$ (forward operator) applies inverse moveout by spraying along hyperbolas using a known velocity model and subsamples in time.} + +\item{$\mathbf{B}$ (backward operator) interpolates the data to a denser temporal grid and applies NMO correction and stack.} + +\item{$\mathbf{S_m}$ (shaping operator) is a bandpass filter.} +\end{itemize} +The estimation result is controlled by the shaping operator. Therefore, the estimated stack is sensitive to how the +bandpass filter $\mathbf{S_m}$ is defined. The bounds of the bandpass operator depend +on the range of frequencies that exist in the data and, hence, are defined by the dataset. +In the numerical experiments, we provide examples to illustrate how the +bandpass operator can be defined. + + +\section{Plane-wave construction stack using shaping regularization} + +Our second approach extends the method of shaping NMO stack further by introducing a recursive stacking scheme +using plane-wave construction (PWC) \cite[]{fomel7} in the backward operator of shaping regularization to achieve a higher resolution stack. +The advantages of using recursive stacking along local slopes in the application to NMO +and stack is that it (1) avoids stretching effects caused by NMO correction and (2) is insensitive to +non-hyperbolic moveout in the data. We define the linear operators used in the shaping regularization +scheme in equation~\ref{eq:inv} as: +\begin{itemize} +\item{$\mathbf{F}$ (forward operator) applies predictive painting \cite[]{fomel6} to spread information using a known dip field + and then subsamples in time.} +\item{$\mathbf{B}$ (backward operator) interpolates the data in time to a denser grid and stacks in a recursive fashion using local slopes.} +\item{$\mathbf{S_m}$ (shaping operator) is a bandpass filter that controls frequency content.} +\end{itemize} + +% Recursive stacking +We implement PWC stacking in the backward operator of shaping regularization which follows +local-slope calculations from a CMP gather. The key idea of this stacking procedure is +to start at the farthest offset trace of the gather and make a local slope prediction of the preceding trace using +PWC (Figure~\ref{fig:schematic}a). The partially corrected trace is then stacked with the uncorrected neighbor, +which is the input for the next local prediction (Figure~\ref{fig:schematic}b). The process is repeated in the +offset direction until the near-offset trace is reconstructed (Figure~\ref{fig:schematic}c). +The final step to this stacking scheme is to apply a near-offset NMO correction to reconstruct the zero-offset trace. +This recursive stacking approach results in higher resolution stacks compared +to conventional NMO and stack. The procedure is equivalent to computing the zero scale of the seislet transform +\cite[]{fomel3}. Advantages of PWC stacking include eliminating +the effects of NMO stretch as well as the problem of non-hyperbolic moveout. +An approximate inverse of PWC stacking is defined by predictive painting \cite[]{fomel6}. +This algorithm is comprised of two main steps, namely estimating +local slopes of seismic events using plane-wave destruction (PWD) \cite[]{fomel5} and spreading information from a seed +trace inside a volume. To implement the forward operator $\mathbf{F}$, we use the updated model to spread information +across the CMP gather using the estimated dip field. + +\inputdir{.} +\plot{schematic}{width=0.9\textwidth}{Schematic of PWC stacking algorithm. (a) Stack far offset trace T$_2$ with neighboring trace T$_1$, + (b) stack updated trace T'$_1$ with neighboring trace T$_0$, (c) accumulated near-offset stack.} + +In PWC stacking, each seismic trace is predicted from its neighbors that are shifted +along the event slopes. Slopes are estimated by PWD, which minimizes the prediction error to estimate optimal slopes. +PWD can be sensitive to conflicting slopes at far offsets of a CMP gather where the dips are large. +To account for this issue, we first apply a constant velocity NMO correction to the CMP gather, which results in +smoothly varying slopes without crossing events. +We then estimate the moveout $t(x)$ of the corrected seismic events at offset $x$ as follows: +\begin{equation} +\label{eq:NMO2} +t(x) = \sqrt{t_{0}^{2}+\frac{x^{2}}{v_{0}^{2}} + x^{2} \left(\frac{1}{v^{2}} - \frac{1}{v_{0}^{2}}\right)}, +\end{equation} +where $t_0$ is the zero offset travel-time, $v$ is the NMO velocity estimated by a conventional method +and $v_0$ is a constant velocity. Adding the correction factor due to the constant velocity NMO correction +from equation~\ref{eq:NMO2}, the dip field becomes: +\begin{equation} +\label{eq:dip2} +p={\frac{x}{t}}\left(\frac{1}{v^{2}}-\frac{1}{v_{0}^{2}}\right). +\end{equation} +We use this estimated dip as the initial model for PWD. +This dip estimation scheme follows the velocity-dependent formulation of the seislet transform \cite[]{liu} +and provides a better estimation of the dip field for CMP gathers with large dipping events and conflicting slopes at +far offsets. We incorporate this dip estimation method to compute the PWC stack in an iterative +fashion while using shaping regularization (equation~\ref{eq:inv}). + +\section{Examples} +We evaluate the performance of shaping NMO stack and PWC stack by applying it to synthetic examples and a field dataset +from the North Sea. Numerical experiments test the ability of both algorithms to recover high frequencies and +reduce the stretching effects common in conventional NMO correction. We additionally test the potential of the proposed +methods to recover low frequencies and compare the results to conventional NMO and stack. + +\subsection{High frequency recovery} +In our first experiment, we generated a synthetic trace with a sampling interval of 1 ms and +used it as a reference trace. This trace was then inverse NMO-corrected and subsampled to 4 ms +to produce a synthetic CMP gather, shown in Figure~\ref{fig:cmp2}, which became the input data for both +shaping methods and conventional NMO and stack. The result of applying a constant velocity NMO +correction is displayed in Figure~\ref{fig:nmo0} and is used to compute +the dip field for the PWC stacking approach. + +The convergence of the GMRES algorithm in this example required only 3 iterations for PWC stack and 5 iterations for +shaping NMO stack to achieve a relative misfit tolerance of $10^{-5}$. +The estimated shaping NMO and PWC stacks are displayed as a function of iteration in Figures~\ref{fig:shmod1} and~\ref{fig:mod1}, respectively. +Iteration 0 of shaping NMO stack is the initial model and is comparable to a stack achieved by conventional NMO and stack +with lower amplitude and lower frequency content; iteration 5 is the estimation result. The PWC stack +exhibits a faster convergence, where iteration 3 shows the estimation result. The conventional stack shown in Figure~\ref{fig:mod4} +results in lower amplitude and lower frequency content, while both PWC and shaping NMO stacks achieve results similar to the +reference trace. + +We next evaluate the spectral content recovered in the resulting stacks. The frequency content of the shaping NMO stack is compared +with that of the PWC stack in Figure~\ref{fig:shpwspec1}. +In this synthetic example, the two shaping approaches reconstruct nearly the same amplitude scale and spectra. In Figure~\ref{fig:spec5,spec6}, +the spectral content of the PWC stack is compared with the conventional stack and the reference +trace. The conventional stack fails to recover frequencies ranging +from 110 Hz to 175 Hz, whereas the shaping NMO and PWC stacks recover useful frequencies up to 175 Hz. Thus, using inversion, we +accurately preserve the true amplitude scale and spectrum of the reference trace. +Moreover, the high frequency information recovered is beyond +the Nyquist frequency of the input data (125 Hz). \cite{ronen2} justifies the possibility of such recovery with the +idea that a signal can be recovered with the combination of different aliased sequences. Since each offset +corresponds to a different propagation path, it brings different information. Therefore, +the combination of all offsets allows us to reconstruct a higher frequency signal that is not constrained +by the Nyquist frequency of the input data. This is the fundamental principle of treating NMO and stack as an +inverse process using shaping regularization to recover higher resolution stacks. In this simple synthetic example, +we accurately preserve information in the recovered zero-offset trace with a 1-ms sampling +interval by using input data with only a 4-ms sampling interval. + + +To add complexity to the synthetic CMP gather, we incorporate random noise and artifical AVO effects, where amplitude +is linearly decreasing with offest (Figure~\ref{fig:cmpavo}). The resulting shaping stacks and conventional stack are +compared with the reference trace in Figure~\ref{fig:mod5}. Both PWC stack and shaping NMO stack recover higher amplitude +in comparison with the conventional stack. We evaluate the difference in frequency content and amplitude recovered using +PWC stack and shaping NMO stack in Figure~\ref{fig:shpwspecavo}. Both approaches recover a similar bandwidth, but PWC +stack recovers somewhat higher amplitude. A spectral comparison of the PWC stack versus conventional +NMO and stack is shown in Figure~\ref{fig:specavo2} and the reference trace in Figure~\ref{fig:specavo1}. +The PWC stack still recovers higher frequency content in comparison +to conventional NMO and stack. When comparing the spectral band of the PWC stack to that of the reference trace +in Figure~\ref{fig:specavo1}, the difference is minimal. Therefore, by adding the complexities of +artificial AVO effects and random noise to the synthetic data, the ability of PWC stack to reconstruct the +zero-offset trace is not affected, whereas the frequency content recovered by the conventional stack is +limited to the sampling rate of the input data as well as other problems that arise with the assumptions of +conventional CMP stacking. The shaping NMO stack recovers approximately the same bandwidth as the reference +trace but has a mismatch in amplitude due to the decrease in energy across the input gather (Figure~\ref{fig:shspecavo1}). +Conventional AVO methods are done through weighted +stacking \cite[]{smith} to display information about rock properties. Consequently, the principles of shaping NMO stack +and PWC stack can be extended to the application of AVO analysis to compute high resolution weighted stacks. + + +%Shaping NMO results +\inputdir{synseis} +\multiplot{2}{cmp2,nmo0}{width=0.6\textwidth}{(a) Synthetic CMP gather with a 4-ms sampling interval used as the input data for the two + shaping stack methods and (b) constant velocity NMO-corrected gather to separate crossing events at far offsets used for PWC stacking.} + +\plot{shmod1}{width=0.8\textwidth}{Zoomed in portion of the estimated shaping NMO stack as a function of iteration. + Top: iteration 0 is similar to conventional NMO and stack, and bottom: iteration 5 is the estimation result, where frequency content + and amplitude appear to be noticeably higher.} + +%PW stack +\plot{mod1}{width=0.8\textwidth}{Zoomed in portion of the estimated PWC stack as function of iteration using shaping regularization. + Top: iteration 0 is the initial model and bottom: iteration 3 is the estimation result where convergence occurs.} + +%Both +\plot{mod4}{width=0.8\textwidth}{Comparison of the resulting shaping stacks and conventional stack to the zero-offset reference trace.} + +\plot{shpwspec1}{width=0.7\textwidth}{Spectral comparison of the shaping NMO stack (blue) with the PWC stack (dashed red). In this synthetic experiment, + both shaping stack approaches achieve similar results.} + +%PW stack spectral comparisons +\multiplot{2}{spec5,spec6}{width=0.6\textwidth}{Spectral comparison of the PWC stack (dashed red) with + (a) conventional NMO and stack (blue) and (b) the reference trace (blue) with a 1-ms sampling interval. } + + +%AVO example +\plot{cmpavo}{width=0.8\textwidth}{Synthetic CMP gather with random noise and artificial AVO effects, where amplitude linearly decreases with offset.} + +\plot{mod5}{width=0.8\textwidth}{Comparison of the resulting shaping stacks and conventional stack with random noise and AVO effects added to the input gather to the zero-offset reference trace.} + +\plot{shpwspecavo}{width=0.7\textwidth}{Spectral comparison of resulting shaping stacks with random noise and artificial AVO effects applied + to input data. The shaping NMO stack (blue) has a decrease in amplitude compared to the PWC stack (dashed red).} + +\multiplot{2}{specavo2,specavo1}{width=0.6\textwidth}{Spectral comparison of resulting stacks with random noise and artificial AVO effects applied + to input data. Spectrum of the PWC stack (dashed red) with (a) conventional NMO and stack (blue) and (b) the reference + trace (blue) with a 1-ms sampling interval.} + +\plot{shspecavo1}{width=0.7\textwidth}{Spectral comparison of resulting shaping NMO stack (dashed red) with random noise and AVO effects applied + to input data with the reference trace (blue) with a 1-ms sampling interval.} + +\plot{allspeclow}{width=0.7\textwidth}{Spectral comparison of the low frequencies recovered. Shaping NMO stack (dashed green) and PWC stack (dashed red) + recover lower frequencies in comparison with the conventional stack (dot-dash black) and are consistent with the reference trace (blue). Shaping + NMO stack recovers lower frequencies than PWC stack.} + +\multiplot{2}{nmo3,nmo2}{width=0.4\textwidth}{(a) Conventional NMO correction and (b) NMO correction without stretch muting.} +\multiplot{2}{shnsnmo,nsnmo}{width=0.4\textwidth}{Effective NMO correction using (a) shaping NMO stack and (b) PWC stack.} + + + +%\inputdir{synthetic} +%\multiplot{2}{shspec5,shspec6}{width=0.7\textwidth}{Spectral comparison of the shaping NMO stack (dashed red) with +% (a) conventional NMO and stack (blue) and (b) the reference trace (blue) with a 1-ms sampling interval.} + +%\plot{shcmpnoise}{width=0.8\textwidth}{Synthetic CMP gather with random noise, which is used as the input data for shaping NMO stack +% and conventional NMO stack.} + +%\multiplot{2}{shspecnoise2,shspecnoise1}{width=0.7\textwidth}{Resulting spectral comparisons of stacks with random noise applied to input +% data. Spectrum of the shaping NMO stack (dashed red) vs. (a) spectrum of conventional stack (blue) and (b) spectrum of reference trace (blue) +% with 1-ms sampling interval.} + +%\multiplot{2}{shspecavo2,shspecavo1}{width=0.7\textwidth}{Spectral comparison of resulting stacks with random noise and AVO effects applied +% to input data. Spectrum of the shaping NMO stack (dashed red) vs. (a) conventional NMO and stack (blue) and (b) the reference +% trace (blue) with a 1-ms sampling interval.} + + +% PW stack results +%\inputdir{seislet} +%\plot{nmo01}{width=0.8\textwidth}{Constant velocity NMO correction using minimum velocity. Estimated moveout (equation~\ref{eq:NMO2}) is overlain +% to demonstrate how the crossing events now occur outside of the data. Using this approximation as the initial model for PWD, we are able to compute +% a more accurate dip field.} + +%\multiplot{2}{cmp2,nmo0}{width=0.7\textwidth}{(a) Synthetic CMP gather with a 4-ms sampling interval and (b) constant velocity NMO-corrected gather to separate crossing events at far offsets.} + +%\plot{cmpnoise}{width=0.8\textwidth}{Synthetic CMP gather with random noise, which is used as the input data for PWC stack and conventional NMO and stack.} + +%\multiplot{2}{specnoise2,specnoise1}{width=0.7\textwidth}{Resulting spectral comparisons of stacks with random noise applied to input +% data. Spectrum of the PWC stack (dashed red) vs. (a) spectrum of conventional stack (blue) and (b) spectrum of reference trace (blue) +% with 1-ms sampling interval.} + + +%\plot{cmplow}{width=0.8\textwidth}{Synthetic CMP gather with a low-cut filter applied, cutting out all frequencies below 25 Hz.} + + + +\subsection{Low frequency recovery} +Low frequencies play an important role in seismic inversion for velocity and impedance models \cite[]{kroode}. +We next evaluate the ability of both algorithms to recover low frequency information in the +estimated stack. We apply a low cut filter to the synthetic CMP gather +in order to remove all of the useful low frequency information below 25 Hz, which provides us with the input for both shaping +methods and conventional NMO and stack. A spectral comparison of both approaches to conventional NMO and stack +and the reference trace is shown in Figure~\ref{fig:allspeclow}. We zoom in to the low end of the frequency spectrum +to see how well each method does in comparison to the reference trace. Conventional NMO stack fails +to recover frequencies below 25 Hz, while shaping NMO stack and PWC stack recover +low frequency information that is consistent with the reference trace. In this experiment, shaping NMO stack +recovers more low frequencies compared to the PWC stack. + + +\subsection{``Non-stretch" NMO} +To demonstrate how the shaping stacks reduce the effects of NMO stretch, +we seperately apply both methods to each trace of the synthetic CMP gather, setting other traces to zero. After repeating this process +for all traces in the gather, the output shaping stacks are concatenated to extract the effective NMO-corrected gathers. +Conventional NMO correction with stretch muting fails to preserve far offset information (Figure~\ref{fig:nmo3}), +whereas NMO correction without stretch muting leads to prominent stretch at far offsets (Figure~\ref{fig:nmo2}). +Figure~\ref{fig:shnsnmo,nsnmo} compares the effective NMO-corrected gathers using PWC stacking and +shaping NMO stacking. The results indicate that the stretching effects that are prominent at far offsets and early times in the NMO-corrected gather +in Figure~\ref{fig:nmo2} are effectively reduced by implementing both shaping stack methods. + + +\subsection{2-D North Sea data} + +\inputdir{elf} + +\plot{spec8}{width=0.7\textwidth}{Example of sensitivity to frequency bounds using shaping regularization. + Spectral comparison of shaping NMO stack using a bandpass filter ranging from 2 Hz to 90 Hz (dashed red) + versus a bandpass filter ranging from 2 Hz to 124 Hz (blue). By using an upper bound that is too + large, spurious high frequencies are introduced.} + +\plot{mod}{width=0.8\textwidth}{Stacked result for one CMP gather. From top to bottom: 8-ms conventional stack, PWC stack, + shaping NMO stack, and dense 4-ms conventional stack} + +\plot{shpwspec}{width=0.7\textwidth}{Spectral comparison of the shaping NMO stack (blue) to the PWC stack (dashed red). + The PWC stack recovers slighly higher frequencies than the shaping NMO stack.} + + +Our field dataset example is from the North Sea and was used previously by \cite{fomel4} and \cite{fomel3}. +This 2-D dataset was recorded over a complex salt dome region and has 1,000 CMP locations and 800 samples +per trace with a sampling interval of 4 ms. +We apply conventional NMO and stack to the 4-ms data to use as a reference for testing the accuracy of the stacking +approaches and subsample the data to 8 ms to provide the input data for shaping NMO stack, PWC stack and conventional NMO stack. +The shaping operator in this case is a bandpass filter ranging from 2 Hz to 100 Hz for shaping NMO stack and +3 Hz to 110 Hz for PWC stack. The parameters were selected based on the frequency content of the input data. +The estimation result using shaping regularization is sensitive to the defined bandpass filter. +Upper frequency bounds that are too high may lead to spurious high frequencies in the stack. +Figure~\ref{fig:spec8} demonstrates the effect of incorrect bandpass filter boundaries. +In this figure, the spectrum of the shaping NMO stack using a bandpass filter ranging from 2 Hz to 90 Hz is compared to +shaping NMO stack using a bandpass filter ranging from 2 Hz to 124 Hz. By using an upper bound that is too +large in the latter case, spurious high frequencies are introduced. Therefore, the bounds of the bandpass filter +are data-dependent and must be selected based on the frequency content of the data. +The convergence of shaping NMO stack required 5 iterations, while PWC stack required only 3 iterations. +In Figure~\ref{fig:mod}, the result of applying the shaping methods to one CMP gather is compared to the resulting stacks from conventional +NMO and stack and the densely-sampled reference stack. +The frequency content and amplitude of the PWC stack appear to be the highest of the different stacking methods. We next evaluate the spectral content recovered for each approach by analyzing the amplitude spectra. We first compare the frequency content of the PWC stack to that of the shaping NMO stack, shown in Figure~\ref{fig:shpwspec}. +The PWC stack recovers slightly higher frequencies compared to the shaping NMO stack. +The spectrum of the shaping NMO stack is next compared to that of conventional NMO and stack in Figure~\ref{fig:specn0} +and the spectrum of the densely-sampled reference stack in Figure~\ref{fig:specn1}. Compared to the conventional stack, the +shaping NMO stack recovers extra bandwidth with higher frequencies present, which range to 80 Hz. +The accuracy of the recovered high frequencies is supported by the spectral comparison to the reference stack. +We next analyze the ability of PWC stack to accurately recover higher frequencies, shown in Figure~\ref{fig:compspec,compspec2}. +The PWC stack recovers higher frequency content compared to the conventional stack and also lower frequency content as +demonstrated in Figure~\ref{fig:compspec}. Compared to the dense stack (Figure~\ref{fig:compspec2}), PWC stack +recovers slightly higher frequencies but is overall consistent with the spectral content. +The resulting stacked sections using the 8-ms data as the input are displayed in Figures~\ref{fig:istack8},~\ref{fig:shngmres}, and~\ref{fig:ungmres3}. +For shallow reflectors, higher frequencies exist using shaping NMO stack and PWC stack in comparison with +the conventional NMO stack, which suggests that the effects of NMO stretch are reduced. This is seen clearly +in Figure~\ref{fig:wstack,shwnstack,wnstack}, which is a zoomed in section of a shallow region of the stacked sections. +The PWC stacking approach recovers the most information out of the three approaches based on the thin layers that +are resolved. Throughout the entire section, PWC stack and shaping NMO stack recover significantly higher frequencies compared to +the conventional stack. Thin layers that are unclear in the conventional stacked section become clearly resolved +and continuous in the PWC and shaping NMO stacked sections. Overall, events become more continuous and coherent throughout +the section using the shaping stack approaches, and resolution is noticeably improved. + +\multiplot{2}{specn0,specn1}{width=0.6\textwidth}{Spectrum of the shaping NMO stack (dashed red) using the subsampled 8-ms + data versus (a) the conventional stack (blue) using the subsampled 8-ms + data and (b) the conventional stack (blue) using the 4-ms data.} + +\multiplot{2}{compspec,compspec2}{width=0.6\textwidth}{Spectrum of PWC stack (dashed red) using the subsampled 8-ms + data versus (a) the conventional stack (blue) using the subsampled 8-ms + data and (b) the conventional stack (blue) using the 4-ms data.} + +\plot{istack8}{width=0.9\textwidth}{North Sea data example. NMO and stack using the conventional method with 8-ms data as input.} +\plot{shngmres}{width=0.9\textwidth}{Stacked section using shaping NMO stack with 8-ms data as input.} +\plot{ungmres3}{width=0.9\textwidth}{Stacked section using PWC stack with 8-ms data as input.} + +\multiplot{3}{wstack,shwnstack,wnstack}{width=0.25\textwidth}{Zoomed in section of the North Sea data using (a) conventional NMO and stack (b) shaping NMO stack and (c) PWC stack.} + +%\subsection{Viking Graben data} +%Our next dataset is the 2-D Mobil AVO Viking Graben Line 12, also from the North Sea \cite[]{keys}. +%The dataset used was preprocessed, and most of the multiple reflections were attenuated. However, some residual multiple energy +%still remains in the dataset. +%This dataset contains 2,142 CMP locations and 1,001 samples per trace with a sampling interval of 4 ms. We subsample +%the data to 8 ms, which was the input for PWC stack, shaping NMO stack and conventional NMO stack. We apply conventional NMO and stack to the +%4-ms data, which allowed us to have a densely-sampled reference stack in order to evaluate the accuracy of the shaping stack methods in recovering a broader frequency band. +%The shaping operator used is a bandpass filter ranging from 3 Hz to 90 Hz for shaping NMO stack and 2 Hz to 90 Hz for PWC stack. +%The convergence of shaping NMO stack required 6 iterations, while PWC stack required only 4 iterations. The result of applying +%each method to one CMP location is shown in Figure~\ref{fig:mod3}. The conventional 8-ms stack appears to contain the lowest resolution, +%while the shaping stacks contain higher frequencies that are similar to the dense 4-ms stack. We next analyzed the frequency content +%recovered by comparing the spectral bands of each stack. We first compare the spectrum of the PWC stack and shaping NMO stack in +%Figure~\ref{fig:shspectest}. Overall, the frequency content recovered using both methods is similar, however, the shaping NMO stack recovers +%slightly lower frequencies than the PWC stack. The spectrum of the shaping NMO stack is compared to that of the conventional stack in Figure~\ref{fig:shspec1} +%and the spectrum of the densely-sampled reference stack in Figure~\ref{fig:shspec2}. The shaping NMO stack recovers significantly higher frequencies +%compared to the conventional stack that are consistent with the dense stack. The shaping NMO stack also recovers lower frequencies than +%the conventional stack. We next examine the frequency content of the PWC stack in comparison to the conventional stack in Figure~\ref{fig:pwspec2} +%and the dense stack in Figure~\ref{fig:pwspec1}. The PWC stack is able to restore frequencies ranging to 80 Hz, while the conventional stack is +%limited to approximately 60 Hz. Compared to the dense stack, the frequencies recovered using the PWC stack approach are accurate. +%The resulting stacked sections using the 8-ms data as the input to conventional NMO stack, shaping NMO stack, and PWC stack are displayed in Figures~\ref{fig:nmostack},~\ref{fig:shgmres1}, +%and~\ref{fig:pwgmres}, respectively. There are clear resolution improvements throughout the section using the shaping stack approaches in comparison with +%the conventional stack. Shallow sections become more coherent and thin layers are resolved. We zoom in to a shallow portion of the stacked section, which +%is displayed in Figure~\ref{fig:cwstack,shwstack,pwwstack}, to clearly detect the resolution improvements. In this windowed section, there appear to be dipping +%beds that are truncated against a flat-lying upper layer. By using the shaping stack approaches, these dipping layers are coherent and continuous, whereas the +%conventional stack appears low resolution and difficult to interpret. The flat layers above also have significant resolution improvements using the shaping +%stack approaches, where thinner layers are detected in comparison with the conventional stack. Overall, by implementing the stacking schemes using +%shaping regularization, we are able to reconstruct a higher resolution stack that is easier to interpret and not limited by the 8-ms sampling interval of the input gathers. + + +%\inputdir{viking} + +%\plot{mod3}{width=0.8\textwidth}{Viking Graben stacked results for one CMP gather. From top to bottom: dense 4-ms conventional stack, shaping NMO stack, +% PWC stack, and 8-ms conventional stack.} + +%\plot{shspectest}{width=0.7\textwidth}{Spectral comparison of the shaping NMO stack (blue) compared to the PWC stack (dashed red). +% Overall, the frequency content recovered using both methods is similar, however, the shaping NMO stack recovers slightly lower frequencies than the PWC stack.} + +%\multiplot{2}{shspec1,shspec2}{width=0.6\textwidth}{Viking Graben spectrum of the shaping NMO stack (dashed red) using the subsampled 8-ms +% data and 4-ms output stack versus (a) the conventional stack (blue) using the subsampled 8-ms +% data and (b) the conventional stack (blue) using the 4-ms data.} + +%\multiplot{2}{pwspec2,pwspec1}{width=0.6\textwidth}{Viking Graben spectrum of PWC stack (dashed red) using the subsampled 8-ms +% data and 4-ms output stack versus (a) the conventional stack (blue) using the subsampled 8-ms +% data and (b) the conventional stack (blue) using the 4-ms data.} + +%\plot{nmostack}{width=0.9\textwidth}{Viking Graben data example. NMO and stack using the conventional method with the 8-ms data as input.} +%\plot{shgmres1}{width=0.9\textwidth}{Viking Graben data example. NMO and stack using shaping NMO stack with the 8-ms data as input.} +%\plot{pwgmres}{width=0.9\textwidth}{Viking Graben data example. NMO and stack using PWC stack with the 8-ms data as input.} + +%\multiplot{3}{cwstack,shwstack,pwwstack}{width=0.29\textwidth}{Zoomed in section of the Viking Graben data using (a) conventional NMO and stack (b) shaping NMO stack and (c) PWC stack.} + +\section{Conclusions} +% Compare to conventinal NMO and stack +Conventional NMO stack can result in lower resolution stacked sections due to distortions caused by NMO correction and stretch +muting. Treating the process of NMO and stack using iterative regularized inversion allows us to compute an optimal stack with +higher frequency content and denser temporal sampling. As indicated by numerical experiments with synthetic data, +the recovered high frequency content is not limited +by the sample rate of the input data and is consistent with the that of the reference trace for both shaping NMO and PWC stacking +approaches. Furthermore, both stacking algorithms eliminate the effects of NMO stretch, which contributes to the +bandwidth of the reconstructed stack. Low frequency content also plays an important role in seismic data processing and imaging. As +demonstrated by the synthetic and real data examples, PWC and shaping NMO stack both have the ability to recover both higher and +lower frequencies compared to the conventional stack. The final stacked sections of the North Sea datasets have improved bandwidth and higher +resolution, which may aid in imaging and interpretation of small-scale features such as thin layers and channels. + +% Advantages and disadvantages of each method +The main difference between the two approaches described in this paper is that PWC stack follows local slopes of the data, while +shaping NMO stack relies on velocity to compute the stack based on the conventional principles of NMO correction and stack. +One benefit of shaping NMO stack, as demonstrated in the synthetic data example, is its ability to recover lower frequency content. +Advantages of PWC stack include its relative insensitivity to non-hyperbolic moveout and AVO effects. Furthermore, +PWC stack recovered higher and lower frequencies in the real data example and converged in fewer iterations in comparison with shaping NMO stack. +In the examples presented, both algorithms effectively reduce the effects of NMO stretch and improve the bandwidth of the +final stack. + +% Broader impact +By treating NMO and stack +as an iterative inversion using shaping regularization, resolution is gained by utilizing signals from different offsets and +minimizing stretching effects to reconstruct a high resolution stack that is not necessarily limited by the Nyquist +frequency of the input data. In seismic processing, NMO correction and stack are simple processes applied to data. However, +the same principles applied here can be extended to more complex processes, such as prestack migration, to achieve higher +resolution results. With the increase in computational power, the extension of the inversion process that is proposed +in this paper to migration deserves further investigation and has the possibility to significantly enhance +resolution in the resulting images. + +\section{Acknowledgments} +We would like to thank the Texas Consortium for Computational Seismology (TCCS) members for helpful +discussions and TCCS sponsors for their financial support. + +%\onecolumn +\bibliographystyle{seg} +\bibliography{paper} + + diff --git a/book/tccs/shapestack/synseis/SConstruct b/book/tccs/shapestack/synseis/SConstruct new file mode 100644 index 000000000..155c5fcda --- /dev/null +++ b/book/tccs/shapestack/synseis/SConstruct @@ -0,0 +1,485 @@ +from rsf.proj import * + +################################################# +############# Synthetic CMP ##################### +n2=128 +d2=0.025 +o2=0.05 + +# 1. make a trace +Result('test', None, 'spike n1=2001 d1=0.001 | noise rep=y seed=2014 | math output="input^3" | cut max1=0.25 | graph title=Spike') + +Flow('trace',None, + ''' + spike n1=2001 d1=0.001 | noise rep=y seed=2014 | + math output="input^3" | cut max1=0.25 | + ricker1 frequency=75 + ''') +Result('trace','graph title=trace') +Result('spectrum','trace','spectra | graph title=Spectrum') + +# 2. make NMO velocity + +Flow('vel','trace','math output="1.5+x1" ') + +# 3. Apply inverse NMO + +Flow('cmp','trace vel', + ''' + spray axis=2 n=128 d=0.025 o=0.05 | + inmo velocity=${SOURCES[1]} half=n + ''') +Result('cmp','grey title="CMP Gather" label2=Offset unit2=km ') +Flow('lowcmp','cmp','bandpass fhi=50') +Plot('lowcmp','cmp','bandpass fhi=50 | grey title="CMP Gather" label2=Offset unit2=km') +Result('lowcmp','cmp','bandpass fhi=50 | grey title="CMP Gather" label2=Offset unit2=km') +Result('mlowcmp','cmp','bandpass fhi=50 | grey wanttitle=n wantaxis=n') + +Flow('cmpstack', 'cmp vel', 'nmo velocity=${SOURCES[1]} half=n | mutter v0=4.5 half=n | stack') +Flow('difftest','cmpstack trace','add scale=1,-1 ${SOURCES[1]}') +Result('modtest','difftest cmpstack trace', + ''' + cat axis=2 ${SOURCES[1:3]} | + dots labels=difference:interpolated:original + gaineach=n + ''') +# Subsampled gather + +Flow('cmp2','cmp','window j1=4') + +Plot('cmp2','grey title="CMP Gather" label2=Offset unit2=km ') +Result('cmp2','grey title="CMP Gather" label2=Offset unit2=km ') +Result('lowcmp2','cmp2','bandpass fhi=50 | grey title="CMP Gather" label2=Offset unit2=km') +Result('mlowcmp2','cmp','bandpass fhi=200 | window j1=4 | bandpass fhi=50 | grey wanttitle=n wantaxis=n') + +# Apply regular NMO +Flow('nmo','cmp vel', + ''' + nmo velocity=${SOURCES[1]} str=0.3 half=n | + mutter v0=4.5 half=n + ''') +Result('nmo','grey title="Conventional NMO Corrected Gather" label2=Offset unit2=km') +Result('lownmo','nmo','bandpass fhi=50 | grey title="Conventional NMO Corrected Gather" label2=Offset unit2=km') + +Flow('vel2','vel','window j1=4') +Flow('nmo2','cmp2 vel2', + ''' + nmo velocity=${SOURCES[1]} str=0.2 half=n | + mutter v0=4.5 half=n + ''') +Result('nmo2','grey title="With Stretch" label2=Offset unit2=km screenratio=2') +Flow('nmo3','cmp2 vel2', + ''' + nmo velocity=${SOURCES[1]} str=0.7 half=n | + mutter v0=4.5 half=n + ''') +Result('nmo3','grey title="NMO" label2=Offset unit2=km screenratio=2') +Plot('nmo2','grey title="Conventional NMO" label2=Offset unit2=km') +Result('lownmo2','nmo2','bandpass fhi=50 | grey title="Conventional NMO Corrected Gather" label2=Offset unit2=km') + +# Regular stack + +Flow('stack2','nmo2','stack') +Result('stack2','graph title="Subsampled Stack" ') +Result('lowstack2','stack2','bandpass fhi=50 | graph title="Conventional Stack"') + +# Interpolate to dense sampling + +Flow('istack2','stack2 trace','bandpass fhi=124 | spline pattern=${SOURCES[1]}') +Flow('diff2','istack2 trace','add scale=1,-1 ${SOURCES[1]}') +Result('mod2','diff2 istack2 trace', + ''' + cat axis=2 ${SOURCES[1:3]} | + dots labels=difference:interpolated:original + gaineach=n + ''') + +Result('ispec2','trace istack2', + ''' + cat axis=2 ${SOURCES[1]} | + spectra | + window max1=75 | + graph title=Spectrum + ''') + +######################################################### +################### Shaping Method ###################### + +# Define dip + +data1 = 'cmp' + +# t as a function of t0 and x + +maxvel = 3.5 +minvel = 1.9 + +Flow('t','vel', + ''' + remap1 n1=2001 d1=0.001 o1=0 | + spray axis=2 n=128 d=0.025 o=0.05 label=Offset unit=km | + math output="sqrt(x1*x1+x2*x2*(1/(input*input)-%g))" + ''' % (1/(minvel*minvel))) + +Plot('t','window j1=100 | window f1=3 | transp | graph wanttitle=n wantaxis=n yreverse=y min2=0 max2=2 pad=n') + +Flow('t1','vel', + ''' + spray axis=2 n=128 d=0.025 o=0.05 label=Offset unit=km | + math output="x1*x1+(x2*x2)/(1/(input*input))" + ''') + + +# dip as a function of t0 and x + +dt=0.001 +dx=0.025 + +# NMO with maximum velocity + +Flow('vmax','vel','math output=%g' % minvel) +Flow('nmo02','cmp2 vmax','nmo velocity=${SOURCES[1]} half=n') + +Flow('nmo0',[data1,'vmax'],'nmo velocity=${SOURCES[1]} half=n') +Flow('inmo0','nmo0','bandpass fhi=125 | window j1=2') +Plot('nmo0','grey title="NMO with Constant Velocity" label2=Offset unit2=km') +Result('nmo0','grey title="NMO Corrected" label2=Offset unit2=km') +Flow('lownmo0',['lowcmp','vmax'],'nmo velocity=${SOURCES[1]} half=n') +Result('nmo01','nmo0 t','Overlay') + +Flow('p0','vel t', + ''' + remap1 n1=2001 d1=0.001 o1=0 | + spray axis=2 n=128 d=0.025 o=0.05 label=Offset unit=km | + math t=${SOURCES[1]} output="%g*x2/(t+0.001)*(1/(input*input)-%g)" + ''' % ((dx/dt),1/(minvel*minvel))) + +Flow('p1','vel t1', + ''' + spray axis=2 n=128 d=0.025 o=0.05 label=Offset unit=km | + math t=${SOURCES[1]} output="%g*x2/(t+0.001)*(1/(input*input))" + ''' % (dx/dt)) + +# dip as a function of t +Result('p0','grey unit1=s unit2=km color=j title=Slope scalebar=y') +Flow('vdip2','p0 t','iwarp warp=${SOURCES[1]} eps=1') + +Flow('taper','vdip2','math output=1 | mutter v0=2.6 half=n | smooth rect1=10 rect2=10') + +Flow('vdip1','vdip2 taper','mul ${SOURCES[1]}') +Flow('otaper','vdip2','math output=-7 | mutter v0=2.4 half=n inner=y | mutter v0=3.5 half=n | smooth rect1=15 rect2=15') +Flow('ovdip1','vdip1 otaper','add ${SOURCES[1]}') +Result('taper','grey title=Taper') +Plot('vdip1','grey unit1=s unit2=km color=j title=Slope scalebar=y') +Result('ovdip1','grey unit1=s unit2=km color=j title=Slope scalebar=y') + +data2 = 'nmo0' +idip = data2+'idip2' +Flow(idip,[data2,'ovdip1'],'dip nj1=1 both=n eps=1 rect1=15 rect2=15 idip=${SOURCES[1]} order=4') + +Plot(idip,'grey unit1=s unit2=km color=j title=Slope scalebar=y label2=Offset') +Result(idip,'grey unit1=s unit2=km color=j title=Slope scalebar=y label2=Offset') + +Result('nmodip','cmp2 nmo0','SideBySideAniso') + +# Seislet NMO +def seislet(gather,dip,snmo): + nmos = [] + for i2 in range(n2): + traced = 'trace%d' % i2 + if i2 == 0: + Flow(traced,gather,'cut f2=1') + elif i2 == n2-1: + Flow(traced,gather,'cut n2=%d' % i2) + else: + Flow(traced,gather,'cut n2=%d | cut f2=%d' % (i2,i2+1)) + + nmo = 'nmod%d' % i2 + nmos.append(nmo) + Flow(nmo,[traced,dip], + ''' + seislet dip=${SOURCES[1]} eps=0.1 adj=y inv=y type=haar order=4 | + window n2=1 + ''') + Flow(snmo,nmos, + ''' + cat axis=2 ${SOURCES[1:%d]} + ''' % len(nmos)) + +# Seislet Stack +def seislet_stack(gather,dip,stack): + Flow(stack,[gather,dip], + ''' + seislet dip=${SOURCES[1]} eps=0.1 adj=y inv=y type=haar order=4 | + window n2=1 + ''') + +#seislet('nmo0',idip,'dnmo2') +#Plot('dnmo2','grey title="Seislet NMO"') +#Result('dnmo2','grey title="Seislet NMO"') +#Result('test2',['dnmo2','t'],'Overlay') + +############################## Shaping PW stack ################################# + +# Backward operator +def backward(data,model,mode): + Flow(model,[data,idip,'vmax'], + ''' + spline pattern=${SOURCES[1]} | + nmo velocity=${SOURCES[2]} half=n | + pwstack dip=${SOURCES[1]} mode=%d order=4 eps=0.01 + ''' % mode) + +niter=5 + +# Shaping PWC stack +def shaping(cmp2,mod,plots): + '''Put everything in a function''' + + global niter + mod0 = mod+'0' + + backward(cmp2,mod0,1) + + m0 = mod0 + old = m0 + plots = [] + for i in range(1,niter+1): + new = '%s%d' % (mod,i) + specn = 'spect%s%d' % (mod,i) + Flow(new, [idip, old, m0, 'vmax'], + ''' + pwpaint seed=${SOURCES[1]} eps=0.01 order=4 | + inmo velocity=${SOURCES[3]} half=n | + window j1=4 | + spline pattern=${SOURCES[0]} | + nmo velocity=${SOURCES[3]} half=n | + pwstack dip=${SOURCES[0]} order=4 mode=1 eps=0.01 | + add ${SOURCES[1]} ${SOURCES[2]} scale=-1,1,1 | + bandpass flo=1 fhi=300 + ''') + old = new + + Flow(specn, ['trace', new], + ''' + cat axis=2 ${SOURCES[1]} | + spectra | + window max1=250 + ''') + Plot(specn, 'graph min2=0 max2=9 title=Spectrum%d'%i) + if plots != None: + plots.append(specn) + + Flow(mod,new,'cp') + +#shaping('cmp2','shstacked',None) + + +############################## GMRES ################################# +backward('cmp2','gmres0',2) +Flow('gmres1',['cmp2',idip],'shpwstack flo=1 fhi=300 niter=1 half=n jump=4 velocity=%g dip=${SOURCES[1]} mode=2 order=4 eps=0.01 nmo=y' % minvel) +Flow('gmres2',['cmp2',idip],'shpwstack flo=1 fhi=300 niter=2 half=n jump=4 velocity=%g dip=${SOURCES[1]} mode=2 order=4 eps=0.01 nmo=y' % minvel) +Flow('gmres3',['cmp2',idip],'shpwstack flo=1 fhi=300 niter=3 half=n jump=4 velocity=%g dip=${SOURCES[1]} mode=2 order=4 eps=0.01 nmo=y' % minvel) + +Result('niter','trace istack2 gmres3 gmres0', + ''' + cat axis=2 ${SOURCES[1:4]} | + window f1=300 n1=500 | + dots labels=reference:conventional:niter3:niter0 + gaineach=n + ''') + +Result('mod1','gmres3 gmres2 gmres1 gmres0', + ''' + cat axis=2 ${SOURCES[1:4]} | window f1=500 n1=500 | + dots labels=niter3:niter2:niter1:niter0 + gaineach=n + ''') + +# Spectral comparisons +Plot('istack2','spectra | window max1=250 | graph max2=8 plotfat=3 label2=Amplitude title="Conventional vs. PWC Stack"') +Plot('trace','spectra | window max1=250 | graph max2=8 plotfat=3 label2=Amplitude title="Reference vs. PWC Stack"') +Plot('gmres3','spectra | window max1=250 | graph max2=8 plotfat=3 label2=Amplitude plotcol=5 dash=1 title="" wantaxis2=n wantaxis1=n') + +Result('spec5','istack2 gmres3','Overlay') + +Result('spec6','trace gmres3','Overlay') + + + +Result('compspec','trace gmres3', + ''' + cat axis=2 ${SOURCES[1]} | spectra | + window max1=250 | graph label2=Amplitude + title="Reference Trace vs. Seislet Stack" + ''') + +Result('mod3','istack2 gmres3 trace', + ''' + cat axis=2 ${SOURCES[1:3]} | + dots labels=Conventional:Shaping:Reference + gaineach=n + ''') + + +# With low cut filter +Flow('cmplow','cmp','bandpass flo=25 | window j1=4 ') +Flow('stacklow','cmplow vel2 vel','nmo velocity=${SOURCES[1]} half=n | stack | spline pattern=${SOURCES[2]} | bandpass flo=25') +Flow('gmreslow',['cmplow',idip],'shpwstack flo=0 fhi=300 niter=4 half=n jump=4 velocity=%g dip=${SOURCES[1]} mode=2 order=4 eps=0.01 nmo=y' % minvel) +#shaping('cmplow','shstacklow', None) +Plot('gmreslow','spectra | window max1=35 | graph max2=3 label2=Amplitude plotcol=4 dash=4 title="" wantaxis2=n wantaxis1=n') +Plot('traced','trace','spectra | window max1=35 | graph max2=3 label2=Amplitude title="" wantaxis2=n wantaxis1=n') +Plot('stacklow','spectra | window max1=35 | graph max2=3 label2=Amplitude plotcol=7 dash=5 title="Low Frequency Spectrum"') +Result('speclow','gmreslow traced stacklow','Overlay') + + +Flow('widip',idip,'window j2=5 | window n1=200 f1=1000 n2=2 f2=10') +Flow('pwdstack','cmp','window j2=5 | window n1=200 f1=1000 n2=2 f2=10') +Flow('accstack','pwdstack widip','shpwstack flo=1 fhi=300 niter=2 half=n jump=1 dip=${SOURCES[1]} mode=2 order=4 eps=0.01 nmo=n') +Plot('pwdstack','wiggle title=Data transp=y yreverse=y pclip=100') +Plot('accstack','wiggle title="Accumulated stack" transp=y yreverse=y pclip=100 min2=0.1 max2=2.5') +Result('schem','pwdstack accstack','SideBySideAniso') + +### Seislet Shaping NMO +pwstacks = [] +for trace in range(n2): + pwonetrace = 'pwcmp-trace%d' % trace + if 0==trace: + Flow(pwonetrace,'cmp2','cut f2=%d' % (trace+1)) + elif (n2-1)==trace: + Flow(pwonetrace,'cmp2','cut n2=%d' % trace) + else: + Flow(pwonetrace,'cmp2','cut n2=%d | cut f2=%d' % (trace,trace+1)) + + pwstack = 'pwcmp-%d-stack' % trace + pwstacks.append(pwstack) + + # go through the shaping procedure: onetrace -> stack + #Flow(stack,[onetrace,idip],'shpwstack flo=1 fhi=300 niter=4 half=n jump=4 velocity=%g dip=${SOURCES[1]} mode=1 order=4 eps=0.01 nmo=y' % minvel) + shaping(pwonetrace,pwstack,None) + +Flow('nsnmo',pwstacks,'cat axis=2 ${SOURCES[1:%d]}' % n2) +Result('nsnmo', + ''' + transp | bandpass fhi=2 | transp | + mutter v0=3.5 half=n | mutter slope0=0.4 half=n | grey title="PWC NMO" label2=Offset unit2=km screenratio=2 + ''') + +############################## Shaping NMO stack ################################# + +def shbackward(data,model): + Flow(model,[data,'vel'], + ''' + spline pattern=${SOURCES[1]} | + nmo velocity=${SOURCES[1]} half=n str=0.0 | + stack + ''') +shbackward('cmp2','shmod0') + +Flow('shgmres','cmp2 vel','shstack flo=1 fhi=350 niter=5 half=n jump=4 velocity=${SOURCES[1]}') +Flow('shgmreslow','cmplow vel','shstack flo=1 fhi=350 niter=5 half=n jump=4 velocity=${SOURCES[1]}') + +Flow('shgmres1','cmp2 vel','shstack flo=1 fhi=300 niter=1 half=n jump=4 velocity=${SOURCES[1]}') +Flow('shgmres2','cmp2 vel','shstack flo=1 fhi=300 niter=2 half=n jump=4 velocity=${SOURCES[1]}') + +Result('shmod1','shgmres shgmres2 shgmres1 shmod0', + ''' + cat axis=2 ${SOURCES[1:4]} | window f1=500 n1=500 | + dots labels=niter5:niter2:niter1:niter0 + gaineach=n + ''') + +Plot('shgmres','spectra | window max1=250 | graph max2=8 plotfat=3 label2=Amplitude title="SNMO Stack vs. PWC Stack"') + +Result('shpwspec1','shgmres gmres3','Overlay') + + +Result('mod4','istack2 shgmres gmres3 trace', + ''' + cat axis=2 ${SOURCES[1:4]} | + dots labels=Conventional:SNMO:PWC:Reference + gaineach=n + ''') + +Plot('trace2','trace','spectra | window max1=35 | graph max2=3 plotfat=3 label2=Amplitude title=""') + +Plot('stacklow2','stacklow','spectra | window max1=35 | graph max2=3 plotfat=3 label2=Amplitude plotcol=7 dash=5 title="Low Frequency Recovery"') + +Plot('gmreslow2','gmreslow','spectra | window max1=35 | graph max2=3 plotfat=3 label2=Amplitude plotcol=5 dash=1 title="" wantaxis2=n wantaxis1=n') + +Plot('shgmreslow2','shgmreslow','spectra | window max1=35 | graph max2=3 plotfat=3 label2=Amplitude plotcol=3 dash=1 title="" wantaxis2=n wantaxis1=n') + +Result('allspeclow','trace2 gmreslow2 shgmreslow2 stacklow2','Overlay') + + +# With AVO +Flow('cmpavo1','trace vel', + ''' + spray axis=2 n=%d d=%g o=%g | + inmo velocity=${SOURCES[1]} half=n | + noise seed=2015 var=0.1 | + math output="input*(1-x2*%g)" + ''' % (n2,d2,o2,2.0/5.0)) +Flow('cmpavo','trace vel', + ''' + spray axis=2 n=%d d=%g o=%g | + inmo velocity=${SOURCES[1]} half=n | + noise seed=2015 var=0.1 | + math output="input*(1-x2*%g)" | + window j1=4 + ''' % (n2,d2,o2,2.0/5.0)) +Result('cmpavo','grey title="CMP Gather with AVO" label2=Offset unit2=km ') +Flow('nmo0avo','cmpavo1 vmax','nmo velocity=${SOURCES[1]} half=n') +Flow('dipavo','nmo0avo ovdip1','dip nj1=1 both=n eps=1 rect1=15 rect2=15 idip=${SOURCES[1]} order=4') +Flow('stackavo','cmpavo vel2 vel','nmo velocity=${SOURCES[1]} half=n | mutter v0=4.5 half=n | stack | spline pattern=${SOURCES[2]}') +Flow('pwavo','cmpavo dipavo','shpwstack flo=11 fhi=300 niter=4 half=n jump=4 velocity=%g dip=${SOURCES[1]} mode=2 order=4 eps=0.01 nmo=y | cut n1=255' % minvel) + +Plot('stackavo','spectra | window max1=250 | graph max2=8 plotfat=3 label2=Amplitude title="Conventional vs. PWC Stack"') +Plot('pwavo','spectra | window max1=250 | graph max2=8 plotfat=3 label2=Amplitude plotcol=5 dash=1 title="" wantaxis2=n wantaxis1=n') + +Result('specavo2','stackavo pwavo','Overlay') + +Result('specavo1','trace pwavo','Overlay') + +Flow('shgmresavo','cmpavo vel','shstack niter=6 flo=5 fhi=300 half=n jump=4 velocity=${SOURCES[1]} | cut f1=1 n1=200') +Plot('shgmresavo','spectra | window max1=250 | graph max2=8 plotfat=3 label2=Amplitude plotfat=3 plotcol=5 dash=1 title="" wantaxis2=n wantaxis1=n') +Plot('shgmresavo1','shgmresavo','spectra | window max1=250 | graph max2=8 plotfat=3 label2=Amplitude title="SNMO Stack vs. PWC Stack"') + +Result('shpwspecavo','shgmresavo1 pwavo','Overlay') + +Plot('trace1','trace','spectra | window max1=250 | graph max2=8 plotfat=3 label2=Amplitude title="Reference vs. Shaping NMO Stack"') +Result('shspecavo1','trace1 shgmresavo','Overlay') + +Result('mod5','stackavo shgmresavo pwavo trace', + ''' + cat axis=2 ${SOURCES[1:4]} | + dots labels=Conventional:SNMO:PWC:Reference + gaineach=n + ''') +# Try to extract effective NMO +stacks = [] +for trace in range(128): + onetrace = 'cmp-trace%d' % trace + if 0==trace: + Flow(onetrace,'cmp2','add mode=m scale=128 |cut f2=%d' % (trace+1)) + elif 127==trace: + Flow(onetrace,'cmp2','add mode=m scale=128 |cut n2=%d' % trace) + else: + Flow(onetrace,'cmp2','add mode=m scale=128 |cut n2=%d | cut f2=%d' % (trace,trace+1)) + stack = 'cmp-%d-stack' % trace + stacks.append(stack) + + # go through the shaping procedure: onetrace -> stack + Flow(stack,[onetrace, 'vel'],'shstack flo=2 fhi=200 niter=10 half=n jump=4 velocity=${SOURCES[1]}') + +Flow('shnsnmo',stacks,'cat axis=2 ${SOURCES[1:128]}') +Result('shnsnmo', 'nsnmo', + ''' + transp | bandpass fhi=2 | transp | + mutter v0=4.5 half=n | mutter slope0=0.4 half=n | + grey title="Shaping NMO" label2='Offset' unit2='km' screenratio=2 + ''') + +Flow('nsstack','nsnmo','stack') + +End()