關於FFT快速傅氏變換的理解

2021-09-18 05:41:27 字數 3236 閱讀 4173

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的週期性,可以推導出矩陣中相同...