您好,登錄后才能下訂單哦!
上一篇文章中我們了解了Apache Commons Math4探索之多項式曲線擬合實現代碼,今天我們就來看看如何通過apache commons math4實現快速傅里葉變換,下面是具體內容。
傅立葉變換:org.apache.commons.math4.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.math4.complex.Complex類型,然后創建org.apache.commons.math4.transform.FastFourierTransformer對象實例,最后調用其transform方法即可得到存放于復數數組中的傅立葉變換結果。
完整的示例代碼如下:
import org.apache.commons.math4.transform.DftNormalization; import org.apache.commons.math4.transform.FastFourierTransformer; import org.apache.commons.math4.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 Math4探索之快速傅立葉變換代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站:Apache Commons Math4學習之數值積分實例代碼、apache zookeeper使用方法實例詳解等,有什么問題可以隨時留言,小編會及時回復大家的。最后推薦幾本有關Java編程方面不錯的書籍,免費下載,供廣大編程愛好及工作者參考,提高!
Java Web開發就該這樣學 (王洋著) pdf掃描版
https://www.jb51.net/books/561375.html
Spring+MyBatis企業應用實戰 完整pdf掃描版
https://www.jb51.net/books/560647.html
希望大家喜歡,更多精彩內容,就在https://www.jb51.net/
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。