/**
* JWave - Java implementation of wavelet transform algorithms
*
* Copyright 2010-2012 Christian Scheiblich
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This file JWave.java is part of JWave.
*
* @author Christian Scheiblich
* date 23.02.2010 14:26:47
* contact graetz@mailfish.de
*/
package math.transform.jwave;
import math.transform.jwave.handlers.TransformInterface;
import math.transform.jwave.handlers.DiscreteFourierTransform;
import math.transform.jwave.handlers.FastWaveletTransform;
import math.transform.jwave.handlers.WaveletPacketTransform;
import math.transform.jwave.handlers.DiscreteWaveletTransform;
import math.transform.jwave.handlers.wavelets.WaveletInterface;
import math.transform.jwave.handlers.wavelets.Coif06;
import math.transform.jwave.handlers.wavelets.Daub02;
import math.transform.jwave.handlers.wavelets.Daub03;
import math.transform.jwave.handlers.wavelets.Daub04;
import math.transform.jwave.handlers.wavelets.Haar02;
import math.transform.jwave.handlers.wavelets.Lege02;
import math.transform.jwave.handlers.wavelets.Lege04;
import math.transform.jwave.handlers.wavelets.Lege06;
/**
* Main class for doing little test runs for different transform types and
* different wavelets without JUnit.
*
* @date 23.02.2010 14:26:47
* @author Christian Scheiblich
*/
public class JWave {
/**
* Constructor.
*
* @date 23.02.2010 14:26:47
* @author Christian Scheiblich
*/
public JWave( ) {
} // JWave
/**
* Main method for doing little test runs for different transform types and
* different wavelets without JUnit. Requesting the transform type and the
* type of wavelet to be used else usage is printed.
*
* @date 23.02.2010 14:26:47
* @author Christian Scheiblich
* @param args
* [transformType] [waveletType]
*/
public static void main( String[ ] args ) {
String waveletTypeList = "Haar02, Lege02, Daub02, Lege04, Daub03, Lege06, Coif06, Daub04";
if( args.length < 2 || args.length > 3 ) {
System.err
.println( "usage: JWave [transformType] {waveletType} {noOfSteps}" );
System.err.println( "" );
System.err.println( "transformType: DFT, FWT, WPT, DWT" );
System.err.println( "waveletType : " + waveletTypeList );
System.err.println( "noOfSteps : " + "no of steps forward and reverse; optional" );
return;
} // if args
String wType = args[ 1 ];
WaveletInterface wavelet = null;
if( wType.equalsIgnoreCase( "haar02" ) )
wavelet = new Haar02( );
else if( wType.equalsIgnoreCase( "lege02" ) )
wavelet = new Lege02( );
else if( wType.equalsIgnoreCase( "daub04" ) )
wavelet = new Daub02( );
else if( wType.equalsIgnoreCase( "lege04" ) )
wavelet = new Lege04( );
else if( wType.equalsIgnoreCase( "daub06" ) )
wavelet = new Daub03( );
else if( wType.equalsIgnoreCase( "lege06" ) )
wavelet = new Lege06( );
else if( wType.equalsIgnoreCase( "coif06" ) )
wavelet = new Coif06( );
else if( wType.equalsIgnoreCase( "daub08" ) )
wavelet = new Daub04( );
else {
System.err.println( "usage: JWave [transformType] {waveletType}" );
System.err.println( "" );
System.err.println( "available wavelets are " + waveletTypeList );
return;
} // if wType
String tType = args[ 0 ];
TransformInterface bWave = null;
if( tType.equalsIgnoreCase( "dft" ) )
bWave = new DiscreteFourierTransform( );
else if( tType.equalsIgnoreCase( "fwt" ) )
bWave = new FastWaveletTransform( wavelet );
else if( tType.equalsIgnoreCase( "wpt" ) )
bWave = new WaveletPacketTransform( wavelet );
else if( tType.equalsIgnoreCase( "dwt" ) )
bWave = new DiscreteWaveletTransform( wavelet );
else {
System.err.println( "usage: JWave [transformType] {waveletType}" );
System.err.println( "" );
System.err.println( "available transforms are DFT, FWT, WPT, DFT" );
return;
} // if tType
// instance of transform
Transform t;
if( args.length > 2 ) {
String argNoOfSteps = args[ 2 ];
int noOfSteps = Integer.parseInt( argNoOfSteps );
t = new Transform( bWave, noOfSteps ); // perform less steps than possible
} else {
t = new Transform( bWave ); // perform all steps
}
double[ ] arrTime = { 1., 1., 1., 1., 1., 1., 1., 1. };
System.out.println( "" );
System.out.println( "time domain:" );
for( int p = 0; p < arrTime.length; p++ )
System.out.printf( "%9.6f", arrTime[ p ] );
System.out.println( "" );
double[ ] arrFreqOrHilb = t.forward( arrTime ); // 1-D forward transform
if( bWave instanceof DiscreteFourierTransform )
System.out.println( "frequency domain:" );
else
System.out.println( "Hilbert domain:" );
for( int p = 0; p < arrTime.length; p++ )
System.out.printf( "%9.6f", arrFreqOrHilb[ p ] );
System.out.println( "" );
double[ ] arrReco = t.reverse( arrFreqOrHilb ); // 1-D reverse transform
System.out.println( "reconstruction:" );
for( int p = 0; p < arrTime.length; p++ )
System.out.printf( "%9.6f", arrReco[ p ] );
System.out.println( "" );
} // main
} // class