1. 程式人生 > >快速傅立葉變換(Fast-Fourier Transform,FFT)

快速傅立葉變換(Fast-Fourier Transform,FFT)

數學定義:

(詳細參考:https://www.baidu.com/link?url=oYAuG2o-pia_U3DlF5n_MJZyE5YKfaVRUHTTDbM1FwM_kDTjGCxKpw_PbOK70jE2geVioprSVyPTTQuLwN-IhMH8NREmWSDnmcfQEY8w0kq&wd=&eqid=8244c46a0009451a000000035c0e2c39)

有限長序列可以通過離散傅立葉變換(DFT)將其頻域也離散化成有限長 序列.但其計算量太大,很難實時地處理問題,因此引出了快速傅立葉變換 (FFT).  1965 年,Cooley 和 Tukey 提出了計算離散傅立葉變換(DFT)的快 速演算法,將 DFT 的運算量減少了幾個數量級。從此,對快速傅立葉變換(FFT) 演算法的研究便不斷深入,數字訊號處理這門新興學科也隨 FFT 的出現和發 展而迅速發展。根據對序列分解與選取方法的不同而產生了 FFT 的多種算 法,基本演算法是基2DIT 和基2DIF。FFT 在離散傅立葉反變換、線性卷積 和線性相關等方面也有重要應用。

快速傅立葉變換(FFT是計算離散傅立葉變換(DFT快速演算法。

DFT 的定義式為:

 

程式碼示例:

%fft示例:產生60Hz和150Hz帶噪聲的訊號源,並用傅立葉變換方法查詢主頻訊號
%產生帶噪聲的聲源訊號,並提取離散訊號
t=0:0.001:0.6;
%噪聲訊號的主頻是60Hz和150Hz
x=sin(2*pi*60*t)+sin(2*pi*150*t);
y=x+2*randn(size(t));
plot(1000*t(1:50),y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time(ms)')
grid on;

%進行512點的快速傅立葉變換
Y=fft(y,512);
%功率譜測量計算
Pyy=Y.*conj(Y)/512;
f=1000*(0:256)/512;
%繪製頻譜圖形
figure;
plot(f,Pyy(1:257))
title('Frequency content of y')
xlabel('frequency(Hz)')
grid on;