next up previous print clean
Next: GEOMETRY-BASED DECON Up: PIXEL-PRECISE VELOCITY SCANNING Previous: Smoothing in velocity

Rho filter

Notice the dark halo around the reconstruction in Figure 3. It was suppressed in Figure 5 by the subroutine halfdifa(). Recall that slant-stack inversion (see IEI for an example) requires an $\vert\omega\vert$ filter. Without doing any formal analysis I guessed that the same filter would be helpful here because the dark halo has a strong spectral component at $\omega=0$which would be extinguished by an $\vert\omega\vert$ filter. The $\vert\omega\vert$ filter is sometimes called a ``rho filter.''

Because of the close relation of slant-stack inversion to wave propagation and causality, I found it appealing to factor $\vert\omega\vert$ into a causal $\sqrt{-i\omega}$ part and an anticausal $\sqrt{ i\omega}$ part. I applied a causal $\sqrt{-i\omega}$ after generating the (t,x)-space and an anticausal $\sqrt{ i\omega}$before making the $(\tau,v^{-2})$-space. I implemented the causality by taking the square root of a Fourier domain representation of causal differentiation, namely, $\sqrt{1-Z}$.I show this in subroutine halfdifa(). 

# Half order causal derivative.  OK to equiv(xx,yy)
#
subroutine halfdifa( adj, add, n, xx,    yy  )
integer n2, i,       adj, add, n
real omega,                       xx(n), yy(n)
complex cz, cv(4096)
n2=1; while(n2<n) n2=2*n2;         if( n2 > 4096) call erexit('halfdif memory')
do i= 1, n2 {             cv(i) = 0.}
do i= 1, n
        if( adj == 0)   { cv(i) = xx(i)}
        else            { cv(i) = yy(i)}
call adjnull(       adj, add,    xx,n,  yy,n)
call ftu( +1., n2, cv)
                        do i= 1, n2 {
                                omega = (i-1.) * 2.*3.14159265 / n2
                                cz = csqrt( 1. - cexp( cmplx( 0., omega)))
                                if( adj != 0)   cz = conjg( cz)
                                cv(i) = cv(i) * cz
                                }
call ftu( -1., n2, cv)
do i= 1, n
        if( adj == 0)   { yy(i) = yy(i) + cv(i)}
        else            { xx(i) = xx(i) + cv(i)}
return; end

Notice also that vspray() includes a scaling variable named scale. I have not developed a theory for this scale factor, but if you omit it, amplitudes in the reconstructions will be far out of amplitude balance with the input.


next up previous print clean
Next: GEOMETRY-BASED DECON Up: PIXEL-PRECISE VELOCITY SCANNING Previous: Smoothing in velocity
Stanford Exploration Project
10/21/1998