MATLAB中fft函數(shù)用法、性質(zhì)、特性、缺陷全面深入解析(含程序)_第1頁
MATLAB中fft函數(shù)用法、性質(zhì)、特性、缺陷全面深入解析(含程序)_第2頁
MATLAB中fft函數(shù)用法、性質(zhì)、特性、缺陷全面深入解析(含程序)_第3頁
MATLAB中fft函數(shù)用法、性質(zhì)、特性、缺陷全面深入解析(含程序)_第4頁
MATLAB中fft函數(shù)用法、性質(zhì)、特性、缺陷全面深入解析(含程序)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、MATLAB中fft函數(shù)用法、性質(zhì)、特性、缺陷全面深入解析(含程序)前言目前網(wǎng)絡上在信號處理方面對fft函數(shù)使用泛濫,但大多數(shù)人根本就不了解它的性能,使用方法也是千奇百怪,各種程序代碼魚龍混雜,亂七八糟,誤導了很多人,所以我在這里進行一下全面的演示說明,希望后來人能夠少走彎路。fft信號處理中獲得時域信號的頻域的方法叫做傅里葉變換,但教材上的變換都是理論推導的理想、連續(xù)、無限情況,在實際的matlab計算中,必須是實際、離散、有限的計算,所以實現(xiàn)起來比較麻煩,需要各種轉換。fft函數(shù)就是為了實現(xiàn)快速傅里葉變換而設計的計算機算法,與傳統(tǒng)傅里葉變換的步驟不完全一樣,但通過適當?shù)淖儞Q也能夠獲得時域信

2、號的頻域圖形。fft只是數(shù)值計算,不是理論推導,所以頻域圖形肯定有誤差,但我們能夠通過適當調(diào)整變換參數(shù)來提高頻域圖形的精確性。建議大家能夠理論推導的傅里葉變換就直接在紙上推導好了再用matlab直接畫出來就是了。所以不是因為fft精確,而是因為fft能夠?qū)Υ髷?shù)據(jù)復雜信號變換計算快,自由度可控制性高,所以使用的人才多。fft(x)圖示fft的一些定性問題解析時域信號x有多少個點,fft(x)就有多少個點,這時的fft(x)之所以是對稱的,是因為fft的方法是進行周期計算從-2,2,所以后面的一半要翻轉到負半軸,是負頻率。所以有用的是fft(x)的前一半的點。我是經(jīng)過各項測試實驗,才完全明白fft

3、的性能。利用程序解釋如下:%這里的fft變換有補零clear all;Fs = 1e3; %這是原始時域信號x的采樣頻率multiple=0.6; %x進行fft前的補零倍數(shù),可以增加頻率分辨率time=2;t = 0:1/Fs:time-1/Fs; %這個會影響x的采樣點數(shù),當然點數(shù)越多,頻域越精確越平滑%x = 1.5*cos(2*pi*100*t)+3*sin(2*pi*202.5*t)+2*sin(2*pi*1250*t);x = 1.5*cos(2*pi*100*t)+3*sin(2*pi*201.25*t);%頻率最小分辨率-x=x,zeros(1,length(x)*multip

4、le); %注意可以通過對x進行補零來增加頻率分辨率,只是因為fft的周期性計算方法,需要在后面對fft(x)后的數(shù)據(jù)進行幅度值重新計算時,乘以多的零點的倍數(shù),見后面的幅度值計算。%freqres = Fs/length(x); freqres =1/time;%x的頻率必須是freqres的整數(shù)倍時,x的頻率才能被正確分辨,也就是相應頻域值才能夠正常,比如freqres=1,在頻率202.5處的幅度就不正常,當freqres=2時,在頻率1001處的幅度就不正常。%x有多少個點,fft(x)就有多少個點,這時的fft(x)之所以是對稱的,-是因為fft的方法是進行周期計算從-2,2,所以后面

