MATLAB中FFT的使用方法
X=FFT( x);
X=FFT( x,N);
x=IFFT(X);
x=IFFT(X,N)
用MATLAB進(jìn)行譜分析時(shí)注意:
(1)函數(shù)FFT返回值的數(shù)據(jù)結(jié)構(gòu)具 有對(duì)稱性。
例: N=8; n=0:N-1; xn=[4 3 2 6 7 8 9 0]; Xk=fft(xn)
輸出:
Xk =
39.0000??????????-10.7782 + 6.2929i??????? 0 -5.0000i?? 4.7782 - 7.7071i??5.0000????????????4.7782 + 7.7071i??????? 0 + 5.0000i ? ? ? -10.7782- 6.2929iXk與xn的維數(shù)相同,共有8個(gè)元素。 Xk的第一個(gè)數(shù)對(duì)應(yīng)于直流分量,即頻率值為0。
(2)做FFT分析時(shí), 幅值大小與FFT選擇的點(diǎn)數(shù)有關(guān),但不影響分析結(jié)果。在IFFT時(shí)已經(jīng)做了處理。要得到真實(shí)的振幅值的大小,只要將得到的變換后結(jié)果乘以2除以N即可。
二.FFT應(yīng)用舉例
例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。采樣頻率fs=100Hz,分別繪制N=128、1024點(diǎn)幅頻圖。
clf; fs=100;N=128; %采樣頻率和數(shù)據(jù)點(diǎn)數(shù) n=0:N-1;t=n/fs; %時(shí)間序列 x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信號(hào) y=fft(x,N); %對(duì)信號(hào)進(jìn)行快速Fourier變換 mag=abs(y); %求得Fourier變換后的振幅 f=n*fs/N; %頻率序列 subplot(2,2,1),plot(f,mag); %繪出隨頻率變化的振幅 xlabel('頻率/Hz'); ylabel('振幅');title('N=128');grid on; subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)); %繪出Nyquist頻率之前隨頻率變化的振幅 xlabel('頻率/Hz'); ylabel('振幅');title('N=128');grid on; %對(duì)信號(hào)采樣數(shù)據(jù)為1024點(diǎn)的處理 fs=100;N=1024;n=0:N-1;t=n/fs; x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信號(hào) y=fft(x,N); %對(duì)信號(hào)進(jìn)行快速Fourier變換 mag=abs(y); %求取Fourier變換的振幅 f=n*fs/N; subplot(2,2,3),plot(f,mag); %繪出隨頻率變化的振幅 xlabel('頻率/Hz'); ylabel('振幅');title('N=1024');grid on; subplot(2,2,4) plot(f(1:N/2),mag(1:N/2)); %繪出Nyquist頻率之前隨頻率變化的振幅 xlabel('頻率/Hz'); ylabel('振幅');title('N=1024');grid on; 結(jié)果:
fs=100Hz,Nyquist頻率為fs/2=50Hz。整個(gè)頻譜圖是以Nyquist頻率為對(duì)稱軸的。并且可以明顯識(shí)別出信號(hào)中含有兩種頻率成分:15Hz和40Hz。由此可以知道FFT變換數(shù)據(jù)的對(duì)稱性。因此用FFT對(duì)信號(hào)做譜分析,只需考察0~Nyquist頻率范圍內(nèi)的福頻特性。若沒有給出采樣頻率和采樣間隔,則分析通常對(duì)歸一化頻率0~1進(jìn)行。另外,振幅的大小與所用采樣點(diǎn)數(shù)有關(guān),采用128點(diǎn)和1024點(diǎn)的相同頻率的振幅是有不同的表現(xiàn)值,但在同一幅圖中,40Hz與15Hz振動(dòng)幅值之比均為4:1,與真實(shí)振幅0.5:2是一致的。為了與真實(shí)振幅對(duì)應(yīng),需要將變換后結(jié)果乘以2除以N。
例2:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t),fs=100Hz,繪制:
(1)數(shù)據(jù)個(gè)數(shù)N=32,FFT所用的采樣點(diǎn)數(shù)NFFT=32;
(2)N=32,NFFT=128;
(3)N=136,NFFT=128;
(4)N=136,NFFT=512。
結(jié)論:
(1)當(dāng)數(shù)據(jù)個(gè)數(shù)和FFT采用的數(shù)據(jù)個(gè)數(shù)均為32時(shí),頻率分辨率較低,但沒有由于添零而導(dǎo)致的其他頻率成分。
(2)由于在時(shí)間域內(nèi)信號(hào)加零,致使振幅譜中出現(xiàn)很多其他成分,這是加零造成的。其振幅由于加了多個(gè)零而明顯減小。
(3)FFT程序?qū)?shù)據(jù)截?cái)?#xff0c;這時(shí)分辨率較高。
(4)也是在數(shù)據(jù)的末尾補(bǔ)零,但由于含有信號(hào)的數(shù)據(jù)個(gè)數(shù)足夠多,FFT振幅譜也基本不受影響。
???? 對(duì)信號(hào)進(jìn)行頻譜分析時(shí),數(shù)據(jù)樣本應(yīng)有足夠的長(zhǎng)度,一般FFT程序中所用數(shù)據(jù)點(diǎn)數(shù)與原含有信號(hào)數(shù)據(jù)點(diǎn)數(shù)相同,這樣的頻譜圖具有較高的質(zhì)量,可減小因補(bǔ)零或截?cái)喽a(chǎn)生的影響。
例3:x=cos(2*pi*0.24*n)+cos(2*pi*0.26*n)
代碼略,直接看結(jié)果:
結(jié)論:
(1)數(shù)據(jù)點(diǎn)過少,幾乎無法看出有關(guān)信號(hào)頻譜的詳細(xì)信息;
(2)中間的圖是將x(n)補(bǔ)90個(gè)零,幅度頻譜的數(shù)據(jù)相當(dāng)密,稱為高密度頻譜圖。但從圖中很難看出信號(hào)的頻譜成分。
(3)信號(hào)的有效數(shù)據(jù)很長(zhǎng),可以清楚地看出信號(hào)的頻率成分,一個(gè)是0.24Hz,一個(gè)是0.26Hz,稱為高分辨率頻譜。
??????? 可見,采樣數(shù)據(jù)過少,運(yùn)用FFT變換不能分辨出其中的頻率成分。添加零后可增加頻譜中的數(shù)據(jù)個(gè)數(shù),譜的密度增高了,但仍不能分辨其中的頻率成分,即譜的分辨率沒有提高。只有數(shù)據(jù)點(diǎn)數(shù)足夠多時(shí)才能分辨其中的頻率成分。
參考資料:
1.《數(shù)字信號(hào)處理的MATLAB實(shí)現(xiàn)》萬永革主編
2. 博文:http://blog.163.com/fei_lai_feng/blog/static/9289962200971751114547/
總結(jié)
以上是生活随笔為你收集整理的MATLAB中FFT的使用方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cannot open the disk
- 下一篇: 滤波器概述