Next: Nonstationarity, moving windows Up: CONTINUUM PICKING Previous: CONTINUUM PICKING

## The plane-wave destructor (PWD)

A plane wave in a wavefield u(t,x)=u(t-px) with stepout p can be extinguished with a partial differential operator that we write as a matrix where
 (13) (14)
The parameter p is called the wave number or Snell parameter and |p| can take on any value less than 1/v where v is the medium velocity. The wave's angle of propagation is .
#   vv = (aa Dx - pp Dt) uu
#
subroutine wavekill1( aa, pp, m1,n1,n2 , uu, vv)
integer conj, i1,i2, m1,n1,n2
real aa, pp, s11, s12, s21, s22, uu(m1,n2), vv(m1,n2-1)
s11 = -aa+pp;	s12 = aa+pp
s21 = -aa-pp;	s22 = aa-pp
call zero( m1*(n2-1), vv)
do i1=1, n1-1 {		# vv is one point shorter than uu on both axes.
do i2=1, n2-1 {
vv(i1,i2) = vv(i1,i2) +
uu(i1  ,i2) * s11 + uu(i1  ,i2+1) * s12 +
uu(i1+1,i2) * s21 + uu(i1+1,i2+1) * s22
}}
return; end


In a finite difference representation, the difference operator is a two-dimensional filter that fits on a differencing star. As a matrix operation, this two dimensional convolution is denoted .(More details can be found in my previous book ''.) The program wavekill1() applies the operator which can be specialized the operators , ,.I carefully arranged the side boundaries so the filter never runs off the sides of the data. Thus the output is shorter than the input by one point both the t-axis and the x-axis. The reason for using these side boundaries is so that large data sets can be chopped into independent sections without the boundaries themselves affecting the result. By chopping a large data set into sections, we can handle curved events as piecewise linear.

When only one wave is present and the data is adequately sampled, then finding the best value of p is a single-parameter, linear least-squares problem. Let be a vector whose components are values of taken on a mesh in (t,x). Likewise let contain .Since we wish ,we minimize the quadratic function of p
 (15)
by setting to zero the derivative getting
 (16)
As data will not always fit the model very well, it may be helpful to have some measure of goodness of fit. I suggest
 (17)
 (18)
which is known as the normalized correlation.  The program for this calculation is straightforward. I named the program puck() to denote picking on a continuum.

# measure coherency and dip, and compute residual  res = (Dx - p Dt) uu
#
subroutine puck ( m1, n1, n2, uu, coh, pp, res )
integer i1, i2, m1, n1,n2
real	uu(m1,n2), res(m1,n2), xx, xt, tt, coh, pp
temporary real dx(m1,n2-1), dt(m1,n2-1)
call wavekill1( 1., 0.,  m1,n1,n2 , uu, dx)
call wavekill1( 0.,-1.,  m1,n1,n2 , uu, dt)
xx = 1.e-30; tt = 1.e-30; xt = 0.
do i1=1,n1-1 {
do i2=1,n2-1 {
xt = xt + dt(i1,i2) * dx(i1,i2)
tt = tt + dt(i1,i2) * dt(i1,i2)
xx = xx + dx(i1,i2) * dx(i1,i2)
}}
coh = sqrt((xt/tt)*(xt/xx))
pp  =  xt/tt
call wavekill1( 1., pp,  m1,n1,n2 , uu, res)
return;	end


Finally, an undesirable feature of equation (13) is that the derivatives roughen the data so the spectrum of and is not that of .What I am doing now is putting the data through leaky integration on the time axis before I start. I am planning to switch this from t to x so the operator can be thought of as .Then the residual should be in phase with the input signal so I can subtract it from the data leaving cleaned up'' data.

Next: Nonstationarity, moving windows Up: CONTINUUM PICKING Previous: CONTINUUM PICKING
Stanford Exploration Project
1/13/1998