使用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 }

后續有新的認識后再補充~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM