【问题标题】:Matlab angle function to compute phaseMatlab角度函数来计算相位
【发布时间】:2019-06-14 18:16:29
【问题描述】:

我正在使用 Matlab 的 angle 函数来计算一系列傅立叶变换的相位。当我使用自己的 angle 函数(如下)时,我得到了不同的结果。谁能告诉我matlab函数是怎么实现的?

function a = angle(x)
  a = atan(imag(x)/real(x))
  if (real(x) < 0)
    a = a + pi
  end

结果是 Matlab 的 angle 函数的结果给出了“更好”的结果。我只是想知道我做错了什么。

【问题讨论】:

    标签: matlab trigonometry


    【解决方案1】:

    你应该用atan2计算相位:

    function a = my_angle(x)
    a = atan2(imag(x),real(x));
    

    atan2 计算四象限反正切。它比atan 更精确,因为除法会丢失精度。请参阅the Wikipedia entry 了解如何计算此函数。

    我不确定 MATLAB 的 angle 是如何实现的,但如果不是通过 atan2 实现的话会很奇怪。 Sardar Usamaa comment below 中证实了这一点这是它在MATLAB中的实现方式,您可以在MATLAB中输入edit angle查看代码。

    【讨论】:

    • 使用type angleedit angle 来查看。尽管实现相同,但最好不要将其命名为相同
    • @Sardar:我现在无法访问 MATLAB,所以我不能edit angle。虽然它可能是一个内置函数,但我认为您可能看不到任何代码。你试过了吗?
    • 是的。他们以与您展示的方式相同的方式实现它:)
    • @Sardar:对于实部和虚部的新存储(它们现在是单个内存块),这是一个低效的实现,因为它需要复制数据。我很失望!
    • 我在 R2018a 中进行了测试。不能说新版本。
    猜你喜欢
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2021-06-18
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    相关资源
    最近更新 更多