Matlab 如何从FFT中获得调幅信号的相位角

Matlab 如何从FFT中获得调幅信号的相位角,matlab,fft,phase,Matlab,Fft,Phase,我有一个调幅信号的测量值。我使用fft()matlab函数进行了分析。在我用“书”计算所有东西之后,我只有一个问题。调制信号的相位不正常。只有从计算的相位中减去pi/2,我才能得到正确的值。调制信号是第六个分量: X[6]=-8.2257e+001-1.6158e+002i 相位(x[6])=atan(-8.2257e+001/-1.6158e+002)=1.0999 真正的阶段是:pahse(x[6])-pi/2=-0.4709 为什么我必须减去pi/2?atan2(imag(X(6)),re

我有一个调幅信号的测量值。我使用fft()matlab函数进行了分析。在我用“书”计算所有东西之后,我只有一个问题。调制信号的相位不正常。只有从计算的相位中减去pi/2,我才能得到正确的值。调制信号是第六个分量:

X[6]=-8.2257e+001-1.6158e+002i
相位(x[6])=atan(-8.2257e+001/-1.6158e+002)=1.0999

真正的阶段是:
pahse(x[6])-pi/2=-0.4709

为什么我必须减去pi/2?atan2(imag(X(6)),real(X(6))“> atan(imag(X(6))/real(X(6))-pi/2“>

如果我使用atan2(imag(X(6)),real(X(6))-第一个图像


如果我使用atan(imag(X(6))/real(X(6))-pi/2-second image

你正在经历象限模糊。
atan()
的范围是
[-pi/2…+pi/2]
,超出该范围时会重复。这意味着,当角度恰好位于圆的“另一侧”时,无法唯一地确定角度的正确象限

要避免这种情况,请使用
角度
(或
相位
)和/或
atan2
(atan的四象限版本):


您使用的是
atan
还是
atan2
?您的代码使用了
atan
,但您已经标记了
atan2
。对不起,我的错误是,没有atan标记,但我使用的是atan()fnc。然后使用
atan2
。问题解决了。就像@Rody Oldenhuis建议的那样,但是nether可以
atan2(imagX,realX)=-2.04
,但是相位是-0.4709,正如我上面提到的。你确定在使用正弦的地方测量没有假定余弦,或者相反,或者什么吗?根据这些数字,测量的相位是不正确的…秒
ans=-2.0…
但是如果我用这个代码运行,我的相位差会比之前更大。我确信结果应该是-0。4709@Elod:只要看看你的值-
x
方向上的负80度(实轴)和
y
方向上的负160度(假想轴),这是一个超过负90度大约45度的角度,因此,大约是负135度(-2.3度弧度)。所以你的-0.4弧度没有任何意义…我完全理解并同意你的观点,但是如果我使用相移,结果就是贴在我帖子上的第一张图片。
>> X = -8.2257e+001 - 1.6158e+002i;
>> angle(X)
ans =
   -2.041680802478084e+000
>> atan2(imag(X), real(X))
ans =
   -2.041680802478084e+000