使用Apache commons-maths3-3.6.1.jar包实现快速傅里叶变换(java)

    本例应用的是快速傅里叶变换 (fast Fourier transform),即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。

傅立叶原理表明:任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加。函数可以由三角函数构成的级数形式表示,从而提出任一函数都可以展成三角函数的无穷级数。

变换目的:傅立叶变换将原来难以处理的时域信号转换成了易于分析的频域信号(信号的频谱),可以利用一些工具对这些频域信号进行处理、加工。最后还可以利用傅立叶反变换将这些频域信号转换成时域信号。

FFT的一些应用场景:包括声音识别的连续信号采样,图像处理的特征分析,电路的滤波和谐波分析等。

以上都是在网上找的,我还没有找到切合的场景.

大神的理解:

https://zhuanlan.zhihu.com/p/19763358

 

 1 package com;
 2 
 3 import org.apache.commons.math3.complex.Complex;
 4 import org.apache.commons.math3.transform.DftNormalization;
 5 import org.apache.commons.math3.transform.FastFourierTransformer;
 6 import org.apache.commons.math3.transform.TransformType;
 7 /*
 8  * @description:快速傅里叶变换
 9  * */
10 
11 public class MathTransform{
12     public static void main(String[] args){
13         //定义输入数据类型,并初始化
14         double[] inputData = null;
15         //定义数组长度
16         int arrayLength = 4 * 1024;
17         inputData = new double[arrayLength]; 
18         for (int index = 0; index < inputData.length; index++){
19             //将经过运算的随机数赋值给inputdata
20             inputData[index] = (Math.random() - 0.5) * 100.0; 
21         } 
22         System.out.println("初始化完成"); 
23         //创建傅里叶方法实例
24         FastFourierTransformer fft = new FastFourierTransformer(DftNormalization.STANDARD);
25         Complex[] result = fft.transform(inputData, TransformType.FORWARD);
26         //将傅里叶变换前数据和变换后数据打印出来,显示前200
27         for(int i=0;i<200;i++){
28             System.out.print("第"+i+"个变换前数据为:"+inputData[i]+"\t"); 
29             System.out.println("第"+i+"个变换后数据为:"+result[i]); 
30         }
31     }
32 }

后续有新的认识后再补充~

 

转载于:https://www.cnblogs.com/xiao02fang/p/9908658.html

你可能感兴趣的:(使用Apache commons-maths3-3.6.1.jar包实现快速傅里叶变换(java))