(轉載)關於FFT的相位譜

轉自於http://blog.sina.com.cn/s/blog_4a854d240100vdmq.html

 先看一下我收到的程序,作爲研究對象的信號是這樣產生的:
T=128;
N=128;
dt=T/N;
t=dt*(1:N);
x=2*cos(2*t-pi/4);
...
      (我覺得這個信號存在一點問題,因爲t是從1開始的,所以它的初相應該和-pi/4有點差別吧。)
      爲什麼進行FFT,用angle得到相位-頻率特性卻不能反映這個信號的初始相位?
      胡廣書的《數字信號處理-理論、算法與實現(第二版)》第三章第八節《關於正弦信號抽樣的討論》,得出了關於正弦信號抽樣的六個結論,最後總結了一個總的原則:抽樣頻率應爲信號頻率的整數倍,抽樣點數應包含整週期。
      書中的結論五與採樣頻率和抽樣點數有很大的關聯。結論五主要說只有滿足了上面的那個總的原則,頻譜泄漏纔不會發生。我想不光是幅度譜的頻譜泄漏現象,抽樣頻率和抽樣點數同樣會對相位譜產生影響。
      考慮一個無限長的正弦信號(相當於初相爲-90°),如果我們截取它的整數個週期,然後對截短的信號進行週期延拓,則得到的延拓的信號與原無限長正弦沒有區別。
      現在我們再次對這個無限長的正弦進行截短,長度爲1.5個週期,然後對截短信號進行週期延拓,看看我們得到了什麼?
下圖、無限長正弦:

 

下圖、截短信號

一點五個週期正弦

下圖、對截短信號週期延拓:

週期延拓之後

      可以看出,此時進行週期延拓得到的信號與原來的正弦信號大相徑庭。新的週期信號是一個週期的偶函數,原無限長正弦是一個週期的奇函數,兩者奇偶性都不一樣了,因此不能指望利用新的信號的DFT求出原信號的初相。exp(-jωt)=cos(ωt)-jsin(ωt),進行變換的時候,若f(t)爲實偶函數,則f(t)sin(ωt)就是奇函數,對一個奇函數在對稱區間內積分只能得到0,因此實偶函數的傅立葉變換肯定是實的,對一個實數用angle求相位,當然相位是0。而原正弦肯定是初相爲-90°。
      我想這就是問題所在,DFT就是DFS,只不過DFT先將有限長信號進行週期延拓,然後求DFS,再截取一個週期。
      使用DFT,在有限的觀測時間內採集信號的信息。如若觀測時間內正好得到了整數個正弦週期,則DFT的週期延拓可以不失真的表示原正弦,可是如果觀測時間內得到的信號不是整數個週期,那麼問題隨之而來,就像上面的例子,觀測時間內得到了1.5個週期的正弦,然後進行週期延拓,顯然亂了套。
      如果滿足了胡廣書老師所總結的抽樣條件,則對正弦的DFT譜無疑可以很好地反映初相,我寫了兩個例子:
      第一個例子,信號只包含一個正弦:
t=linspace(0,2-0.125,16);
x=cos(2*pi*t+pi/4);
X=fft(x);
stem(abs(X));
figure;
stem(angle(X)/pi*180);

幅度譜:

一個正弦

相位譜:

一個正弦相位


      可以看見DFT相位譜第三個點對應正弦的相位,剛好是45°。
      第二個例子信號中包含兩個正弦:
t=linspace(0,2-0.125,16);
x=cos(2*pi*t+pi/4)+2*cos(2*pi*0.5*t+pi/8);
X=fft(x);
stem(abs(X));
figure;
stem(angle(X)/pi*180);

幅度譜:

兩個正弦

相位譜:

兩個正弦相位
      可以看見DFT相位譜第二個和第三個點對應兩個正弦的相位,剛好是22.5°和45°。
      如果沒有滿足上面所說的條件,就會得到不準確的結果,有興趣可試試下面的代碼:
t=linspace(0,2.5-0.125,32);
x=cos(2*pi*t+pi/4);
X=fft(x);
stem(abs(X));
figure;
stem(angle(X)/pi*180);
      如何克服這個問題?我覺得這非常困難。在不能預知信號頻率的情況下,無法確定採樣頻率和觀測點數。也許可以先進行一次觀測,通過幅度譜估計出正弦的頻率,然後根據頻率調整抽樣頻率,重新對信號進行採樣,使採樣符合上面所述的條件。但是這樣做有很多的問題,例如硬件可能不好實現。而且雖然第二次調整了採樣頻率和抽樣點數,可是初始相位已經無法得到了,因爲第二次採樣不可能再從零時刻開始。

      Sandygreta同學說可以這樣做,先以較高的抽樣頻率對信號進行採樣,通過FFT幅度譜估算出正弦信號的頻率,然後計算出滿足抽樣條件的最佳的抽樣頻率和觀測時間,使抽樣頻率爲正弦頻率的整數倍(大於2倍),且觀測時間內能正好得到整數個正弦週期。然後對剛纔採集的信號樣本進行插值,接着使用計算出來的採樣頻率和觀測時間對插值的結果重新採樣,計算FFT,得到初始相位。

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