Package org.opensourcephysics.numerics
Class FFT
java.lang.Object
org.opensourcephysics.numerics.FFT
FFT computes FFT's of complex, double precision data of arbitrary length n.
This class has been copied from Bruce Miller's FFT package for use in the
Open Source Physics Project. The original package contains code for other transformations
and other data types.
This class uses the Mixed Radix method; it has special methods to handle
factors 2, 3, 4, 5, 6 and 7, as well as a general factor.
This algorithm appears to be faster than the Radix2 method, when both methods apply, but requires extra storage (which FFTComplex manages itself).
Complex data is represented by 2 double values in sequence: the real and imaginary parts. Thus N data points are represented by a double array dimensioned to 2*N. The physical layout in the array data, of the mathematical data d[i] is as follows:
Re(d[i]) = data[i0 + stride*i] Im(d[i]) = data[i0 + stride*i+1]The default offset, i0, is 0 and the stride is 2. The transformed data is returned in the original data array in wrap-around order.
- Author:
- Bruce R. Miller bruce.miller@nist.gov, Contribution of the National Institute of Standards and Technology,, not subject to copyright., Derived from GSL (Gnu Scientific Library), GSL's FFT Code by Brian Gough bjg@vvv.lanl.gov, Since GSL is released under,
GPL,, this class must also be.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptiondouble[]
backtransform
(double[] data) Computes the back Fast Fourier Transform of data leaving the result in data.static int[]
factor
(int n, int[] fromfactors) Return the prime factors of n.int
getN()
Gets the number of complex data points.double[]
getNaturalFreq
(double delta) Gets an array containing the frequencies in natural order.double[]
getNaturalFreq
(double xmin, double xmax) Gets an array containing the frequencies in natural order.double[]
Gets an array containing the mode numbers in natural order.double[]
getNaturalOmega
(double delta) Gets an array containing the frequencies in natural order.double[]
getNaturalOmega
(double xmin, double xmax) Gets an array containing the frequencies in natural order.double
Gets the normalization constant.double[]
getWrappedFreq
(double delta) Gets an array containing the frequencies in wrap-around order.double[]
getWrappedFreq
(double xmin, double xmax) Gets an array containing the frequencies in wrap-around order.double[]
Gets an array containing the mode numbers in wrap-around order.double[]
getWrappedOmega
(double delta) Gets an array containing the angular frequencies (wavenumber) in wrap-around order.double[]
getWrappedOmega
(double xmin, double xmax) Gets an array containing the angular frequencies (wavenumber) in wrap-around order.double[]
inverse
(double[] data) Computes the (nomalized) inverse FFT of data, leaving it in place.void
setN
(int n) Sets the number of complex data points.void
setNormalization
(double norm) Sets the normalization constant.double[]
toNaturalOrder
(double[] data) Reorder the transformed data from most negative frequency to most positive frequency leaving the result in data.double[]
toWrapAroundOrder
(double[] data) Reorder the data using wraparound order.double[]
transform
(double[] data) Computes the Fast Fourier Transform of data leaving the result in data.
-
Constructor Details
-
FFT
public FFT(int n) Constructs a complex FFT transformation for n complex data points.- Parameters:
n
- the number of complex data points
-
FFT
public FFT()Constructs a complex FFT transformation.
-
-
Method Details
-
setN
public void setN(int n) Sets the number of complex data points.- Parameters:
n
- int
-
getN
public int getN()Gets the number of complex data points.- Returns:
- int
-
setNormalization
public void setNormalization(double norm) Sets the normalization constant. The toNaturalOrder method normalizes data.- Parameters:
norm
- double
-
getNormalization
public double getNormalization()Gets the normalization constant. The toNaturalOrder method normalizes data.- Returns:
- the normalization
-
transform
public double[] transform(double[] data) Computes the Fast Fourier Transform of data leaving the result in data. The given array is returned after it has been transformed.- Parameters:
data
- double[] the data to be transformed- Returns:
- double[] the data after the FFT
-
backtransform
public double[] backtransform(double[] data) Computes the back Fast Fourier Transform of data leaving the result in data. The given array is returned after it has been transformed.- Parameters:
data
- double[] the data to be transformed- Returns:
- double[] the data after the FFT
-
inverse
public double[] inverse(double[] data) Computes the (nomalized) inverse FFT of data, leaving it in place. The frequency domain data must be in wrap-around order, and be stored in the following locations:Re(D[i]) = data[i] Im(D[i]) = data[i+1]
- Parameters:
data
- double[] the data to be transformed- Returns:
- double[] the data after the FFT
-
toNaturalOrder
public double[] toNaturalOrder(double[] data) Reorder the transformed data from most negative frequency to most positive frequency leaving the result in data. Divides by the normalization to remove the FFT scaling.- Parameters:
data
- double[] the data to be transformed- Returns:
- double[] the data after the FFT
-
toWrapAroundOrder
public double[] toWrapAroundOrder(double[] data) Reorder the data using wraparound order. Multiplies by the normalization to reverse the toNaturalOrder method.- Parameters:
data
- double[] the data to be transformed- Returns:
- double[] the data after the FFT
-
getWrappedModes
public double[] getWrappedModes()Gets an array containing the mode numbers in wrap-around order.- Returns:
- the array of mode numbers
-
getWrappedOmega
public double[] getWrappedOmega(double delta) Gets an array containing the angular frequencies (wavenumber) in wrap-around order. Samples in the orginal data are separated by delta.- Parameters:
delta
-- Returns:
- the array of frequencies
-
getWrappedOmega
public double[] getWrappedOmega(double xmin, double xmax) Gets an array containing the angular frequencies (wavenumber) in wrap-around order. The first data point is at xmin (tmin) and the last data point is at xmax (tmax).- Parameters:
xmin
-xmax
-- Returns:
- the array of frequencies
-
getWrappedFreq
public double[] getWrappedFreq(double delta) Gets an array containing the frequencies in wrap-around order. Samples in the data are separated by delta.- Parameters:
delta
-- Returns:
- the array of frequencies
-
getWrappedFreq
public double[] getWrappedFreq(double xmin, double xmax) Gets an array containing the frequencies in wrap-around order. The first data point is at xmin (tmin) and the last data point is at xmax (tmax).- Parameters:
xmin
-xmax
-- Returns:
- the array of frequencies
-
getNaturalFreq
public double[] getNaturalFreq(double delta) Gets an array containing the frequencies in natural order. Data are separated by delta.- Parameters:
delta
-- Returns:
- the array of frequencies
-
getNaturalFreq
public double[] getNaturalFreq(double xmin, double xmax) Gets an array containing the frequencies in natural order. The first data point is at xmin (tmin) and the last data point is at xmax (tmax).- Parameters:
xmin
-xmax
-- Returns:
- the array of frequencies
-
getNaturalOmega
public double[] getNaturalOmega(double delta) Gets an array containing the frequencies in natural order. Data are separated by delta.- Parameters:
delta
-- Returns:
- the array of frequencies
-
getNaturalOmega
public double[] getNaturalOmega(double xmin, double xmax) Gets an array containing the frequencies in natural order. The first data point is at xmin (tmin) and the last data point is at xmax (tmax).- Parameters:
xmin
-xmax
-- Returns:
- the array of frequencies
-
getNaturalModes
public double[] getNaturalModes()Gets an array containing the mode numbers in natural order.- Returns:
- the array of mode numbers
-
factor
public static int[] factor(int n, int[] fromfactors) Return the prime factors of n. The method first extracts any factors in fromfactors, in order (which needn't actually be prime). Remaining factors in increasing order follow.- Parameters:
n
-fromfactors
-- Returns:
-