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 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 which would be extinguished by an filter. The 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 into a causal
part and an anticausal
part.
I applied a causal after generating
the (t,x)-space and an anticausal before making the -space.
I implemented the causality by taking
the square root of a Fourier domain representation
of causal differentiation,
namely, .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.