edu.mines.jtk.dsp
Class RecursiveCascadeFilter

java.lang.Object
  extended by edu.mines.jtk.dsp.RecursiveCascadeFilter
Direct Known Subclasses:
ButterworthFilter

public class RecursiveCascadeFilter
extends java.lang.Object

A recursive filter implemented as a cascade of 2nd-order filters. The output of each 2nd-order recursive filter becomes the input to the next 2nd-order recursive filter in the cascade.

An advantage of recursive cascade filters is that they can be applied in-place; input and output arrays may be the same arrays.

A disadvantage of recursive cascade filters is that a forward-reverse application yields only an approximation to a symmetric zero-phase impulse response. This approximation is worst at array ends where the output of each 2nd-order filter truncated.

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

Constructor Summary
protected RecursiveCascadeFilter()
           
  RecursiveCascadeFilter(Cdouble[] poles, Cdouble[] zeros, double gain)
          Constructs a recursive filter with specified poles, zeros, and gain.
 
Method Summary
 void apply1Forward(float[][][] x, float[][][] y)
          Applies this filter along the 1st dimension in the forward direction.
 void apply1Forward(float[][] x, float[][] y)
          Applies this filter along the 1st dimension in the forward direction.
 void apply1ForwardReverse(float[][][] x, float[][][] y)
          Applies this filter along the 1st dimension in the forward and reverse directions.
 void apply1ForwardReverse(float[][] x, float[][] y)
          Applies this filter along the 1st dimension in the forward and reverse directions.
 void apply1Reverse(float[][][] x, float[][][] y)
          Applies this filter along the 1st dimension in the reverse direction.
 void apply1Reverse(float[][] x, float[][] y)
          Applies this filter along the 1st dimension in the reverse direction.
 void apply2Forward(float[][][] x, float[][][] y)
          Applies this filter along the 2nd dimension in the forward direction.
 void apply2Forward(float[][] x, float[][] y)
          Applies this filter along the 2nd dimension in the forward direction.
 void apply2ForwardReverse(float[][][] x, float[][][] y)
          Applies this filter along the 2nd dimension in the forward and reverse directions.
 void apply2ForwardReverse(float[][] x, float[][] y)
          Applies this filter along the 2nd dimension in the forward and reverse directions.
 void apply2Reverse(float[][][] x, float[][][] y)
          Applies this filter along the 2nd dimension in the reverse direction.
 void apply2Reverse(float[][] x, float[][] y)
          Applies this filter along the 2nd dimension in the reverse direction.
 void apply3Forward(float[][][] x, float[][][] y)
          Applies this filter along the 3rd dimension in the forward direction.
 void apply3ForwardReverse(float[][][] x, float[][][] y)
          Applies this filter along the 3rd dimension in the forward and reverse directions.
 void apply3Reverse(float[][][] x, float[][][] y)
          Applies this filter along the 3rd dimension in the reverse direction.
 void applyForward(float[] x, float[] y)
          Applies this filter in the forward direction.
 void applyForwardReverse(float[] x, float[] y)
          Applies this filter in the forward and reverse directions.
 void applyReverse(float[] x, float[] y)
          Applies this filter in the reverse direction.
protected  void init(Cdouble[] poles, Cdouble[] zeros, double gain)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RecursiveCascadeFilter

public RecursiveCascadeFilter(Cdouble[] poles,
                              Cdouble[] zeros,
                              double gain)
Constructs a recursive filter with specified poles, zeros, and gain. The coefficients of this recursive filter are real. Therefore, poles and zeros with non-zero imaginary parts must have conjugate mates.

Parameters:
poles - array of complex poles.
zeros - array of complex poles.
gain - the filter gain.

RecursiveCascadeFilter

protected RecursiveCascadeFilter()
Method Detail

applyForward

public void applyForward(float[] x,
                         float[] y)
Applies this filter in the forward direction. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

applyReverse

public void applyReverse(float[] x,
                         float[] y)
Applies this filter in the reverse direction. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

applyForwardReverse

public void applyForwardReverse(float[] x,
                                float[] y)
Applies this filter in the forward and reverse directions. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

apply1Forward

public void apply1Forward(float[][] x,
                          float[][] y)
Applies this filter along the 1st dimension in the forward direction. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

apply1Reverse

public void apply1Reverse(float[][] x,
                          float[][] y)
Applies this filter along the 1st dimension in the reverse direction. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

apply1ForwardReverse

public void apply1ForwardReverse(float[][] x,
                                 float[][] y)
Applies this filter along the 1st dimension in the forward and reverse directions. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

apply2Forward

public void apply2Forward(float[][] x,
                          float[][] y)
Applies this filter along the 2nd dimension in the forward direction. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

apply2Reverse

public void apply2Reverse(float[][] x,
                          float[][] y)
Applies this filter along the 2nd dimension in the reverse direction. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

apply2ForwardReverse

public void apply2ForwardReverse(float[][] x,
                                 float[][] y)
Applies this filter along the 2nd dimension in the forward and reverse directions. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

apply1Forward

public void apply1Forward(float[][][] x,
                          float[][][] y)
Applies this filter along the 1st dimension in the forward direction. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

apply1Reverse

public void apply1Reverse(float[][][] x,
                          float[][][] y)
Applies this filter along the 1st dimension in the reverse direction. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

apply1ForwardReverse

public void apply1ForwardReverse(float[][][] x,
                                 float[][][] y)
Applies this filter along the 1st dimension in the forward and reverse directions. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

apply2Forward

public void apply2Forward(float[][][] x,
                          float[][][] y)
Applies this filter along the 2nd dimension in the forward direction. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

apply2Reverse

public void apply2Reverse(float[][][] x,
                          float[][][] y)
Applies this filter along the 2nd dimension in the reverse direction. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

apply2ForwardReverse

public void apply2ForwardReverse(float[][][] x,
                                 float[][][] y)
Applies this filter along the 2nd dimension in the forward and reverse directions. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

apply3Forward

public void apply3Forward(float[][][] x,
                          float[][][] y)
Applies this filter along the 3rd dimension in the forward direction. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

apply3Reverse

public void apply3Reverse(float[][][] x,
                          float[][][] y)
Applies this filter along the 3rd dimension in the reverse direction. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

apply3ForwardReverse

public void apply3ForwardReverse(float[][][] x,
                                 float[][][] y)
Applies this filter along the 3rd dimension in the forward and reverse directions. Input and output arrays may be the same array. Lengths of the input and output arrays must be equal.

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

init

protected void init(Cdouble[] poles,
                    Cdouble[] zeros,
                    double gain)