2015-04-15 99 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