天天看點

matlab中 FFT 的意義 學習記錄matlab中 FFT 函數的使用 學習記錄

matlab中 FFT 函數的使用 學習記錄

1、學習啟示

N=1024;  %采樣點數為1024
Fs=1000; %采樣頻率為1000Hz
t=[0:1/Fs:(N-1)/Fs]; %采樣時刻 t的長為N
s=2+3*cos(2*pi*200*t+60*pi/180)+4*cos(2*pi*300*t+120*pi/180);   %對信号采樣 這裡注意是連續t 因為已經對時間做了nt處理了
Y=fft(s);  %FFT運算
y=abs(Y); 
for i=1:N/2; 
x(i)=(i-1)*Fs/N; //将時間點換算為相應頻率
yy(i)=y(i);   %取N/2點的FFT模值——>FFT的變換是一般部分的點嗎?需要再回顧一下
end
yy=yy/(N/2); %做幅值變換,變換到時域信号的幅值
yy(1)=yy(1)/2;
plot(x,yy);
           
matlab中 FFT 的意義 學習記錄matlab中 FFT 函數的使用 學習記錄

上圖為FFT的幅頻特性圖。由上圖可以看出,在200Hz和300Hz頻點處幅值比原始信号(3、4)要低。這是因為對信号進行非整數倍周期采樣(截斷),産生頻譜洩露。??

在同樣條件下(N=1024,F=1000Hz)對信号s=2+1.5∙cos2π∙125∙t+60°+2.5∙cos2π∙250∙t+120°進行處理得到的FFT幅頻特性圖。可以看到由于是對信号進行整數倍的采樣,不存在截斷誤差引起的頻譜洩露。在125Hz頻點和250Hz頻點處幅值與原始信号相同。

以下實驗心得來自于上面的例子,感謝

一)原文連結:https://blog.csdn.net/fucong59/article/details/89218385

二)原文連結:https://blog.csdn.net/flypassion/article/details/82055703

2、上面待解決的理論問題:

  • 對信号進行非整數倍周期采樣,導緻頻譜洩露??
  • 計算上再複習FFT運算,看看為什麼是隻要一半N/2的點即可??
  • 另外,在看s的表達式時,一開始糊塗了,以為po主寫的不對,應将s離散化,運作才明白,其實一開始已經将t作離散了?,是以在s表達式中就不需要 f*n/fs 了。

3、心得記錄

①假設采樣頻率為Fs,信号頻率為F,采樣點數為N。則FFT之後結果也為N點複數,其中每一個點對應着一個頻率點,該點複數的模值為原始信号在該頻率值下的幅度特性。具體為:
  • 假設原始信号在某頻率點的幅值為A,則該頻點對應的FFT點複數的模值為A的N/2倍。而FFT第一點為原始信号的直流分量,其模值為原始信号模值的N倍。
  • 對于相位,FFT複數的相位即為原始信号在該頻率點處的相位。

是以,在一開始的實驗中,我的plot(t1,m2)将時間坐标軸與FFT之後的M2序列放在一起畫是錯誤的,不是幅頻響應圖像!這裡應該是下面程式裡的x(i),其意義是x軸的頻率點。他的長度與采樣後的序列長度相等,也如①所說,與FFT的複數序列長度相等,這樣就是一一對應的坐标關系咯。

另外還有上面提到的FFT複數的模值與原始信号幅度對應問題需要 除 以➗ (N/2),如果還要畫相位的話可以不用操作。*

②FFT後的N點複數,第一點表示直流分量(0Hz),而最後一點的下一點(實際不存在,假設為第N+1點)表示的頻率為采樣頻率(Fs),這中間被N-1個點平均分為N等份,每點頻率依次增加。例如,第k點所表示的頻率為:FK=(K-1)Fs/N。是以FFT所能達到的頻率分辨率為Fs/N。
③FFT結果以N/2對稱!!(換算為頻率即為乃奎斯特頻率,Fs/2)

是以我們隻需要前半部分的結果,即在乃奎斯特頻率内的結果。

是以,基于上面例子的啟示完成的我的作業部分如下

m2=fft(c );
y=abs(m2);
for i=1:size(c,1)/2 %隻取前半部分的采樣點 這樣畫出的圖不再對稱咯,隻有靠近縱坐标軸的部分啦 
x(i)=(i-1)*44100/size(c,1);  % x軸頻率點修改  44100是作業的采樣頻率 k*fs/N
yy(i)=y(i);
end
yy=yy/(size(c,1)/2)  %對FFT得到的複數的幅值進行修正 yy/(N/2)
yy(1)=yy(1)/2; 
plot(x,yy); %隻取N的一半的采樣點數即可!
           

4、總結修改的内容

完成我的作業,有了如下改進

  • 頻譜關于中間位置對稱,隻需要觀察 0:1:N/2(這N/2+1個點)(時域采集N個點,頻域隻需要觀察N/2+1個點)
  • MATLAB中FFT的頻譜,應該看幅值,對複數幅值修正
  • X軸頻率點的設定:采樣頻率為Fs,頻譜圖顯示的最高頻率為Fs/2(采樣定理):X軸頻率點:(0:1:N/2)*Fs/N

markdown好難用。。我彩色的标記全無了 L>T_T<I

繼續閱讀