DFT做頻譜分析再理解

DFT再理解

2015.12.18

       之前學習《信號與系統》的時候,對於用fft()函數分析離散、連續時間信號的頻譜出來的結果一直一知半解,這學期學習了《數字信號處理》,學習了離散傅里葉變換(DFT),對之前的寫的程序做進一步理解。

       在此之前,先將CTFS、DTFS、CTFT、DTFT的公式列出來,方便理解:


注意:這裏計算離散週期信號的傅里葉係數的公式前面少了一個N分之一,下面也會涉及到。

 

(一) 用DFT分析離散非週期信號的頻譜(離散非週期的DTFT爲連續週期的,以2*pi爲週期)

比較DTFT和DFT公式可以發現:


N點DFT是DTFT結果在[0,2*pi]週期內N點採樣;

所以,分析離散非週期信號的頻譜的思路如下:

(1)    對已知的信號進行截短(如果本來就是有限長的則不用);

(2)    對截短的離散信號做N點DFT(這裏的N應該大於離散信號的點數,N越大,在頻域的採樣就越密集);

(3)    將橫座標轉換爲【-pi,pi】,符合實際的情況(/N*2*pi)。

具體的解釋見下面的代碼(具體代碼粘貼在最後面)。

下面是一個例子:


運行結果如下:


 

(二)  用DFT分析離散週期信號的頻譜(離散週期信號的DTFS爲離散週期的,以基波週期N爲週期)

比較DTFS和DFT公式,可以發現:


如上面提到的,上面的DTFS公式與實際的相差了N倍,所以在畫頻譜的時候需要考慮進去。

離散週期信號的基波週期爲N,取其中N點做N點DFT相當於離散週期信號DTFS的一個N週期內的值。

所以,分析離散週期信號的頻譜的思路如下:

(1)    確定基波週期N;

(2)    取離散週期信號的N個點,如【0,N-1】;

(3)    做N點DFT(幅度上要除以N,原因在DTFS公式比DFT公式前面多了一項1/N);

(4)    得到離散週期信號在一個基波週期內的傅里葉係數;

 

下面是一個例子: 

 

(三)  用DFT分析連續非週期信號的頻譜(連續非週期信號的CTFT爲連續非週期的)

利用採樣,將連續非週期信號,轉換成離散非週期信號,對得到的離散非週期信號做DFT,類似於(一),最後再利用模擬頻率與數字頻率的關係(模擬頻率乘以採樣週期等於數字頻率)將橫座標由數字頻率轉換爲模擬頻率:


分析連續非週期信號的頻譜的思路如下:

(1)    根據需要截短(如果連續信號是無限長的);

(2)    估計信號的最高頻率fm;

(3)    採樣頻率fs>2*fm;

(4)    按T(T=1/fs)對連續信號進行採樣;

(5)    對採樣後的信號(相當於離散非週期信號)做N點DFT(此處的N應該大於等於採樣點數,而且越大越好,越大代表如(一)分析的,在頻域上的採樣就越密集,對離散非週期信號的頻譜更好地逼近),DFT結果幅度上要除以T,這是採樣導致的結果;

(6)    將橫座標轉換成模擬頻率(/N*2*pi*fs)。

下面是一個例子:

 


(四)  用DFT分析連續週期信號的頻譜(連續週期信號的CTFS爲離散非週期)

對連續週期信號在一個或多個基波週期長度內進行採樣,採樣頻率fs>2*fm,對採樣點做等長(假設爲N)的DFT(幅度上得除以N,原因同(二)),由於用了採樣,所以同(三)一樣需要將數字頻率轉換成模擬頻率(/N*2*pi*fs)。

分析連續週期信號的頻譜的思路如下:

(1)    確定基波週期To和最高頻率fm,採樣頻率fs>2*fm;

(2)    對連續週期信號的一個週期(可以多個週期)以頻率fs進行均勻採樣,採樣點數爲N;

(3)    對採樣點做N點DFT(幅度/N,原因同(二));

(4)    將橫座標轉換成模擬頻率(/N*2*pi*fs)。

下面是一個例子:






全部代碼:

function test1

%%%%%%%%(1)離散非週期%%%%%%%%%%%%% x = 0.8.^n;(頻譜爲連續週期(週期爲2*pi))

