2015-04-15 21 views
0

正弦信號的相位我有一個簡單的正弦函數爲sin(2 * PI ˚F噸+ PHI)。我想獲得相位信號phi。 我試着用FFT來計算phi。在matlab中,我做了以下操作:回收來自FFT

f=200; %frequency of sine wave 
overSampRate=30; %oversampling rate 
fs=overSampRate*f; %sampling frequency 
phase = 3/5*pi; %desired phase shift in radians 
nCyl = 5; %to generate five cycles of sine wave 

t=0:1/fs:nCyl*1/f; %time base 

x=sin(2*pi*f*t+phase); %replace with cos if a cosine wave is desired 

NFFT=1024; %NFFT-point DFT 
X=fft(x,NFFT); %compute DFT using FFT 
XX=2*abs(X(1:NFFT/2+1)); 
[tt ind]=max(XX); 
phase_Estimate=angle(X(ind); 

這個結果對我來說幾乎沒有意義。例如,當phi = 0.523時,phase_Estimate得到-0.98。

回答

1

您試圖從FFT(X)中獲取功率譜的相位(XX)。變化:

phase_Estimate=angle(XX(ind)); 

到:

phase_Estimate=angle(X(ind)); 
+0

謝謝。我編輯了我的代碼,但仍然沒有解決我的問題。我的問題是,我可以從FFT階段獲得phi嗎? – user51780

+0

如果您感興趣的頻率與相應的FFT頻率頻率不完全一致,那麼您需要進行一些調整才能獲得相位搜索http://dsp.stackexchange.com,因爲此問題已經在那裏至少回答了一次。 –

1

使用的非插值FFT結果相只有正弦波的時期恰好是FFT長度的整約數的作品。在你的例子中,正弦波在光圈中不是整數週期。

如果沒有,則需要進行插值相位,以獲得更好的估計。下面是一個方法來獲得一個更好的內插相位:

首先fftshift(由N/2旋轉)的數據做FFT之前移動至零相位基準點到窗口的中心。 (這需要保持相位不會在相鄰的FFT結果倉之間翻轉/交替。*)

然後執行FFT並通過拋物線或更好的Sinc插值估計正弦波的頻率。

然後使用所估計的頻率線性插入最接近的2點的FFT結果倉相之間的相。

然後使用所估計的頻率和相位在窗口的中心在一些其它點來計算相位,如FFT窗口的開始。

還要注意的是正弦的相位是從由PI/2的餘弦波的相位不同。 atan(im,re)返回餘弦相位。

(*爲替代預fftshit - 荷蘭國際集團的數據,一個也後翻轉奇FFT結果倉的階段。)

+0

謝謝。請您詳細解釋如何在最近的兩個FFT結果倉相位之間插入相位? – user51780