Forum: Digitale Signalverarbeitung / DSP / Machine Learning Phasengang mit C# berechnen


von NewUser (Gast)


Lesenswert?

Hi,

ich bin gerade dabei den Phasengang mit der Programmiersprache C# zu 
berechnen. Der Realteil sowie Imaginärteil liegen jeweils separat in 
einem Array von der Größe 100.
1
double radians = 0;
2
for (int i=0; i<100; i++)
3
  if (realteil[i] == 0)
4
     y[i] = (double)90;
5
  else
6
  {
7
     radians = Math.Atan((double)(imaginaerteil[i] / realteil[i]));
8
     y[i] = radians * (180 / Math.PI); // angle
9
  }
10
}

Wenn ich diesen Code wie oben gezeigt ausführe, dann bin ich mir nicht 
ganz sicher ob die berechnungen so stimmen. Es können ja bei der arctan 
Funktion Phasensprünge von +/- pi vorkommen. Ich weiss nicht wie ich 
dies in meinem Code integrieren könnte.

von yalu (Gast)


Lesenswert?

> Es können ja bei der arctan Funktion Phasensprünge von +/- pi
> vorkommen.

Deswegen gibt es die Atan2-Funktion. Ganz nebenbei sparst du dir auch
den Vergleich mit 0:
1
for (int i=0; i<100; i++)
2
  radians = Math.Atan2(imaginaerteil[i], realteil[i]);
3
  y[i] = radians * (180 / Math.PI); // angle
4
}

von yalu (Gast)


Lesenswert?

Ergänzug: Die Sprünge zwischen ±pi gibt es auch bei der Atan2-Funktion
(irgendwo muss sich der Kreis ja schließen), was aber normalerweise
nicht stört. Der Vorteil gegenüber der Atan-Funktion besteht vor allem
darin, dass Atan2 für alle vier Quadranten das gewünschte Ergebnis
liefert, während Atan dies nur im ersten und vierten Quadranten tut.

von NewUser (Gast)


Lesenswert?

Danke für eure Unterstützung!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.