

PREV PACKAGE NEXT PACKAGE  FRAMES NO FRAMES 
See:
Description
Class Summary  
ComplexDouble2DFFT  Computes the FFT of 2 dimensional complex, double precision data. 
ComplexDoubleFFT  Abstract Class representing FFT's of complex, double precision data. 
ComplexDoubleFFT_Mixed  Computes FFT's of complex, double precision data of arbitrary length n. 
ComplexDoubleFFT_Radix2  Computes FFT's of complex, double precision data where n is an integer power of 2. 
ComplexFloat2DFFT  Computes the FFT of 2 dimensional complex, single precision data. 
ComplexFloatFFT  Abstract Class representing FFT's of complex, single precision data. 
ComplexFloatFFT_Mixed  Computes FFT's of complex, single precision data of arbitrary length n. 
ComplexFloatFFT_Radix2  Computes FFT's of complex, single precision data where n is an integer power of 2. 
Factorize  Supplies static methods for factoring integers needed by various FFT classes. 
RealDoubleFFT  Abstract Class representing FFT's of real, double precision data. 
RealDoubleFFT_Even  Computes FFT's of real, double precision data when n is even, by computing complex FFT. 
RealDoubleFFT_Radix2  Computes FFT's of real, double precision data where n is an integral power of 2. 
RealFloat2DFFT_Even  EXPERIMENTAL! (till I think of something better): Computes the FFT of 2 dimensional real, single precision data. 
RealFloatFFT  Abstract Class representing FFT's of real, single precision data. 
RealFloatFFT_Radix2  Computes FFT's of real, single precision data where n is an integral power of 2. 
This package defines various classes for carrying out Fast Fourier Transforms (NOTE: See licencing issues). There are classes to handle: real and complex data; single and double precision; 1 and 2 dimensions; various FFT methods  although not all combinations are provided.
Although it would be attractive to define a single API, the variety of data types forbids this. The general API, however, is :
FFTclass fft = new FFTclass(n)creates an instance of FFTclass appropriate for computing FFT's of
n
data points. This allows it to precompute any twiddle factors it
may need. Each class defines (at least) these methods to transform,
backtransform (inverse transform without normalization) and inverse.
public void transform(doublefloat data[]);
public doublefloat[] toWraparoundOrder(doublefloat data[]);
transform
in
wraparound order. If transform
already
leaves the result in that order, data is returned as is.
public void backtransform(doublefloat data[]);
transform
.
The transformation is carried out in place.
public floatdouble normalization();
backtransform
to obtain the normalized inverse.
public void inverse(doublefloat data[]);
transform
.
The transformation is carried out in place.
To the extent that one needs a standard order at all, we have arbitrarily
chosen `wraparound' order as the preferred one. For testing purposes, or
when you dont want to have to understand a peculiar format, you may use the
toWraparoundOrder
method to convert the data to the following format.
If D[i] is the transform of d[i], where delta is the time spacing between points in the
orignal data d[i]:
Index  Time domain  Frequency domain 

0  d[t=0]  D[f=0] 
1  d[t=delta]  D[f=+1/(n delta)] 
2  d[t=2*delta]  D[f=+2/(n delta)] 
.  ...  .. 
n/2  d[t=n*delta/2]  D[f=+1/(2 delta)]=D[f=1/(2 delta)] 
.  ...  .. 
n3  d[t=(n3)delta]  D[f=3/(n delta)] 
n2  d[t=(n2)delta]  D[f=2/(n delta)] 
n1  d[t=(n1)delta]  D[f=1/(n delta)] 
The modifications I have made to port the routines from C to Java, and the additional classes developed were developed as part of my official duties as a U.S. government employee, and are therefore not subject to copyright.
Furthermore, this software is under development, and is in no way certified or guaranteed.


PREV PACKAGE NEXT PACKAGE  FRAMES NO FRAMES 