fft( fast fourier transformation)是離散傅氏變換(dft)的快速演算法。即為快速傅氏變換。
傅利葉變換大致有四種型別:
(1)連續傅利葉變換(ft)
(2)連續傅利葉級數(fs)
(3)離散時間傅利葉變換(dtft)
(4)離散傅利葉級數(dfs)
這裡主要講解離散時間傅利葉變換中的一種快速變換演算法fft,適用於計算機,微處理器等數字裝置進行運算分析。
提到傅利葉變換,畏難心理可能讓大多數人都覺得很難,要麼在門外不敢踏進來看看,要麼就是進來後深陷傅氏複雜枯燥無味的理論而無法自拔,最後過段時間什麼也不記得了。這是由於大家沒有真正將傅氏變換應用起來,一直處於理論分析層次,不免讓人覺得傅氏很高冷。其實真正的傅氏是很接地氣的,很有用,應用範圍非常廣泛。這裡主要結合matlab**通過例子詳細分析fft的使用。
fft是將離散的時間域訊號變換到頻域內進行分析。主要應用於對訊號的提取和分析,去噪。如圖所示:用一首古詩形容fft存在的意義最貼切了:橫看成嶺側成峰,遠近高低各不同。不識廬山真面目,只緣身在此山中。有時候我們在時域中對乙個有用的訊號提取我們需要的有效成分,剔除雜訊是很困難的,訊號和雜訊雜糅在一起,根本無法區分開,如果我們在頻域中分析訊號和雜訊就容易多了,訊號的幅值一般比雜訊幅值大很多,雜訊幅值較小,在頻域中,雜訊無處遁形,根據頻域幅值縱座標可以發現我們需要的訊號,再通過頻率橫座標就可以知道有用訊號的頻率範圍了,整個去噪過程就是這麼簡單。
fft中關鍵的引數: 取樣頻率:fs; //根據奈奎斯特取樣定理(又稱夏農取樣定理):fs≥2fmax
取樣點數:n; //n個點(0:n-1),頻域中橫座標有效資料範圍(0:n-1)
取樣頻率解析度:fs_div=fs/n; //頻域中,橫座標的解析度(最小刻度)
取樣週期(取樣頻率解析度的倒數,也是取樣頻率fs倒數與取樣點數n的乘積):ts=1/fs_div=n/fs; //乙個週期取樣n個點
由上面公式可知取樣頻率解析度fs_div和取樣週期ts有關(也就是和取樣頻率fs,取樣點數n共同決定的),取樣週期ts越長,取樣頻率解析度fs_div值越小,解析度就越高。(1)當取樣頻率fs保持不變時,增大取樣點數n,取樣頻率解析度fs_div值變小,解析度就變高。
(2)當取樣點數n保持不變時,減小取樣頻率fs,取樣頻率解析度fs_div值變小,解析度就變高。(前提要保證取樣定理,否則減小取樣頻率也就失去了意義,採集的資料已經失真,失去了應有的價值了)
舉例介紹fft的使用:
例程1:
clf;
x=[2,5,1,9,10,2];
y=fft(x);
y= 29.0000 + 0.0000i -9.0000 + 5.1962i 2.0000 -10.3923i -3.0000 + 0.0000i 2.0000 +10.3923i -9.0000 - 5.1962i
對矩陣x進行fft變換,得到的八個分量,第乙個為直流分量29,其餘的分量按照實軸對稱分布。
例程2:y1=8*sin(2*pi*15*t)+16*sin(2*pi*30*t)。取樣頻率fs=128hz,分別繪製n=128、1024點幅頻圖。fs>2*fmax(即30),滿足取樣定理。
clf;
fs=128;n=128; %取樣頻率和資料點數
n=0:n-1;t=n/fs; %時間序列
y1=8*sin(2*pi*15*t)+16*sin(2*pi*30*t); %訊號
y=fft(y1,n); %對訊號進行快速fourier變換
mag=abs(y); %求得fourier變換後的振幅
f=n*fs/n; %頻率序列
subplot(2,2,1),plot(f,mag); %繪出隨頻率變化的振幅
xlabel('頻率/hz');
ylabel('振幅');title('fs=128 n=128');grid on;
subplot(2,2,2),plot(f(1:n/2),mag(1:n/2)); %繪出nyquist頻率之前隨頻率變化的振幅
xlabel('頻率/hz');
ylabel('振幅');title('fs=128 n=128');grid on;
%對訊號取樣資料為1024點的處理
fs=128;n=1024;n=0:n-1;t=n/fs;
y1=8*sin(2*pi*15*t)+16*sin(2*pi*30*t); %訊號
y=fft(y1,n); %對訊號進行快速fourier變換
mag=abs(y); %求取fourier變換的振幅
f=n*fs/n;
subplot(2,2,3),plot(f,mag); %繪出隨頻率變化的振幅
xlabel('頻率/hz');
ylabel('振幅');title('fs=128 n=1024');grid on;
subplot(2,2,4)
plot(f(1:n/2),mag(1:n/2)); %繪出nyquist頻率之前隨頻率變化的振幅
xlabel('頻率/hz');
ylabel('振幅');title('fs=128 n=1024');grid on;
%得到的頻域圖,訊號的幅值變換為實際大小:需乘以2除以n(取樣點數)
整個頻譜圖是以nyquist頻率(fs/2)為對稱軸的。
由上圖可以看出訊號中的兩種頻率訊號:15hz,30hz。直接在時域中看原始訊號是沒有辦法得到有用訊號的。只有換個視角,從頻域看才能得到我們想要的訊號量。
幅值計算:(1)fs=128,n=128,頻率為15hz的訊號幅值a=512*(2/n)=8,由訊號組成y1=8*sin(2*pi*15*t)+16*sin(2*pi*30*t)可以看出15hz訊號的幅值為8。(2)fs=128,n=128,頻率為30hz的訊號幅值a=1024*(2/n)=16,符合實際結果。(3)fs=128,n=1024,頻率為15hz的訊號幅值a=4096*(2/n)=8,符合實際結果。(4)fs=128,n=1024,頻率為30hz的訊號幅值a=8192*(2/n)=16,符合實際結果。
關於FFT快速傅利葉變換
前一段時間荒廢掉了 一直在糾結zkw大牛的數學歸納法的 結果看不懂 一直很糾結fft是怎麼實現的 一直以為fft是很巧妙的利用數論之類的東西做,所以每次看到這方面的資料就蛋疼,因為一般都畫了個座標系,然後就懵了 昨天晚上無聊翻算導看到fft這一章,就把它學了,發現算導有的時候講細一點還是有好處的,至...
快速傅氏變換之旅 一 概念簡介 1
fft fast fourier transformation 即為快速傅氏變換,是離散傅氏變換的快速演算法,它是根據離散傅氏變換的奇 偶 虛 實等特性,對離散傅利葉變換的演算法進行改進獲得的。它對傅氏變換的理論並沒有新的發現,但是對於在計算機系統或者說數字系統 中應用離散傅利葉變換,可以說是進了一...
快速傅利葉變換實驗報告 FFT快速傅利葉變換的推導
從我的學習經驗來看,如果不是對dft非常熟悉的,可能會在理解fft演算法的時候有點懵逼。首先搞清楚,dft計算的是什麼及其公式。其中 展開後得 上面多項式可轉化為下面的矩陣 最後看到離散傅利葉就是乙個複數的矩陣乘法計算。從上面看到矩陣裡的元素全是復指數的冪,根據復指數w的週期性,可以推導出矩陣中相同...