MATLAB分析頻譜

根據信號的FFT計算信號頻率和幅度:

假設採樣頻率爲Fs,信號頻率F,採樣點數爲N。那麼FFT之後結果就是一個爲N點的複數。

每一個點就對應着一個頻率點。第一個點表示直流分量(即0Hz),而最後一個點N的再下一個點(實際上這個點是不存在的,這裏是假設的第N+1個點,也可以看做是將第一個點分做兩半分,另一半移到最後)則表示採樣頻率Fs。即第一個點對應0Hz,第N+1個點對應Fs。例如第n點所表示的頻率爲:Fn=(n-1)*Fs/N。其中估計出來的信號頻率Fn能分辨的頻率爲Fs/N。

對信號做了FFT之後,結果爲複數,由於FFT結果的對稱性,通常我們只使用前半部分的結果,即小於採樣頻率一半的結果。因爲採樣頻率要大於信號頻率的2倍,因此不考慮FFT中高於信號頻率部分的結果。

fs=1e3;
t=0:1/fs:1;
N=length(t);
delta=fs/(N-1);
f=120;
y=sin(2*pi*f*t);
ff=(0:N-1)*delta;
plot(ff,abs(fft(y)));

上面例子中,採樣率爲1k,數據長度爲1001,則每個點的頻率代表1Hz,delta越大分辨越精確。

 

在上面的基礎上加入直流分量,並改變信號幅度:

fs=1e3;
t=0:1/fs:1;
N=length(t);
delta=fs/(N-1);
f=120;
y=3*sin(2*pi*f*t)+2;
ff=(0:N-1)*delta;
plot(ff,abs(fft(y)));

直流分量幅值爲2,sin分量幅值爲3。對信號FFT後求其頻譜:

在頻譜中,直流分量幅值=零頻FFT幅值/N。即2002/1001=2。

其他頻率點的幅值=FFT幅值/(N/2)。即1465/(1001/2)=2.92。


對於信號做2048點FFT:

fs=100e6;
N=(1:1000);
t=N/fs;
f=15e6;
y=3*sin(2*pi*f*t);
plot(abs(fft(y,2048)));

信號長度爲1000,做2048點FFT:

信號頻率=[(pos-1)/2048*Length(y)]*[fs/Length(y)]=(pos-1)*fs/2048,先計算信號FFT譜線在數據長度爲N的情況下的位置,再根據頻率分辨單元計算信號頻率。或者直接用譜線位置-1,乘以採樣率除以FFT的長度。

信號幅度=FFT中譜線高度/(N/2)。其中N爲信號長度。

FFT的長度不能小於信號長度。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章