文章**:
fft是離散傅利葉變換的快速演算法,可以將乙個訊號變換到頻域。有些訊號在時域上是很難看出什麼特徵的,但是如果變換到頻域之後,就很容易看出特徵了。這就是很多訊號分析採用
fft變換的原因。另外,
fft可以將乙個訊號的頻譜提取出來,這在頻譜分析方面也是經常用的。
模擬訊號經過adc取樣之後變成數碼訊號,可對此數碼訊號做fft變換。n個取樣點經過fft之後就可以得到n個點的fft結果。為了方便進行fft運算,通常n取2的整數次冪。
假設取樣頻率為fs,訊號頻率為f,取樣點數為n。則fft之後結果為n點複數,其中每乙個點對應著乙個頻率點,該點複數的模值為原始訊號在該頻率值下的幅度特性。具體為:假設原始訊號在某頻率點的幅值為a,則該頻點對應的fft點複數的模值為a的n/2倍。而fft第一點為原始訊號的直流分量,其模值為原始訊號模值的n倍。對於相位,fft複數的相位即為原始訊號在該頻率點處的相位。
fft後的n點複數,第一點表示直流分量(0hz),而最後一點的下一點(實際不存在,假設為第n+1點)表示的頻率為取樣頻率(fs),這中間被n-1個點平均分為n等份,每點頻率依次增加。例如,第k點所表示的頻率為:fk=(k-1)fs/n。所以fft所能達到的頻率解析度為fs/n。
fft結果以n/2(換算為頻率即為乃奎斯特頻率,fs/2)對稱。因此我們只需要前半部分的結果,即在乃奎斯特頻率內的結果。
示例1:假設fft第k點用複數表示為:a+ib,則該數的模(或絕對值)為ak=(a2+b2)0.5,相位為pk=arctan(b/a),對應頻率為fk=(k-1)fs/n。所以該點對應的時域訊號分量為:ann2∙cos2∙π∙fk∙t+pn。
示例2:假設用1000hz的取樣率採訊號:s=2+3∙cos2π∙200∙t+60°+4∙cos2π∙300∙t+120°,取樣點數為1024。matlab程式如下:
n=1024; //取樣點數為1024
fs=1000; //取樣頻率為1000hz
t=[0:1/fs:(n-1)/fs]; //取樣時刻
s=2+3*cos(2*pi*200*t+60*pi/180)+4*cos(2*pi*300*t+120*pi/180); //對訊號取樣
y=fft(s); //做fft運算
y=abs(y); //對fft結果求模
i=1:n/2; //
x=(i-1)*f/n; //將時間點換算為相應頻率
yy(i)=y(i); //取前n/2點的fft模值
yy=yy/(n/2); //做幅值變換,變換至時域訊號幅值
yy(1)==yy(1)/2; //對直流訊號做幅值變換
plot(x,yy) //繪製圖形
上圖為fft的幅頻特性圖。由上圖可以看出,在200hz和300hz頻點處幅值比原始訊號(3、4)要低。這是因為對訊號進行非整數倍週期取樣(截斷),產生頻譜洩露。
上圖為在同樣條件下(n=1024,f=1000hz)對訊號s=2+1.5∙cos2π∙125∙t+60°+2.5∙cos2π∙250∙t+120°進行處理得到的fft幅頻特性圖。可以看到由於是對訊號進行整數倍的取樣,不存在截斷誤差引起的頻譜洩露。在125hz頻點和250hz頻點處幅值與原始訊號相同。
FFT和Matlab中操作FFT
fft 離散傅氏變換的快速演算法 fft fast fourier transformation 是離散傅氏變換 dft 的快速演算法。即快速傅氏變換。輸入n 1個數,輸出n 1個數 意義不同 輸入是時域,輸出為頻域 輸出是 每個取樣點對應的振幅或者能量值 輸出值的第乙個對應直流分量的振幅,第二個值...
Matlab中fft函式的使用與原理
時域抽取基 2fft演算法 decimation in time,dit fft 頻域抽取基 2fft演算法 decimation in freqency,dif fft 序列長度n可表示為合數的fft 演算法 混合基 matlab說明文件 y fft x y fft x,n y fft x,n,d...
余弦函式的fft的matlab
注 fft 函式認為你給入的訊號時從0時刻開始的。那麼我們來想想你的輸入是不是 偶函式 你直接將自相關函式放進去,肯定不是 偶函式 你需要將對稱軸放到0上。而你現在是將尾部的乙個數放到0位置,這就會有時移,在頻域上表現出的就是乘以相位因子,變成了複數。比如,你要是對 1 2 3 2 1 做傅利葉變換...