天天看點

Matlab中FFT函數的源代碼示例

clear

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;

運作結果為:

Matlab中FFT函數的源代碼示例

       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。

繼續閱讀