我正在使用Matlab的angle
函数来计算一系列傅立叶变换的相位。当我使用自己的angle
函数(如下)时,会得到不同的结果。我可以告诉我Matlab函数的实现方式吗?
function a = angle(x)
a = atan(imag(x)/real(x))
if (real(x) < 0)
a = a + pi
end
结果是Matlab的angle
函数的结果给出了“更好”的结果。我只是想知道我在做错什么。
答案 0 :(得分:2)
您应该使用atan2
计算相位:
function a = my_angle(x)
a = atan2(imag(x),real(x));
atan2
计算四象限反正切。它比atan
更精确,因为除法会降低精度。请参阅the Wikipedia entry,以了解如何计算此函数。
我不确定MATLAB的 Sardar Usama在a comment below中确认这是在MATLAB中实现的方式,您可以在MATLAB中键入angle
是如何实现的,但是如果没有通过atan2
实现,那就很奇怪了。edit angle
来查看代码。