最近项目上有个需求,需要使用java来做FFT变换,考虑到自己编写FFT函数容易出错,在Maven里面找到了一个FFT框架,在此对其用法做简单的介绍,并使用matlab做简单的对比测试。
Jtransform依赖: <dependency> <groupId>com.github.rwl</groupId> <artifactId>jtransforms</artifactId> <version>2.4.0</version> </dependency> Jtransform 在线API http://wendykierp.github.io/JTransforms/apidocs/ 有问题查API,不过API写得不是非常清楚Java代码 import edu.emory.mathcs.jtransforms.fft.DoubleFFT_1D; //apidoc //http://wendykierp.github.io/JTransforms/apidocs/ public class Main { public static void main(String[] args) { System.out.println("FFTW"); //要变换的长度,传入的参数为后面传入数组a长度的一半 DoubleFFT_1D fft = new DoubleFFT_1D(10); //变换的数,结果也是存在这个里面分别是虚数和实数 double[] a = new double[20]; int num = 1; for(int i = 0; i < a.length; i += 2){ a[i] = num; num++; } System.out.println(); System.out.println("Before fftw"); for(int i = 0; i < a.length; i++){ System.out.print(a[i] + " "); } fft.complexForward(a); System.out.println("After fftw"); for(int i = 0; i < a.length; i++){ System.out.print(a[i] + " "); } } } Java运行结果 Matlab对比输出如下:
matlab命令行如下: 结果如下: 可以看到,后面在Matlab的结果里面都是0,Java的FFT里面到了10e-15这个数量级,也是吻合的。