5、的一半要翻轉到負半軸,是負頻率。所以有用的是fft(x)的前一半的點再加上0點。%xdft = fft(x); xdft = xdft(1:length(x)/2+1);%這與fft方法的周期計算方法相關,也就是幅度值要重新計算一下xdft = 1/length(x).*xdft;xdft(2:end-1) = (1+multiple)*2*xdft(2:end-1);%幅度值首先由于周期對稱性,需要乘以2,然后由于補零的倍數(shù)是multiple,所以是(1+multiple)*2%重新計算頻率橫坐標freq = 0:Fs/length(x):Fs/2;%Fs/2就是最高能夠顯示出來的頻率,但要

6、注意實際上,fft(x)實際是計算出了任何頻率,但是在Fs/2,Fs這個區(qū)間的頻率,是關于Fs/2這里對稱的,也就是正負的頻率開始混合或者混疊在一起。而超出了Fs的頻率則會由于周期性,它的值先減去Fs后,重新從0點開始。所以這個程序并不是說畫出了在0,Fs/2的一定正確的頻率,而是可能會出現(xiàn)頻率的混合和混疊,一定要先預判一下頻率的區(qū)間范圍后,再使用fft這個函數(shù)。%plot(freq,abs(xdft);%畫頻域幅度譜title('頻域圖');fft的一些定量詳細解析與測試利用程序解釋如下:%為了更好的展示,這里信號沒有補零clear all;clc;Fs = 1e3; %這是

7、原始時域信號x的采樣頻率multiple=0; %x進行fft前的補零倍數(shù),可以增加頻率分辨率,也會影響信號頻域值time=10;t = 0:1/Fs:time-1/Fs; %這個會影響x的采樣點數(shù),當然點數(shù)越多,頻域越精確越平滑%x = 1.5*cos(2*pi*100*t)+3*sin(2*pi*202.5*t)+2*sin(2*pi*1450*t);%x = 1.5*cos(2*pi*100*t)+3*sin(2*pi*200*t)+2*cos(2*pi*100000.1*t);x = 1.5*cos(2*pi*100*t)+3*sin(2*pi*200*t)+2*cos(2*pi*0.

8、1*t);%頻率最小分辨率-x=x,zeros(1,length(x)*multiple); %注意可以通過對x進行補零來增加頻率分辨率,只是因為fft的周期性計算方法,需要在后面對fft(x)后的數(shù)據(jù)進行幅度值重新計算時,乘以多的零點的倍數(shù),見后面的幅度值計算。%freqres = Fs/length(x); %x的頻率必須是freqres的整數(shù)倍時,x的頻率才能被正確分辨,也就是幅度值才能夠正常,比如freqres=1,在頻率202.5處的幅度就不正常,當freqres=2時,在頻率1001處的幅度就不正常。%有多少個點,fft(x)就有多少個點,這時的fft(x)之所以是對稱的,-是因為

9、fft的方法是進行周期計算從-2,2,所以后面的一半要翻轉到負半軸,是負頻率。所以有用的是fft(x)的前一半的點再加上0點。%xdft = fft(x); subplot(3,1,1);plot(0:length(xdft)-1,abs(xdft);title('abs');title('頻域圖');subplot(3,1,2);plot(0:length(xdft)-1,real(xdft);title('real');subplot(3,1,3);plot(0:length(xdft)-1,imag(xdft);title('ima

10、g');back=ifft(xdft);error=x-back;for i=2:length(xdft)/2 store(i)=abs(xdft(i)-abs(xdft(length(xdft)-i+2); %這時的誤差為0,%store(i)=real(xdft(i+1)-real(xdft(length(xdft)-i+1); %這時的誤差為0,%store(i)=imag(xdft(i+1)+imag(xdft(length(xdft)-i+1); %這時的誤差為0,注意這時是加號endfigure;plot(store);title('正負頻率誤差');首先如

11、上面程序所示,xdft=fft(x),頻率分辨率是freqres,設L=length(xdft)=length(x),顯示的頻率范圍是0:freqres:Fs-freqres,點數(shù)范圍是1,L。xdft的幅度譜在頻率范圍1*freqres,L2-1*freqres,也就是點數(shù)范圍2,L2內(nèi),是與右邊點數(shù)范圍L,L2+2內(nèi)的頻率的實部是完全對稱的,虛部是正負對稱的,所以幅度譜是完全對稱的。xdft的幅度譜在頻率范圍L2+1*freqres,L-1*freqres,也就是點數(shù)范圍L2+2,L,是與左邊邊點數(shù)范圍L2,2內(nèi)的頻率的實部是完全對稱的,虛部是正負對稱的,所以幅度譜是完全對稱的,但是這時候

12、左右的正負頻率是混疊的,這就是奈奎斯特準則的限制,采樣率要大于信號的最高頻率才不會出現(xiàn)混疊,因此只有0,F(xiàn)s2的頻率是準確可用的。然后是缺的幾個特征點,在頻率為0,也就是第1個點的地方,頻率虛部為0,實部為實際振幅值的兩倍;在頻率為L2*freqres=Fs2,也就是點數(shù)為L2+1的地方,頻率虛部為0,實部為實際振幅值的兩倍;在頻率為Fs的地方,也就是超出了頻率范圍,那么這個點的頻率值變?yōu)镕s-Fs=0,與頻率為0時的情況一致;同理,在頻率為Fs+freqres的地方,那么這個點的頻率值變?yōu)镕s+freqres-Fs=freqres,與前面的情況一致,又是一個循環(huán)。橫軸必須是以Hz單位進行轉換

13、。fft變換存在的缺陷與問題有人問,為什么我畫的頻域圖與書上的不一樣啊,這就是你在對參數(shù)進行設置時,沒有考慮到它們對于fft變換后的結果的影響,或者根本就沒設置正確。不要直接就進行fft變換,變換前必須先估計信號的頻率范圍,和你想要獲得的圖形精確程度,然后適當改變參數(shù),確定不會發(fā)生下面這些問題。1. 混疊效應如果x(t)的頻譜是帶限的,X(f)=0, |f| > fm,則由抽樣定理,抽樣間隔最大滿足Ts=1/2fm如果f(t)的頻譜不是帶限的,則抽樣后頻譜總要發(fā)生混疊,減小抽樣間隔Ts,fs增大,可減小混疊,但工作量增加。解決辦法:預濾波,再抽樣,或者一般選擇Ts<1/(35)fm

14、。2. 泄漏(leakage)若X(f)為有限帶寬頻譜,則x(t)為時間無限的。為利用FFT分析x(t)的頻譜,必須截取x(t) 有限范圍,即加窗。頻域卷積后,使原頻帶受限的頻譜擴展開來(有限帶寬拖了尾巴),這種現(xiàn)象稱為泄漏。解決方法:改善窗的形狀或長度。3.柵欄效應(Picket Fence Effect)N點序列的DFT只能在有限的N個頻點上觀察頻譜,這相當于從柵欄的縫隙中觀察景色,對于了解信號在整個頻域上的特性是不夠的。為了觀察到其他頻率的信息,需要對原信號xn做一些處理,以便在不同的頻點上采樣。解決方法:增加采樣點數(shù),信號補零。4.補零與fft分辨率通過補零觀察到更多的頻點,但是這并不意味著補零能夠提高真正的頻譜分辨率。這是因為xn 實際上是x(t)采樣的主值序列,而將xn補零得到的x'n 周期延拓之后與原來的序列并不相同,也不是x(t)的采樣。因此 與 是不同離散信號的頻譜。對于補零至M點的x'的DFT,只能說它的分辨率2/M僅具有計算上的意義, 并不是真正的、物理意義上的頻譜。物理頻譜分辨率的提高只能在滿足采樣定理的條件下增加時域采樣長度來實現(xiàn)。5.物理分辨率與計算分辨率頻率分辨率是指所用的算法能將信號中兩個考得很近的譜峰

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論