Class Lift

  • Direct Known Subclasses:
    MyWavelet

    public abstract class Lift
    extends java.lang.Object

    class liftbase: base class for simple Lifting Scheme wavelets using split, predict, update or update, predict, merge steps.

    Simple lifting scheme wavelets consist of three steps, a split/merge step, predict step and an update step:

    • The split step divides the elements in an array so that the even elements are in the first half and the odd elements are in the second half.

    • The merge step is the inverse of the split step. It takes two regions of an array, an odd region and an even region and merges them into a new region where an even element alternates with an odd element.

    • The predict step calculates the difference between an odd element and its predicted value based on the even elements. The difference between the predicted value and the actual value replaces the odd element.

    • The predict step operates on the odd elements. The update step operates on the even element, replacing them with a difference between the predict value and the actual odd element. The update step replaces each even element with an average. The result of the update step becomes the input to the next recursive step in the wavelet calculation.

    The split and merge methods are shared by all Lifting Scheme wavelet algorithms. This base class provides the transform and inverse transform methods (forwardTrans and inverseTrans). The predict and update methods are abstract and are defined for a particular Lifting Scheme wavelet sub-class.

    References:

    • The Wavelet Lifting Scheme by Ian Kaplan, www.bearcave.com. This is the parent web page for this Java source code.
    • Ripples in Mathematics: the Discrete Wavelet Transform by Arne Jense and Anders la Cour-Harbo, Springer, 2001
    • Building Your Own Wavelets at Home in Wavelets in Computer Graphics

    Copyright and Use

    You may use this source code without limitation and without fee as long as you include:

    This software was written and is copyrighted by Ian Kaplan, Bear Products International, www.bearcave.com, 2001.

    This software is provided "as is", without any warrenty or claim as to its usefulness. Anyone who uses this source code uses it at their own risk. Nor is any support provided by Ian Kaplan and Bear Products International.

    Please send any bug fixes or suggested source changes to:

         iank@bearcave.com
     
    Author:
    Ian Kaplan
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      protected static class  Lift.Direction  
    • Constructor Summary

      Constructors 
      Constructor Description
      Lift()  
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      void forwardTrans​(double[] vec)
      Simple wavelet Lifting Scheme forward transform
      void inverseTrans​(double[] vec)
      Default two step Lifting Scheme inverse wavelet transform
      protected void merge​(double[] vec, int N)
      Merge the odd elements from the second half of the N element region in the array with the even elements in the first half of the N element region.
      protected abstract void predict​(double[] vec, int N, Lift.Direction direction)
      Predict step, to be defined by the subclass
      protected void split​(double[] vec, int N)
      Split the vec into even and odd elements, where the even elements are in the first half of the vector and the odd elements are in the second half.
      protected abstract void update​(double[] vec, int N, Lift.Direction direction)
      Update step, to be defined by the subclass
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • Lift

        public Lift()
    • Method Detail

      • forwardTrans

        public void forwardTrans​(double[] vec)

        Simple wavelet Lifting Scheme forward transform

        forwardTrans is passed an array of doubles. The array size must be a power of two. Lifting Scheme wavelet transforms are calculated in-place and the result is returned in the argument array.

        The result of forwardTrans is a set of wavelet coefficients ordered by increasing frequency and an approximate average of the input data set in vec[0]. The coefficient bands follow this element in powers of two (e.g., 1, 2, 4, 8...).

        Parameters:
        vec - input vector
      • inverseTrans

        public void inverseTrans​(double[] vec)

        Default two step Lifting Scheme inverse wavelet transform

        inverseTrans is passed the result of an ordered wavelet transform, consisting of an average and a set of wavelet coefficients. The inverse transform is calculated in-place and the result is returned in the argument array.

        Parameters:
        vec - input vector
      • merge

        protected void merge​(double[] vec,
                             int N)
        Merge the odd elements from the second half of the N element region in the array with the even elements in the first half of the N element region. The result will be the combination of the odd and even elements in a region of length N.
        Parameters:
        vec - input vector
        N - size of input vector
      • predict

        protected abstract void predict​(double[] vec,
                                        int N,
                                        Lift.Direction direction)
        Predict step, to be defined by the subclass
        Parameters:
        vec - input array
        N - size of region to act on (from 0..N-1)
        direction - forward or inverse transform
      • split

        protected void split​(double[] vec,
                             int N)
        Split the vec into even and odd elements, where the even elements are in the first half of the vector and the odd elements are in the second half.
        Parameters:
        vec - input vector
        N - size of input vector
      • update

        protected abstract void update​(double[] vec,
                                       int N,
                                       Lift.Direction direction)
        Update step, to be defined by the subclass
        Parameters:
        vec - input array
        N - size of region to act on (from 0..N-1)
        direction - forward or inverse transform