MATLAB中FFT的使用方法_第1頁
MATLAB中FFT的使用方法_第2頁
MATLAB中FFT的使用方法_第3頁
MATLAB中FFT的使用方法_第4頁
MATLAB中FFT的使用方法_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、MATLAB中FFT的使用方法一.調用方法X=FFT(x);X=FFT(x,N);x=IFFT(X);x=IFFT(X,N)用MATLAB進行譜分析時注意:(1)函數FFT返回值的數據結構具有對稱性。例: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  

2、4.7782 - 7.7071i   5.0000             4.7782 + 7.7071i        0 + 5.0000i -10.7782 - 6.2929iXk與xn的維數相同,共有8個元素。Xk的第一個數對應于直流分量,即頻率值為0。(2)做FFT分析時,幅值大小與FFT選擇的點數有關,但不影響分析結果。在IFFT時已經做了處理。要得到真實的振幅值的大小,只

3、要將得到的變換后結果乘以2除以N即可。二.FFT應用舉例例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。采樣頻率fs=100Hz,分別繪制N=128、1024點幅頻圖。clf;fs=100;N=128;   %采樣頻率和數據點數n=0:N-1;t=n/fs;   %時間序列x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信號y=fft(x,N);    %對信號進行快速Fourier變換mag=abs(y);     %

4、求得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&

5、#39;);grid on;%對信號采樣數據為1024點的處理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); %信號y=fft(x,N);   %對信號進行快速Fourier變換mag=abs(y);   %求取Fourier變換的振幅f=n*fs/N;subplot(2,2,3),plot(f,mag); %繪出隨頻率變化的振幅xlabel('頻率/Hz');ylabel('振幅');title('N=1024');g

6、rid on;subplot(2,2,4)plot(f(1:N/2),mag(1:N/2); %繪出Nyquist頻率之前隨頻率變化的振幅xlabel('頻率/Hz');ylabel('振幅');title('N=1024');grid on;運行結果:fs=100Hz,Nyquist頻率為fs/2=50Hz。整個頻譜圖是以Nyquist頻率為對稱軸的。并且可以明顯識別出信號中含有兩種頻率成 分:15Hz和40Hz。由此可以知道FFT變換數據的對稱性。因此用FFT對信號做譜分析,只需考察0Nyquist頻率范圍內的福頻特性。若沒有給 出采樣頻率和

7、采樣間隔,則分析通常對歸一化頻率01進行。另外,振幅的大小與所用采樣點數有關,采用128點和1024點的相同頻率的振幅是有不同的表 現值,但在同一幅圖中,40Hz與15Hz振動幅值之比均為4:1,與真實振幅0.5:2是一致的。為了與真實振幅對應,需要將變換后結果乘以2除以N。例2:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t),fs=100Hz,繪制:(1)數據個數N=32,FFT所用的采樣點數NFFT=32;(2)N=32,NFFT=128;(3)N=136,NFFT=128;(4)N=136,NFFT=512。clf;fs=100; %采樣頻率Ndata=32;

8、 %數據長度N=32; %FFT的數據長度n=0:Ndata-1;t=n/fs;   %數據對應的時間序列x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);   %時間域信號y=fft(x,N);   %信號的Fourier變換mag=abs(y);    %求取振幅f=(0:N-1)*fs/N; %真實頻率subplot(2,2,1),plot(f(1:N/2),mag(1:N/2)*2/N); %繪出Nyquist頻率之前的振幅xlabel('頻率/Hz');

9、ylabel('振幅');title('Ndata=32 Nfft=32');grid on;Ndata=32;   %數據個數N=128;     %FFT采用的數據長度n=0:Ndata-1;t=n/fs;   %時間序列x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);y=fft(x,N);mag=abs(y);f=(0:N-1)*fs/N; %真實頻率subplot(2,2,2),plot(f(1:N/2),mag(1:N/2)*2/N); %繪出N

