Wie finde ich die mittlere Sternzeit von Greenwich?

Ich schreibe ein Programm, das die Position im ECI-Koordinatensystem (CIS, EPOCH JD2000.0) in WGS 84-Koordinaten (CTS, ECEF) umwandelt. Dazu folge ich der Beschreibung in diesem Dokument und implementiere C++-Code.

Mein Wissen über Astrophysik ist sehr begrenzt, daher fällt es mir schwer, einige Begriffe zu verstehen. Insbesondere kann ich nicht richtig verstehen, wie die Greenwich Mean Sideral Time berechnet wird und warum ich immer unterschiedliche Werte bekomme.

Zum Beispiel (vorausgesetzt, die Zeit ist 2019-01-01 08:00:00und das Julianische Datum ist 2458484.833333):

  • Wenn ich diesen Online- GMST-Rechner verwende , finde ich, dass GMST 14:42:45.3766.
  • Wenn ich den in diesem MATLAB-Skript verwendeten Ausdruck verwende (der den Wert in Zeit, nicht in Grad anzeigt), erhalte ich auch 14:42:45.350.
  • Wenn ich es jedoch selbst mit dem im obigen Anhang angegebenen Ausdruck berechne, erhalte ich 06:42:45.379163(mit einem deutlichen Offset von

Gemäß den Gleichungen auf Seite A-26 hängt GMST von der Anzahl der Julianischen Jahrhunderte (Tu) ab. H0-Ausdruck ist genau derselbe wie der von CelesTrak für θ(0h). Ich kann jedoch nicht wirklich verstehen, wofür das du wirklich steht, oder genauer gesagt, warum das Dokument zeigt du → ±0.5, 1.5, 2.5.... Darüber hinaus verwenden die Ausdrücke, um Λ (das in Sekunden angegeben wird ) zu finden, Werte in Bogenmaß und Zeitsekunden undeutlich.

Könnte jemand Licht ins Dunkel bringen?

Antworten (2)

Dazu folge ich der Beschreibung in diesem Dokument und implementiere C++-Code.

Das ist ein sehr altes Dokument, das Sie verwenden. Es verwendet das Präzessionsmodell der IAU von 1982. Seitdem gab es mehrere Updates. Die neuesten Änderungen zielen darauf ab, das Konzept der Sternzeit von Greenwich zu eliminieren. (In Bezug auf die Software sind GMST und GAST veraltete Konzepte. Obwohl sie derzeit noch unterstützt werden, wird die Unterstützung in einer zukünftigen Version des Erdrotationsmodells eingestellt.)


Was haben Sie außer der Verwendung einer veralteten Version eines veralteten Konzepts falsch gemacht? Der Ausdruck, den Sie zur Berechnung von GMST verwenden, befindet sich oben auf Seite A-26:

Λ = H 0 + Δ H + ω ( t Δ t )
Die Δ H Der Begriff führt von GMST zu GAST. Lässt man diesen Begriff weg, lautet der Ausdruck für GMST
(1) H = H 0 + ω ( t Δ t )
wo
(2) H 0 = 24110.54841 + 8640184.812866 T u + 0,093104 T u 2 6.2 × 10 6 T u 3 ist die Sternzeit von Greenwich um Mitternacht in Sekunden (3) ω = 7.2921158553 × 10 5 + 4.3 × 10 fünfzehn T u ist die siderische Rotationsrate der Erde in Radiant / zweite t Δ ist die UTC-Tageszeit in Sekunden und Δ t ist die Differenz zwischen UT1 und UTC.

Beachten Sie, dass es in Gleichung (1) eine Einheitenabweichung gibt. Gleichung (2) ergibt ein Ergebnis in Einheiten von Sternensekunden, während Gleichung (3), wenn sie mit der Tageszeit multipliziert wird, ein Ergebnis in Einheiten von Radian ergibt. Letztere muss in Sternsekunden umgerechnet werden. Multiplizieren Sie dazu einfach beide Terme in Gleichung (3) mit 86400 2 π :

(4) ω = 1.00273790935 + 5.9 × 10 11 T u ist die siderische Rotationsrate der Erde in Sternsekunden / UT Zweiter

Die Anwendung auf den 01. Januar 2019 08:00:00 UTC ergibt Folgendes:

  • Das julianische Datum um Mitternacht UTC 2019, 01. Januar ist 2458484.5 , oder 2451545 + 6939.5 . Siehe Fußnote 1 für eine Erläuterung dieser Konvention.
  • Dividiert man die restlichen 6939,5 durch 36525, erhält man T u : T u = 6939.5 / 36525 = 0,1899931553730322 .
  • Die Anwendung von Gleichung (2) ergibt die Greenwich Mean Sidereal Time um Mitternacht: H 0 = 1665686.527373333 siderische Sekunden.
  • Gleichung (4) anwenden und mit multiplizieren t = 8 3600 Sekunden ergibt weitere 28878,85178960284 Sternensekunden zu oben. Wie wäre es mit Δ t , auch bekannt als dUT1? Ich habe es ignoriert (dh behandelt, als ob es Null wäre). Siehe Fußnote 2.
  • 1665686,527373333 + 28878,85178960284 = 52965,37916293584 (Modulo 86400). Dies ist die mittlere Sternzeit in Sekunden. Die Umrechnung in Stunden, Minuten und Sekunden ergibt 14:42:45,4. Die 0,4 Sekunden sind falsch, weil ich dUT1 ignoriert habe.

Fußnoten:

  1. Es gibt ein Problem mit der Verwendung von julianischen Daten, um die Zeit auszudrücken, wenn es auf hohe Genauigkeit ankommt. Das Problem besteht darin, dass das Hinzufügen von 2,45 Millionen und die Änderung der Zeit seit Mittag am 1. Januar 2000 zu potenziellen Kürzungsproblemen führt. Das nächste darstellbare julianische Datum nach Mitternacht, dem 1. Januar 2000, ist 40 Mikrosekunden nach Mitternacht. Ich selbst versuche, ein paar Größenordnungen von der Quantisierungsebene entfernt zu bleiben, was Probleme für Daten auf Millisekundenebene bedeutet.

    Fast jedes wissenschaftliche Paket, das julianische Daten unterstützt, verwendet entweder ein Zahlenpaar mit doppelter Genauigkeit oder eine Art modifiziertes julianisches Datum, wie z Mai 1968 (die führenden 2,44 Millionen werden weggelassen) oder die Zeit seit J2000.

  2. Der Begriff Δ t in den Gleichungen (2) und (4) ist besser bekannt als dUT1. Dies ist der Unterschied zwischen UT1 (Zeit, die die mittlere rotierende Erde als Uhr verwendet) und UTC (Zeit, die mit der gleichen Geschwindigkeit wie eine Atomuhr läuft, aber mit gelegentlich eingefügten Schaltsekunden, um UT1 und UTC synchron zu halten). Diese Schaltsekunden halten | UT1 koordinierte Weltzeit | < 0,9 Sekunden . Ignorieren Sie die einfach Δ t Begriff, wenn das der Fall ist - aber denken Sie daran, dass Sekundenbruchteile bedeutungslos sind.

Danke für deine ausführliche Antwort, hat wirklich geholfen! Ich habe endlich das Problem gefunden, das eine falsche Koordinatenumwandlung verursacht hat, und leider für dieses Forum ist es in den Bereich der falschen Einheitenumwandlung und vorzeichenbehafteten Operationen gefallen. Ich habe vor, meinen C++-Code hochzuladen, um ein wenig beizutragen, aber ich würde gerne wissen, welches das aktuelle/angemessene Modell wäre, wenn nicht dieses veraltete. Könnten Sie bitte eine Referenz angeben?
@CarlesAraguz – Zwei Referenzen! Eine davon sind die IERS-Konventionen (International Earth Rotation and Reference Systems Service), die in IERS Technical Note 36 beschrieben sind . Achten Sie besonders auf die Kapitel 4 und 5. Die andere ist die Open-Source-Software Standards of Fundamental Astronomy (SOFA), die von der International Astronomical Union (IAU) unter iausofa.org gepflegt wird . Wenn Sie stöbern, werden Sie viele Funktionen in C und Fortran sowie einige „Kochbücher“ sehen. Das interessante Kochbuch ist iausofa.org/sofa_pn_c.pdf .
nur eine Frage @David Hammen In Gleichung (3) sollte der Ausdruck nicht mit 86164/2π multipliziert werden, um von Radianten in Sternsekunden umzuwandeln, wobei 86164 die Anzahl der Sekunden an einem Sternentag ist? (t−Δt) ist in Sternensekunden (auch wenn Δt ignoriert wird), da t(UTC) und Δt(UTC-UT1) Und das Ergebnis sollte also nicht modulo 86164 sein? Entschuldigung, aber ich konnte nicht mit einem Kommentar antworten
@binghy - Multiplizieren mit 86164 2 π wäre falsch. ( t Δ t ) liefert UT1-Sekunden, keine Sternensekunden. (Wenn Sie die Zeit in Sternsekunden bereits kennen, wäre das Spiel vorbei; der ganze Sinn dieser Übung besteht darin, die UTC-Zeit in Sternzeit umzuwandeln.) Einen Wert in Einheiten von multiplizieren Radiant UT Zweiter von 86400 UT Sekunden / Sonnentag 2 π Radiant / siderische Revolution wandelt diesen Wert in Einheiten von um siderische Revolutionen Sonnentag . Dies entspricht Einheiten von Sternsekunden pro UT-Sekunde.

Ich habe die GMST mit der in http://aa.usno.navy.mil/faq/docs/GAST.php beschriebenen Methode berechnet . Dies sollte eine maßgebliche Quelle sein und behauptet eine Genauigkeit von 0,1 Sekunden.

Im Pseudocode:

midnight = floor(2458484.833333) + 0.5            // J0 = 2458484.5
days_since_midnight = 2458484.833333 - 2458484.5  // = 0.333333
hours_since_midnight = 0.333333 * 24              // H = 8.0
days_since_epoch = 2458484.833333 - 2451545.0     // D = 6939.833333
centuries_since_epoch = days_since_epoch / 36525  // T = 0.190002
whole_days_since_epoch = 2458484.5 - 2451545.0    // D0 = 6939.5

GMST = 6.697374558 
     + 0.06570982441908 * whole_days_since_epoch 
     + 1.00273790935 * hours_since_midnight
     + 0.000026 * centuries_since_epoch**2        //=470.712605328

GMST_hours = 470 % 24 // = 14
GMST_minutes =  floor(0.712605328 * 60) //=42(.7563197)
GMST_seconds =  0.7563197*60 // =45.38

Diese Berechnung stimmt mit dem Online-Rechner überein. Die Methode hier (oder wie unter dem Link beschrieben) sollte einfach zu implementieren sein.

James – Ein kleiner Fehler in deinem Pseudocode: In deiner endgültigen Berechnung für GMST zeigst du die Variable hours_since_epoch. Dies sollte hours_since_midnight sein.
@RobertSmith Geheilt.