import numpy as np
phases = np.arctan2(np.sin(phases), np.cos(phases))
Das funktioniert, weil sin (Phasen)/cos (Phasen) == tan (Phasen). Wir erhalten Phasen (Modulo 2π) zurück, indem wir die Invers-Tangens-Funktion verwenden. Mathematisch ist die Invers-Tangens-Funktion mehrwertig, so dass sie in Programmiersprachen üblicherweise so definiert ist, dass sie die Phase in einem festen Intervall zurückgibt.
Die Zweiparameter-Arkustangensfunktion, dh np.arctan2(numerator, denominator)
, ist die gleiche wie die reguläre Arkustangensfunktion, außer dass sie die Vorzeichen von Zähler und Nenner verfolgt und daher die Phase modulo 2π zurückgeben kann reguläre np.arctan(numerator/denominator)
Funktion, die nur die Phase modulo π zurückgeben kann. Die Implementierung der arctan2
-Funktion von Numpy ist so definiert, dass sie die Phase im Bereich [-π, + π] zurückgibt, was der vom OP angeforderte Bereich ist.
Zusätzliche Erläuterung: Diese Methode arctan2 folgt direkt aus der komplexen Darstellung und ist vollständig mathematisch äquivalent zu:
phases = np.angle(np.exp(1j*phases))
welche intuitiver sein kann. Und tatsächlich verwendet numpys angle
-Funktion arctan2
hinter den Kulissen, um die imaginären und realen Komponenten der Exponentialfunktion, d. H. Den Sinus und den Kosinus, zu trennen.
Ich erkannte nicht, dass ich den Operator% mit Fließkommawerten verwenden könnte. Aber warum fügst du π hinzu, bevor du den Modulus ausführst? –
, da dies erforderlich ist, wenn das Ergebnis zwischen (-np.pi, np.pi) und (0,2 * np.pi) liegen muss. Wenn Sie es nicht hinzufügen, sondern nur subtrahieren, wird 0 in -> -np.pi zugeordnet, was inkorrekt ist. –
Es ist offensichtlich! Ich fühle mich jetzt dumm ...Ich habe es nicht bemerkt, weil ich nur an der relativen Phase interessiert bin und nicht auf die absolute Phase geachtet habe. –