10、yquist頻率之前的振幅xlabel('頻率/Hz');ylabel('振幅');title('Ndata=32 Nfft=128');grid on;Ndata=136;   %數據個數N=128;     %FFT采用的數據個數n=0:Ndata-1;t=n/fs; %時間序列x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);y=fft(x,N);mag=abs(y);f=(0:N-1)*fs/N;   %真實頻率subplot(2,2

11、,3),plot(f(1:N/2),mag(1:N/2)*2/N); %繪出Nyquist頻率之前的振幅xlabel('頻率/Hz');ylabel('振幅');title('Ndata=136 Nfft=128');grid on;Ndata=136;    %數據個數N=512;    %FFT所用的數據個數n=0:Ndata-1;t=n/fs; %時間序列x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);y=fft(x,N);mag=abs(y);f=(0

12、:N-1)*fs/N;   %真實頻率subplot(2,2,4),plot(f(1:N/2),mag(1:N/2)*2/N); %繪出Nyquist頻率之前的振幅xlabel('頻率/Hz');ylabel('振幅');title('Ndata=136 Nfft=512');grid on;結論:(1)當數據個數和FFT采用的數據個數均為32時,頻率分辨率較低,但沒有由于添零而導致的其他頻率成分。(2)由于在時間域內信號加零,致使振幅譜中出現很多其他成分,這是加零造成的。其振幅由于加了多個零而明顯減小。(3)FFT程序將數據

13、截斷,這時分辨率較高。(4)也是在數據的末尾補零,但由于含有信號的數據個數足夠多,FFT振幅譜也基本不受影響。對信號進行頻譜分析時,數據樣本應有足夠的長度,一般FFT程序中所用數據點數與原含有信號數據點數相同,這樣的頻譜圖具有較高的質量,可減小因補零或截斷而產生的影響。例3:x=cos(2*pi*0.24*n)+cos(2*pi*0.26*n)(1)數據點過少,幾乎無法看出有關信號頻譜的詳細信息;(2)中間的圖是將x(n)補90個零,幅度頻譜的數據相當密,稱為高密度頻譜圖。但從圖中很難看出信號的頻譜成分。(3)信號的有效數據很長,可以清楚地看出信號的頻率成分,一個是0.24Hz,一個是0.26

14、Hz,稱為高分辨率頻譜。可見,采樣數據過少,運用FFT變換不能分辨出其中的頻率成分。添加零后可增加頻譜中的數據個數,譜的密度增高了,但仍不能分辨其中的頻率成分,即譜的分辨率沒有提高。只有數據點數足夠多時才能分辨其中的頻率成分。Fs = 100; % Sampling frequencyT = 1/Fs; % Sample timeL = 50; % Length of signalt = (0:L-1)*T; % Time vectorx = sin(2*pi*10*t);NFFT = 2nextpow2(L); Y = fft(x,NFFT)/L;f = Fs/2*linspace(0,1,

15、NFFT/2+1);% Plot single-sided amplitude spectrum.plot(f,2*abs(Y(1:NFFT/2+1) title('Single-Sided Amplitude Spectrum of y(t)')xlabel('Frequency (Hz)')ylabel('|Y(f)|')1。為什么用2nextpow2(L)而不直接是L?2。Y = fft(x,NFFT)/L為什么除以L。3。f = Fs/2*linspace(0,1,NFFT/2+1);為什么用0,1,NFFT/2+1。最后2*abs(Y(

16、1:NFFT/2+1)是什么意思?答案: 1 、一般頻域的采樣點要大于時域的采樣點,最好是2的冪數,便于計算。可以看看數字信號處理這類的書 2、 假設采樣頻率為Fs,信號頻率F,采樣點數為N。那么FFT之后結果就是一個為N點的復數。每一個點就對應著一個頻率點。這個點的模值,就是該頻率值下的幅度特性。具體跟原始信號的幅度有什么關系呢?假設原始信號的峰值為A,那么FFT的結果的每個點(除了第一個點直流分量之外)的模值就是A的N/2倍 所以這里應該是 3 linspace(x0,x1,n) 其中n代表的是點的數目,即分成n-1等分。其實Fs/2*linspace(0,1,NFFT/2+1);就是在0到1之間分成NFFT/2份,也就是FS/NFFT,也就是設置間隔點的頻率。最后2*abs(Y(1:NFFT/2+1)因為前面Y = f

溫馨提示

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

評論

0/150

提交評論