edu.mines.jtk.dsp
Class DifferenceFilter

java.lang.Object
  extended by edu.mines.jtk.dsp.DifferenceFilter

public class DifferenceFilter
extends java.lang.Object

A difference filter, with a transpose, inverse, and inverse-transpose. A 1-D difference filter is an approximation to a backward-difference filter: y[i] = x[i]-0.999*x[i-1]. The constant 0.999 is less than one so that the recursive inverse filter y[i] = x[i]+0.999*y[i-1] is stable. The inverse filter is sometimes called "leaky integration", and is especially useful for preconditioning inverse problems with smooth solutions.

Sequential application of the backward-difference filter and its transpose yields an approximation to a negative centered 2nd-difference filter: y[i] = -x[i-1]+2*x[i]-x[i+1].

Extensions to 2-D and 3-D backward-difference filters are defined as in Claerbout, J., 1998, Multidimensional recursive filters via a helix: Geophysics, v. 63, n. 5, p. 1532-1541.

These extensions were obtained here by factoring the negative centered 2-D and 3-D 2nd-difference filters, respectively, using the Wilson-Burg algorithm, as in Fomel, S., Sava, P., Rickett, J., and Claerbout, J., 2003, The Wilson-Burg method of spectral factorization with application to helical filtering: Geophysical Prospecting, v. 51, p. 409-420.

For all dimensions, these approximations yield less than one percent error in the negative centered 2nd-difference filter, relative to the exact central filter coefficient. For example, the error for a 2-D filter is less than 0.04 = 0.01*4, where 4 is the central coefficient in the exact negative 2nd-difference filter.

Version:
2006.10.10
Author:
Dave Hale, Colorado School of Mines

Constructor Summary
DifferenceFilter()
           
 
Method Summary
 void apply(float[][][] x, float[][][] y)
          Applies this difference filter.
 void apply(float[][] x, float[][] y)
          Applies this difference filter.
 void apply(float[] x, float[] y)
          Applies this difference filter.
 void applyInverse(float[][][] x, float[][][] y)
          Applies the inverse of this filter.
 void applyInverse(float[][] x, float[][] y)
          Applies the inverse of this filter.
 void applyInverse(float[] x, float[] y)
          Applies the inverse of this filter.
 void applyInverseTranspose(float[][][] x, float[][][] y)
          Applies the inverse transpose of this filter.
 void applyInverseTranspose(float[][] x, float[][] y)
          Applies the inverse transpose of this filter.
 void applyInverseTranspose(float[] x, float[] y)
          Applies the inverse transpose of this filter.
 void applyTranspose(float[][][] x, float[][][] y)
          Applies the transpose of this filter.
 void applyTranspose(float[][] x, float[][] y)
          Applies the transpose of this filter.
 void applyTranspose(float[] x, float[] y)
          Applies the transpose of this filter.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DifferenceFilter

public DifferenceFilter()
Method Detail

apply

public void apply(float[] x,
                  float[] y)
Applies this difference filter.

Parameters:
x - the filter input.
y - the filter output.

apply

public void apply(float[][] x,
                  float[][] y)
Applies this difference filter.

Parameters:
x - the filter input.
y - the filter output.

apply

public void apply(float[][][] x,
                  float[][][] y)
Applies this difference filter.

Parameters:
x - the filter input.
y - the filter output.

applyTranspose

public void applyTranspose(float[] x,
                           float[] y)
Applies the transpose of this filter.

Parameters:
x - the filter input.
y - the filter output.

applyTranspose

public void applyTranspose(float[][] x,
                           float[][] y)
Applies the transpose of this filter.

Parameters:
x - the filter input.
y - the filter output.

applyTranspose

public void applyTranspose(float[][][] x,
                           float[][][] y)
Applies the transpose of this filter.

Parameters:
x - the filter input.
y - the filter output.

applyInverse

public void applyInverse(float[] x,
                         float[] y)
Applies the inverse of this filter.

Parameters:
x - the filter input.
y - the filter output.

applyInverse

public void applyInverse(float[][] x,
                         float[][] y)
Applies the inverse of this filter.

Parameters:
x - the filter input.
y - the filter output.

applyInverse

public void applyInverse(float[][][] x,
                         float[][][] y)
Applies the inverse of this filter.

Parameters:
x - the filter input.
y - the filter output.

applyInverseTranspose

public void applyInverseTranspose(float[] x,
                                  float[] y)
Applies the inverse transpose of this filter.

Parameters:
x - the filter input.
y - the filter output.

applyInverseTranspose

public void applyInverseTranspose(float[][] x,
                                  float[][] y)
Applies the inverse transpose of this filter.

Parameters:
x - the filter input.
y - the filter output.

applyInverseTranspose

public void applyInverseTranspose(float[][][] x,
                                  float[][][] y)
Applies the inverse transpose of this filter.

Parameters:
x - the filter input.
y - the filter output.