N = 31;%%%%%無限長的信號應根據需要先截斷

n = 0:N-1;

x = 0.8.^n;

X = fft(x,N);%%%%%%對截斷的離散信號做N點DFT相當於在其頻譜的【0,2pi】區間做N點均勻採樣

figure;

subplot(3,1,1);

stem(n,x);

subplot(3,1,2);

plot([-(N-1)/2:(N-1)/2],abs(fftshift(X)));%%%%%%此處畫出來的頻譜圖的橫座標是對離散非週期信號的實際頻譜在[-pi,pi]區間採樣的點

subplot(3,1,3);

plot([-(N-1)/2:(N-1)/2]./N*2*pi,abs(fftshift(X)));%%%%%%此處將頻譜的橫座標轉化爲[-pi,pi]區間,這纔是實際情況(離散非週期信號的DTFT是連續週期的,以2pi爲週期)

 

%%%%%%(2)離散週期%%%%%%%%%%%%% x =cos(pi/8*n+pi/3)+0.5cos(7*pi*n/8);(頻譜爲離散週期(週期爲基波週期N))

%%%%%%%%確定信號的基波週期爲16

N = 16;

n = 0:N-1;

x = cos(pi/8*n+pi/3)+0.5*cos(7*pi*n/8);

X = fft(x,N)/N;%%%%%%對截斷的離散信號做N點DFT,得出的結果相當於是原週期信號在【0,N-1】的傅里葉係數,除以N表示DFT公式與離散週期信號傅立葉級數公式的關係所需;

figure;

subplot(3,1,1);

stem(n,x);

subplot(3,1,2);

stem([-N/2:N/2-1],abs(fftshift(X)));%%%%%%此處畫出來的頻譜圖的橫座標是離散週期信號的CTFS(傅里葉係數,以N爲週期),在[-N/2:N/2-1]的變化,即諧波次數(基波週期N=16的情況下)

subplot(3,1,3);

stem([-N/2:N/2-1]./N*2*pi,abs(fftshift(X)));%%%%%%此處畫出來的頻譜圖的橫座標是將上面的諧波次數乘上基波頻率2*pi/N

 

%%%%%%(3)連續非週期%%%%%%%%%%%%% x = exp(-1*t);(頻譜爲連續非週期)

%%%%%%取x的最高頻率fm爲25,根據奈奎斯準則,採樣率取100>2*25

%%%%%此處的信號無限長,同樣需要進行截短,這裏去前6秒

fs = 100;

Tp = 6;

T = 1/fs;

t = 0:T:Tp;

x = exp(-1*t);

N = 1024;%%%%%%%進行DFT的點數,這裏的N只要比採樣點數多即可,越大越能夠逼近

X = fft(x,N)*T;%%%%%%此處乘上T是由於對連續信號採樣導致的頻譜幅度變化。

subplot(2,1,1);

plot(t,x);

subplot(2,1,2);

%%%%%%此處畫出來的頻譜圖的橫座標是[-N/2:N/2-1]*(2*pi/N)是對採樣得到的離散非週期信號做頻譜分析得到的數字角頻率,乘上fs即除以採樣週期T纔得到模擬角頻率

plot([-N/2:N/2-1]*(2*pi/N)*fs,abs(fftshift(X)));

 

 

%%%%%%%(4)連續週期%%%%%%%%%%%%% x =cos(10*pi*t)+2*cos(18*pi*t);(頻譜爲離散非週期)

%%%%%%%因爲x的基波頻率爲2*pi,基波週期Tp爲1s,最高次諧波爲9,即最高頻率爲9Hz

%%%%%%%由奈奎斯採樣準則確定出採樣頻率fs=20>2*9

fs = 20;

T = 1/fs;

Tp = 1;

N = Tp/T;

t = 0:T:Tp-T;

x = cos(10*pi*t)+2*cos(18*pi*t);

X = fft(x,N)/N;

subplot(2,1,1);

plot(t,x);

subplot(2,1,2);

stem([-N/2:N/2-1]/N*fs,abs(fftshift(X)));%%%%%%此處畫出來的頻譜圖的橫座標是[-N/2:N/2-1]*(2*pi/N)是對採樣得到的離散非週期信號做頻譜分析得到的數字角頻率,乘上fs即除以採樣週期T纔得到模擬角頻率

 

 

 

 

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