日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB中FFT的使用方法

發布時間:2025/1/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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?? 4.7782 - 7.7071i??5.0000????????????4.7782 + 7.7071i??????? 0 + 5.0000i ? ? ? -10.7782- 6.2929i

Xk與xn的維數相同,共有8個元素。 Xk的第一個數對應于直流分量,即頻率值為0。

(2)做FFT分析時, 幅值大小與FFT選擇的點數有關,但不影響分析結果。在IFFT時已經做了處理。要得到真實的振幅值的大小,只要將得到的變換后結果乘以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); %求得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; %對信號采樣數據為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');grid 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對信號做譜分析,只需考察0~Nyquist頻率范圍內的福頻特性。若沒有給出采樣頻率和采樣間隔,則分析通常對歸一化頻率0~1進行。另外,振幅的大小與所用采樣點數有關,采用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; %數據長度 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');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); %繪出Nyquist頻率之前的振幅 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,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: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程序將數據截斷,這時分辨率較高。
(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.26Hz,稱為高分辨率頻譜。
??????? 可見,采樣數據過少,運用FFT變換不能分辨出其中的頻率成分。添加零后可增加頻譜中的數據個數,譜的密度增高了,但仍不能分辨其中的頻率成分,即譜的分辨率沒有提高。只有數據點數足夠多時才能分辨其中的頻率成分。



參考資料:

1.《數字信號處理的MATLAB實現》萬永革主編

2. 博文:http://blog.163.com/fei_lai_feng/blog/static/9289962200971751114547/


總結

以上是生活随笔為你收集整理的MATLAB中FFT的使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。