Apache Commons Math3探索之快速傅立叶变换代码示例

上一篇文章中我们了解了Apache Commons Math3探索之多项式曲线拟合实现代码,今天我们就来看看如何通过apache commons math3实现快速傅里叶变换,下面是具体内容。

傅立叶变换:org.apache.commons.math3.transform.FastFourierTransformer类。

用法示例代码:

double inputData = new double[arrayLength];
// ... 给inputData赋值
FastFourierTransformer fft = new FastFourierTransformer(DftNormalization.STANDARD);
Complex[] result = fft.transform(inputData, TransformType.FORWARD); 

使用还是非常简单的。首先要创建待计算数据的数组,可以是double类型,亦可是org.apache.commons.math3.complex.Complex类型,然后创建org.apache.commons.math3.transform.FastFourierTransformer对象实例,最后调用其transform方法即可得到存放于复数数组中的傅立叶变换结果。
完整的示例代码如下:

import org.apache.commons.math3.transform.DftNormalization;
import org.apache.commons.math3.transform.FastFourierTransformer;
import org.apache.commons.math3.transform.TransformType;
interface TestCase
{
  public Object run(List<Object> params) throws Exception;
  public List<Object> getParams();
}
class CalcFFT implements TestCase
{
  public CalcFFT()
  {
   System.out.print("本算例用于计算快速傅立叶变换。正在初始化 计算数据(" + arrayLength + "点)... ...");
   inputData = new double[arrayLength];
   for (int index = 0; index < inputData.length; index++)
   {
     inputData[index] = (Math.random() - 0.5) * 100.0;
   }
   System.out.println("初始化完成");
  }
  @Override
  public List<Object> getParams()
  {
   return null;
  }
  @Override
  public Object run(List<Object> params) throws Exception
  {
   FastFourierTransformer fft = new FastFourierTransformer(DftNormalization.STANDARD);
   Complex[] result = fft.transform(inputData, TransformType.FORWARD);
   return result;
  }
  private double[] inputData = null;
  private final int arrayLength = 4 * 1024*1024;
}
public class TimeCostCalculator
{
  public TimeCostCalculator()
  {
  }
  /**
  * 计算指定对象的运行时间开销。
  *
  * @param testCase 指定被测对象。
  * @return 返回sub.run的时间开销,单位为s。
  * @throws Exception
  */
  public double calcTimeCost(TestCase testCase) throws Exception
  {
   List<Object> params = testCase.getParams();
   long startTime = System.nanoTime();
   testCase.run(params);
   long stopTime = System.nanoTime();
   System.out.println("start: " + startTime + " / stop: " + stopTime);
   double timeCost = (stopTime - startTime) * 1.0e-9;
   //   double timeCost = BigDecimal.valueOf(stopTime - startTime, 9).doubleValue();
   return timeCost;
  }
  public static void main(String[] args) throws Exception
  {
   TimeCostCalculator tcc = new TimeCostCalculator();
   double timeCost;
   System.out.println("--------------------------------------------------------------------------");
   timeCost = tcc.calcTimeCost(new CalcFFT());
   System.out.println("time cost is: " + timeCost + "s");
   System.out.println("--------------------------------------------------------------------------");
  }
} 

在i5四核处理器+16GB内存的台式机上,计算4百万点FFT,耗时0.7s。还是挺快的。

总结

以上就是本文关于Apache Commons Math3探索之快速傅立叶变换代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Apache Commons Math3学习之数值积分实例代码、apache zookeeper使用方法实例详解等,有什么问题可以随时留言,小编会及时回复大家的。最后推荐几本有关Java编程方面不错的书籍,免费下载,供广大编程爱好及工作者参考,提高!

Java Web开发就该这样学 (王洋著) pdf扫描版

http://www.jb51.net/books/561375.html

Spring+MyBatis企业应用实战 完整pdf扫描版

http://www.jb51.net/books/560647.html

希望大家喜欢,更多精彩内容,就在http://www.jb51.net/

(0)

