import numpy as np
phases = np.arctan2(np.sin(phases), np.cos(phases))
Questo funziona perché il peccato (fasi)/cos (fasi) == tan (fasi). Otteniamo le fasi indietro (modulo 2π) usando la funzione inversa-tangente. Matematicamente, la funzione inversa tangente è multivalore, quindi nei linguaggi di programmazione viene solitamente definita per restituire la fase in un intervallo fisso.
La funzione arcotangente a due parametri, ovvero np.arctan2(numerator, denominator)
, è la stessa della normale funzione arcotangente, tranne per il fatto che tiene traccia dei segni del numeratore e del denominatore e pertanto è in grado di restituire il modulo fase 2π, anziché il normale np.arctan(numerator/denominator)
funzione che è solo in grado di restituire il modulo di fase π. L'implementazione di Numpy della funzione arctan2
è definita per restituire la fase nell'intervallo [-π, + π], che è l'intervallo richiesto dall'OP.
Ulteriori spiegazione: Questo metodo arctan2 deriva direttamente dalla rappresentazione complessa, ed è interamente matematicamente equivalente a:
phases = np.angle(np.exp(1j*phases))
che può essere più intuitivo. In effetti, la funzione angle
di numpy utilizza arctan2
dietro le quinte per separare i componenti immaginari e reali dell'esponenziale, cioè il seno e il coseno.
Non mi sono reso conto che potrei usare l'operatore% con valori in virgola mobile. Ma perché stai aggiungendo π prima di eseguire il modulo? –
perché è necessario se è necessario che il risultato sia compreso tra (-np.pi, np.pi) anziché (0,2 * np.pi). Se non lo aggiungi, ma sottrai, 0 verrà mappato in -> -np.pi che non è corretto –
È ovvio! Mi sento stupido ora ...Non me ne sono reso conto perché sono interessato solo alla fase relativa, e non stavo attirando l'attenzione sulla fase assoluta. –