import numpy as np
phases = np.arctan2(np.sin(phases), np.cos(phases))
ten działa, ponieważ sin (fazy)/cos (fazy) == tan (fazy). Wracamy do faz (modulo 2π) za pomocą funkcji odwrotnej-stycznej. Matematycznie, funkcja odwrotna-styczna jest wielowartościowa, więc w językach programowania zwykle definiuje się zwracanie fazy w ustalonych odstępach czasu.
Dwuparametrowa funkcja arcus tangens, czyli np.arctan2(numerator, denominator)
, jest taka sama jak zwykła funkcja arcus tangens, z tym, że śledzi znaki licznika i mianownika, i dlatego jest w stanie zwrócić modulo fazowe 2π, zamiast regularna funkcja np.arctan(numerator/denominator)
, która może tylko zwrócić modulo fazy π. Wdrożenie Numpy'ego funkcji arctan2
jest zdefiniowane, aby przywrócić fazę w zakresie [-π, + π], który jest zakresem, który zażądał OP.
dodatkowe wyjaśnienie: Metoda arctan2 wynika bezpośrednio z złożonego obrazu i jest całkowicie równoważna z matematycznego:
phases = np.angle(np.exp(1j*phases))
, które mogą być bardziej intuicyjne. I rzeczywiście, funkcja numpy'ego angle
wykorzystuje za kulisami arctan2
, aby oddzielić wyimaginowane i rzeczywiste składniki wykładniczej, tj. Sinus i cosinus.
Nie zdałem sobie sprawy, że mogę użyć operatora% z wartościami zmiennoprzecinkowymi. Ale dlaczego dodajesz π przed wykonaniem modułu? –
, ponieważ jest to potrzebne, jeśli potrzebujesz, aby wynik był między (-np.pi, np.pi) zamiast (0,2 * np.pi). Jeśli go nie dodasz, ale po prostu odejmiesz, 0 zostanie zamapowane na -> -np.pi, co jest nieprawidłowe –
To oczywiste! Czuję się teraz głupio ...Nie zdawałem sobie z tego sprawy, ponieważ interesuje mnie tylko względna faza i nie zwracałem uwagi na fazę absolutną. –