Java Fourier Transform Library

A FFT library written in Java


Java Fourier Transform Library

This is a library for computing 1-2 dimensional Fourier Transform. It was written with Java 7

You can import it with maven.

<dependency>
  <groupId>com.tambapps.fft4j</groupId>
  <artifactId>fft4j</artifactId>
  <version>1.0</version>
</dependency>

1D Fast Fourier Transform

Here is an example of a 1D fast fourier transform. There are several algorithms to perform FFT You can see all of them on the FourierAlgorithms class.

CVector input = new ArrayCVector(N);
fill(input); //fill the array with whatever you like
CVector result = new ArrayCVector(input.getSize());
CVectorUtils.copy(input, result);
FourierAlgorithms.BASIC.compute(result);

2D Fast Fourier Transform

You can apply 2D FFT with a FastFourierTransformer2D. You can change the algorithm used by the transformer to compute fft by setting the AlgorithmChooser.

FastFourierTransformer2D transformer2D = new FastFourierTransformer2D(Executors.newFixedThreadPool(4));
CArray2D array2D = new CArray2D(N, N);
fillArray(array2D);

transformer2D.transform(array2D);

FFTUtils.changeCenter(array2D);
Filters.threshold(200, true).apply(array2D);
displayArray(array2D); //display with whatever framework the array2D

transformer2D.inverse(array2D);
displayArray(array2D);

Filters

There are many filters implemented in the Filters class. If you want to implement your own, just extends AbstractFilter.

Change center

If you want to display an FFT, it can be useful to change the center. There is the function FFTUtils.changeCenter(array) for that.

##Groovy friendly the CArray2D and other classes have functions that define operator in groovy. Here is an example of groovy code

def vector = new CVector(N)
init(vector)
FourierAlgorithms.BASIC(vector)
display(vector)
for(int i = 0; i < vector.size ; i++) {
  println vector[i]
}
def array = new ArrayCVector(N, M)
init(array)
for(int i = 0; i < array.M ; i++) {
  for(int j = 0; i < array.N ; i++) {
    println array[i][j]
  }
}
display(array)
def recFilter = Filters.rectangle(size, size, true)
recFilter(array)
display(array)

Javadoc

Link