說明:以下資源來源于《數(shù)字信號處理的MATLAB實現(xiàn)》萬永革主編
一.調(diào)用方法
X=FFT(x),;
X=FFT(x,,N),;
x=IFFT(X);
x=IFFT(X,N)
用MATLAB進行譜分析時注意:
(1)函數(shù)FFT返回值的數(shù)據(jù)結(jié)構(gòu)具有對稱性。
例:
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的維數(shù)相同,共有8個元素。Xk的第一個數(shù)對應(yīng)于直流分量,即頻率值為0,。
(2)做FFT分析時,幅值大小與FFT選擇的點數(shù)有關(guān),,但不影響分析結(jié)果,。在IFFT時已經(jīng)做了處理。要得到真實的振幅值的大小,,只要將得到的變換后結(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點幅頻圖。
clf;
fs=100;N=128; %采樣頻率和數(shù)據(jù)點數(shù)
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;
%對信號采樣數(shù)據(jù)為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;
運行結(jié)果:
fs=100Hz,Nyquist頻率為fs/2=50Hz,。整個頻譜圖是以Nyquist頻率為對稱軸的,。并且可以明顯識別出信號中含有兩種頻率成 分:15Hz和40Hz。由此可以知道FFT變換數(shù)據(jù)的對稱性,。因此用FFT對信號做譜分析,,只需考察0~Nyquist頻率范圍內(nèi)的福頻特性。若沒有給 出采樣頻率和采樣間隔,,則分析通常對歸一化頻率0~1進行,。另外,振幅的大小與所用采樣點數(shù)有關(guān),,采用128點和1024點的相同頻率的振幅是有不同的表 現(xiàn)值,,但在同一幅圖中,40Hz與15Hz振動幅值之比均為4:1,,與真實振幅0.5:2是一致的,。為了與真實振幅對應(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ù)個數(shù)N=32,,F(xiàn)FT所用的采樣點數(shù)NFFT=32;
(2)N=32,,NFFT=128,;
(3)N=136,NFFT=128,;
(4)N=136,,NFFT=512。
clf;fs=100; %采樣頻率
Ndata=32; %數(shù)據(jù)長度
N=32; %FFT的數(shù)據(jù)長度
n=0:Ndata-1;t=n/fs; %數(shù)據(jù)對應(yīng)的時間序列
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; %數(shù)據(jù)個數(shù)
N=128; %FFT采用的數(shù)據(jù)長度
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; %數(shù)據(jù)個數(shù)
N=128; %FFT采用的數(shù)據(jù)個數(shù)
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; %數(shù)據(jù)個數(shù)
N=512; %FFT所用的數(shù)據(jù)個數(shù)
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;
結(jié)論:
(1)當(dāng)數(shù)據(jù)個數(shù)和FFT采用的數(shù)據(jù)個數(shù)均為32時,,頻率分辨率較低,但沒有由于添零而導(dǎo)致的其他頻率成分,。
(2)由于在時間域內(nèi)信號加零,,致使振幅譜中出現(xiàn)很多其他成分,這是加零造成的,。其振幅由于加了多個零而明顯減小,。
(3)FFT程序?qū)?shù)據(jù)截斷,這時分辨率較高,。
(4)也是在數(shù)據(jù)的末尾補零,,但由于含有信號的數(shù)據(jù)個數(shù)足夠多,F(xiàn)FT振幅譜也基本不受影響,。
對信號進行頻譜分析時,,數(shù)據(jù)樣本應(yīng)有足夠的長度,一般FFT程序中所用數(shù)據(jù)點數(shù)與原含有信號數(shù)據(jù)點數(shù)相同,這樣的頻譜圖具有較高的質(zhì)量,,可減小因補零或截斷而產(chǎn)生的影響,。
例3:x=cos(2*pi*0.24*n)+cos(2*pi*0.26*n)
(1)數(shù)據(jù)點過少,幾乎無法看出有關(guān)信號頻譜的詳細信息,;
(2)中間的圖是將x(n)補90個零,,幅度頻譜的數(shù)據(jù)相當(dāng)密,稱為高密度頻譜圖,。但從圖中很難看出信號的頻譜成分,。
(3)信號的有效數(shù)據(jù)很長,可以清楚地看出信號的頻率成分,,一個是0.24Hz,,一個是0.26Hz,稱為高分辨率頻譜,。
可見,,采樣數(shù)據(jù)過少,運用FFT變換不能分辨出其中的頻率成分,。添加零后可增加頻譜中的數(shù)據(jù)個數(shù),,譜的密度增高了,但仍不能分辨其中的頻率成分,,即譜的分辨率沒有提高,。只有數(shù)據(jù)點數(shù)足夠多時才能分辨其中的頻率成分。