相关推荐

  • java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion问题解决方法

    读取本地的xml文件,通过DOM进行解析,DOM解析的特点就是把整个xml文件装载入内存中,形成一颗DOM树形结构,树结构是方便遍历和和操纵. DOM解析的特性就是读取xml文件转换为 dom树形结构,通过节点进行遍历. 这是W3c关于节点的概念 如果xml中包含有大量的数据,由于dom一次性把xml装入内存中的特性,所以dom不适合于包含大量数据的xml解析.当包含有大量xml的时候,用SAX进行解析比较节省内存. 下面是一个运用DOM进行解析xml文件的例子: xml文件结构如下: <?xm

  • SVN出现提示org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir解决方案

    SVN出现提示org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir解决方案 第一种方法: 通过svn插件来清理,首先选中项目,右键,选择team->refresh/cleanup即可.然后再更新文件就不会提示org.apache.subversion.javahl.ClientException: Attempted to lock an already-lockeddir了.但

  • Java中使用Apache POI读取word文件简单示例

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 1.读取word 2003及word 2007需要的jar包 读取 2003 版本(.doc)的word文件相对来说比较简单,只需要 poi-3.5-beta6-20090622.jar 和 poi-scratchpad-3.5-beta6-20090622.jar 两个 jar 包即可, 而 2007 版本(.docx)就麻烦多,我说的这个麻烦不

  • java Apache poi 对word doc文件进行读写操作

    使用POI读写Word doc文件 Apache poi的hwpf模块是专门用来对word doc文件进行读写操作的.在hwpf里面我们使用HWPFDocument来表示一个word doc文档.在HWPFDocument里面有这么几个概念: Range:它表示一个范围,这个范围可以是整个文档,也可以是里面的某一小节(Section),也可以是某一个段落(Paragraph),还可以是拥有共同属性的一段文本(CharacterRun).   Section:word文档的一个小节,一个word文

  • java基于Apache FTP实现文件上传、下载、修改文件名、删除

    Apache FTP 是应用比较广泛的FTP上传客户端工具,它易于操作,代码简略,结构清晰,是做FTP文件客户端管理软件的优先之选.FTP的操作包括:FTP文件上传(断点续传).FTP文件下载.FTP文件重命名.FTP文件删除,这些操作已经将FTP应用管理的方式发挥的淋漓尽致了,So 我一直都用此种方式来实现FTP文件服务器的管理工作:下附FTP工具代码. 1.FTP文件操作状态枚举类 package com.scengine.wtms.utils.ftp; public enum FTPSta

  • Apache Commons Math3探索之快速傅立叶变换代码示例

    上一篇文章中我们了解了Apache Commons Math3探索之多项式曲线拟合实现代码,今天我们就来看看如何通过apache commons math3实现快速傅里叶变换,下面是具体内容. 傅立叶变换:org.apache.commons.math3.transform.FastFourierTransformer类. 用法示例代码: double inputData = new double[arrayLength]; // ... 给inputData赋值 FastFourierTran

  • Apache Commons Math3探索之多项式曲线拟合实现代码

    上一篇文章我们介绍了Apache Commons Math3学习之数值积分实例代码,这里给大家分享math3多项式曲线拟合的相关内容,具体如下. 多项式曲线拟合:org.apache.commons.math3.fitting.PolynomialCurveFitter类. 用法示例代码: // ... 创建并初始化输入数据: double[] x = new double[...]; double[] y = new double[...]; 将原始的x-y数据序列合成带权重的观察点数据序列:

  • C语言数据结构算法之实现快速傅立叶变换

    C语言数据结构算法之实现快速傅立叶变换 本实例将实现二维快速傅立叶变换,同时也将借此实例学习用c语言实现矩阵的基本操作.复数的基本掾作,复习所学过的动态内存分配.文件操作.结构指针的函数调用等内容. 很久以来,傅立叶变换一直是许多领域,如线性系统.光学.概率论.量子物理.天线.数字图像处理和信号分析等的一个基本分析工具,但是即便使用计算速度惊人的计算机计算离散傅立叶变换所花费的时间也常常是难以接受的,因此导致了快速傅立叶变换(FFT)的产生. 本实例将对一个二维数组进行正.反快速傅立叶变换.正傅

  • Apache Commons Math3学习之数值积分实例代码

    Apache.Commons.Math3里面的数值积分支持类采用的是"逼近法",即,先对大区间做一次积分,再对小区间做一次积分,若两次积分结果的差值小于某一设定的误差值,则认为积分完成.否则,将区间再次细分,对细分后的区间进行积分,与前一次积分相比较,如此反复迭代,直至最近的两次积分差值足够小.这样的结果,有可能会导致无法收敛. 为了使用org.apache.commons.math3.analysis.integration包中的积分器类,需要先实现UnivariateFunctio

  • SpringBoot整合minio快速入门教程(代码示例)

    分享一个快速使用springboot整合minio实现文件上传和下载的示例.前提是已经安装并运行minio服务,参考 minio快速入门文档 首先添加Minio的依赖 <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>3.0.10</version> </dependency> 然后写一个contro

  • 基于Django快速集成Echarts代码示例

    1.在线定制下载echarts https://echarts.apache.org/zh/builder.html 2.创建一个django项目或者在已有的项目 配置文件中确保数据库配置.static配置.与添加项目名到INSTALLED_APPS下. 配置静态文件目录static,目录下创建:css.img.js. 保存echarts.min.js到js目录下. 创建templates文件,html文件放到此目录. 快速静态测试 test.html文件 <!DOCTYPE html> &l

  • Bitmap海量数据快速查找去重代码示例

    题目描述 给你一个文件,里面包含40亿个整数,写一个算法找出该文件中不包含的一个整数, 假设你有1GB内存可用. 如果你只有10MB的内存呢? 解题思路 对于40亿个整数,如果直接用int数组来表示的大约要用4010^84B=16GB,超出了内存要求,这里 我们可以用bitmap来解决,bitmap基本思想是一位表示一个整数,比如我们有6个数据: 1 7 3 1 5 6 4 假设bitmap容量为8,当插入7时 bit[7]=1,以此类推 bit[3]=1 bit[1]=1 bit[5]=1 -

  • apache commons工具集代码详解

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性等等. Betwixt XML与Java对象之间相互转换. Codec 处理常用的编码方法的工具类包 例如DES.SHA1.MD5.Base64等. Collections java集合框架操作. Compress java提供文件打包 压缩类库. Con

  • 深度学习开源框架基础算法之傅立叶变换的概要介绍

    傅立叶变换时数字信号处理的重要方法之一,是法国数学家傅立叶在1807年在法国科学学会上发表的一篇文章中所提出的,在文章中使用了正弦函数描述温度分布,而且提出了一个著名的论断:任何连续性的周期信号都可以由一组适当的正弦曲线组合而成.而这个论断被当时审查论文的著名数学家拉格朗日所否定,拉格朗日认为正弦函数无法组合成一个个带有棱角的信号,但是从无限逼近的角度考虑,可以使用正弦函数来非常逼近期直到表示方法不存在明显差异,这篇论文最终在在拉格朗日死后15年之久才得以发表. 傅立叶变换的分类 根据信号是是周

  • python 图像的离散傅立叶变换实例

    图像(MxN)的二维离散傅立叶变换可以将图像由空间域变换到频域中去,空间域中用x,y来表示空间坐标,频域由u,v来表示频率,二维离散傅立叶变换的公式如下: 在python中,numpy库的fft模块有实现好了的二维离散傅立叶变换函数,函数是fft2,输入一张灰度图,输出经过二维离散傅立叶变换后的结果,但是具体实现并不是直接用上述公式,而是用快速傅立叶变换.结果需要通过使用abs求绝对值才可以进行可视化,但是视觉效果并不理想,因为傅立叶频谱范围很大,所以要用log对数变换来改善视觉效果. 在使用l

随机推荐