Функция угла Matlab для вычисления фазы - PullRequest
0 голосов
/ 14 июня 2019

Я использую функцию Matlab angle для вычисления фазы ряда преобразований Фурье.Когда я использую свою собственную функцию angle (ниже), я получаю разные результаты.Кто-нибудь может мне сказать, как реализована функция Matlab?

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

В результате результат функции angle Matlab дает "лучший" результат.Мне просто интересно, что я делаю не так.

1 Ответ

2 голосов
/ 14 июня 2019

Вы должны вычислить фазу с помощью atan2:

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

atan2 вычисляет обратную касательную в четырех квадрантах.Это точнее, чем atan, потому что деление теряет точность.См. запись в Википедии , чтобы узнать, как эта функция вычисляется.

Я не знаю точно, как реализован MATLAB angle, но было бы странно, если быне были реализованы через atan2. Сардар Усама подтвердил в комментарий ниже , что это так, как это реализовано в MATLAB, вы можете набрать edit angle в MATLAB, чтобысм. код.

...