如何从FFT中获取幅度调制信号的相位角

4
我有一个振幅调制信号的测量参数。我使用matlab函数fft()进行了分析。按照“the book”计算后,只有一个问题。调制信号的相位不正确。只有在计算出来的相位上减去pi/2才能得到正确的值。调制信号是第六个组件:

X[6]= -8.2257e+001 -1.6158e+002i
phase(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,如第二张图片所示。

你是在使用 atan 还是 atan2?你的代码使用了 atan,但你标记了 atan2 - Doresoom
对不起,我的错误,没有 atan 标签,但我正在使用 atan() 函数。 - Elod
使用 atan2 即可解决问题。 - Doresoom
就像@Rody Oldenhuis所建议的那样,但是atan2(imagX,realX)=-2.04并不起作用,但相位如上所述为**-0.4709**。 - Elod
1
你确定测量中没有使用正弦函数而你却使用了余弦函数,或者反之吗?根据这些数字,是“测量”的相位不正确... - Rody Oldenhuis
1个回答

7
您遇到了象限歧义。在超出atan()范围时,范围是[-pi/2 ... +pi/2] ,并且存在多个重复值。这意味着,当角度恰好位于圆的“另一侧”时,您无法唯一确定正确的象限。
为避免出现此类情况,请使用angle(或phase)和/或atan2atan的4象限版本):
>> X = -8.2257e+001 - 1.6158e+002i;
>> angle(X)
ans =
   -2.041680802478084e+000
>> atan2(imag(X), real(X))
ans =
   -2.041680802478084e+000

第二个 ans =-2.0... 但如果我使用这段代码运行,相位差会比之前更大。我确定结果应该是 -0.4709 - Elod
@Elod:只需看一下您的值——在x方向(实轴)上减去80多,而在y方向(虚轴)上减去160多,这是一个大约45度的角度超出了负90度,因此大约是负135度(-2.3弧度左右)。所以您的-0.4弧度根本没有任何意义... - Rody Oldenhuis
我完全理解并同意你的观点,但是如果我使用相位移动,结果就是我帖子附上的第一张图片。 - Elod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接