JSci.maths.FourierMath Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jsci Show documentation
Show all versions of jsci Show documentation
JSci is a set of open source Java packages. The aim is to encapsulate scientific methods/principles in the most natural way possible. As such they should greatly aid the development of scientific based software.
It offers: abstract math interfaces, linear algebra (support for various matrix and vector types), statistics (including probability distributions), wavelets, newtonian mechanics, chart/graph components (AWT and Swing), MathML DOM implementation, ...
Note: some packages, like javax.comm, for the astro and instruments package aren't listed as dependencies (not available).
The newest version!
package JSci.maths;
/**
* The Fourier math library.
* This class cannot be subclassed or instantiated because all methods are static.
* Use sort(transform(sort(...)))
for the discrete analogue of the continuous Fourier transform,
* and sort(inverseTransform(sort(...)))
for the inverse transform.
* @jsci.planetmath FourierTransform
* @version 0.9
* @author Mark Hale
*/
public final class FourierMath extends AbstractMath implements NumericalConstants {
private FourierMath() {}
/**
* Fourier transform (2Pi convention).
* @param data an array containing the positive time part of the signal
* followed by the negative time part.
* @return an array containing positive frequencies in ascending order
* followed by negative frequencies in ascending order.
* @author Don Cross
*/
public static Complex[] transform(final Complex data[]) {
final int N=data.length;
if(!isPowerOf2(N))
throw new IllegalArgumentException("The number of samples must be a power of 2.");
final double arrayRe[]=new double[N];
final double arrayIm[]=new double[N];
final int numBits=numberOfBitsNeeded(N);
// Simultaneous data copy and bit-reversal ordering into output
for(int i=0;i0)
return i;
}
}
/**
* Reverse bits.
* @author Don Cross
*/
private static int reverseBits(int index,final int numBits) {
int i,rev;
for(i=rev=0;i>=1;
}
return rev;
}
/**
* Sorts the output from the Fourier transfom methods into
* ascending frequency/time order.
*/
public static Complex[] sort(final Complex output[]) {
final Complex ret[]=new Complex[output.length];
final int Nby2=output.length/2;
for(int i=0;i