¿Cómo encontrar la hora sideral media de Greenwich?

Estoy escribiendo un programa que convierte la posición en el sistema de coordenadas ECI (CIS, EPOCH JD2000.0) a coordenadas WGS 84 (CTS, ECEF). Para hacerlo, estoy siguiendo lo que se describe en este documento e implementando el código C++.

Mi conocimiento de la astrofísica es muy limitado, por lo que me cuesta entender algunos términos. Especialmente, parece que no puedo entender correctamente cómo se calcula el tiempo sideral medio de Greenwich y por qué siempre obtengo valores diferentes.

Por ejemplo (suponiendo que el tiempo es 2019-01-01 08:00:00y la fecha juliana es 2458484.833333):

  • Si uso esta calculadora GMST en línea , encuentro que GMST es 14:42:45.3766.
  • Si utilizo la expresión utilizada en este script de MATLAB (que muestra el valor en el tiempo, no en grados), también obtengo 14:42:45.350.
  • Sin embargo, si lo calculo yo mismo con la expresión dada en el apéndice anterior, obtengo 06:42:45.379163(con una compensación clara de

Según las ecuaciones de la página A-26, GMST depende del número de siglos julianos (Tu). La expresión de H0 es exactamente la misma que la de CelesTrak para θ(0h). Sin embargo, no puedo entender realmente qué significa du , o más específicamente, por qué el documento muestra du → ±0.5, 1.5, 2.5.... Además, para encontrar Λ (que se dice que está en segundos de tiempo ) las expresiones utilizan valores en radianes y segundos de tiempo indistintamente.

¿Alguien podría arrojar luz sobre esto?

Respuestas (2)

Para hacerlo, estoy siguiendo lo que se describe en este documento e implementando el código C++.

Ese es un documento muy antiguo que está utilizando. Está utilizando el modelo de precesión de la IAU de 1982. Ha habido múltiples actualizaciones desde entonces. El último conjunto de cambios está trabajando para eliminar el concepto de hora sideral de Greenwich. (En términos de software, GMST y GAST son conceptos obsoletos. Si bien aún se admite actualmente, se dejará de admitir en alguna versión futura del modelo de rotación de la Tierra).


Aparte de usar una versión obsoleta de un concepto obsoleto, ¿qué hiciste mal? La expresión que está utilizando para calcular GMST se encuentra en la parte superior de la página A-26:

Λ = H 0 + Δ H + ω ( t Δ t )
Él Δ H término toma uno de GMST a GAST. Eliminando ese término, la expresión para GMST es
(1) H = H 0 + ω ( t Δ t )
donde
(2) H 0 = 24110.54841 + 8640184.812866 T tu + 0.093104 T tu 2 6.2 × 10 6 T tu 3 es la hora sidérea de Greenwich a la medianoche, en segundos de tiempo (3) ω = 7.2921158553 × 10 5 + 4.3 × 10 15 T tu es la tasa de rotación sideral de la Tierra, en radianes / segundo t Δ es la hora UTC del día, en segundos, y Δ t es la diferencia entre UT1 y UTC.

Tenga en cuenta que hay un desajuste de unidades en la ecuación (1). La ecuación (2) arroja un resultado en unidades de segundos siderales, mientras que la ecuación (3), cuando se multiplica por la hora del día, arroja un resultado en unidades de radianes. Este último debe convertirse a segundos siderales. Para hacer esto, simplemente multiplique ambos términos en la ecuación (3) por 86400 2 π :

(4) ω = 1.00273790935 + 5.9 × 10 11 T tu es la tasa de rotación sideral de la Tierra, en segundos siderales / segundo UT

Aplicando esto al 01 de enero de 2019 a las 08:00:00 UTC se obtiene lo siguiente:

  • La fecha juliana a la medianoche UTC del 01 de enero de 2019 es 2458484.5 , o 2451545 + 6939.5 . Consulte la nota al pie 1 para obtener una explicación de esta convención.
  • Dividiendo el residuo 6939.5 por 36525 se obtiene T tu : T tu = 6939.5 / 36525 = 0.1899931553730322 .
  • Aplicando la ecuación (2) se obtiene el tiempo sideral medio de Greenwich a la medianoche: H 0 = 1665686.527373333 segundos siderales.
  • Aplicando la ecuación (4) y multiplicando por t = 8 3600 segundos produce otros 28878.85178960284 segundos siderales al anterior. Qué pasa Δ t , también conocido como dUT1? Lo ignoré (es decir, lo traté como si fuera cero). Ver nota al pie 2.
  • 1665686.527373333 + 28878.85178960284 = 52965.37916293584 (módulo 86400). Este es el tiempo sideral medio, en segundos. La conversión a horas, minutos y segundos da como resultado 14:42:45,4. Los 0,4 segundos son falsos porque ignoré dUT1.

Notas al pie:

  1. Hay un problema con el uso de fechas julianas para expresar el tiempo cuando se trata de una alta precisión. El problema es que agregar 2,45 millones y cambiar la hora desde el mediodía del 1 de enero de 2000 genera posibles problemas de truncamiento. La siguiente fecha juliana representable después de la medianoche del 1 de enero de 2000 es 40 microsegundos después de la medianoche. Yo mismo trato de mantenerme alejado un par de órdenes de magnitud del nivel de cuantización, lo que significa problemas para las fechas en el nivel de milisegundos.

    Casi todos los paquetes científicos que respaldan las fechas julianas usan un par de números de doble precisión o usan algún tipo de fecha juliana modificada, como el tiempo desde el 12 del mediodía del 16 de noviembre de 1858 (omite los 2,4 millones principales en la fecha juliana), el tiempo desde el 12 del mediodía del 23 Mayo de 1968 (omite los primeros 2,44 millones), o tiempo desde J2000.

  2. El término Δ t en las ecuaciones (2) y (4) se conoce mejor como dUT1. Esta es la diferencia entre UT1 (tiempo que usa la rotación media de la Tierra como reloj) y UTC (tiempo que corre a la misma velocidad que un reloj atómico, pero con segundos bisiestos ocasionalmente insertados para mantener UT1 y UTC sincronizados). Esos segundos bisiestos siguen | UT1 UTC | < 0.9 segundos . Simplemente ignora el Δ t término si ese es el caso, pero recuerde que las fracciones de segundo no tienen sentido.

Gracias por su completa respuesta, ¡realmente ayudó! Finalmente encontré el problema que estaba causando la conversión de coordenadas incorrecta y, desafortunadamente para este foro, ha caído en el área de conversión de unidades incorrectas y operaciones firmadas. Planeo cargar mi código C++ para contribuir un poco, pero me encantaría saber cuál sería el modelo actual/apropiado para usar si no es este el que está desactualizado. ¿Podría por favor proporcionar una referencia?
@CarlesAraguz -- ¡Dos referencias! Uno de ellos son los Convenios del Servicio Internacional de Sistemas de Referencia y Rotación de la Tierra (IERS), descritos en la Nota técnica 36 del IERS . Preste especial atención a los capítulos 4 y 5. El otro es el software de código abierto Standards of Fundamental Astronomy (SOFA) mantenido por la Unión Astronómica Internacional (IAU) en iausofa.org . Si pinchas, verás muchas funciones en C y Fortran, además de algunos "libros de cocina". El libro de cocina de interés es iausofa.org/sofa_pn_c.pdf .
solo una pregunta @David Hammen En la ecuación (3), para convertir radianes a segundos siderales, la expresión no debe multiplicarse por 86164/2π, donde 86164 es el número de segundos en un día sideral. (t−Δt) está en segundos siderales (incluso si se ignora Δt), ya que t(UTC) y Δt(UTC-UT1) ¿Entonces el resultado no debería ser módulo 86164? Lo siento pero no pude responder con un comentario.
@binghy - Multiplicando por 86164 2 π sería incorrecto. ( t Δ t ) produce segundos UT1, no segundos siderales. (Si ya supieras el tiempo en segundos siderales, se terminaría el juego; el objetivo de este ejercicio es convertir el tiempo UTC en tiempo sideral). Multiplicar un valor en unidades de radianes segundo UT por 86400 segundos UT / día solar 2 π radianes / revolución sideral convierte ese valor a unidades de revoluciones siderales día solar . Esto es equivalente a unidades de segundos siderales por segundo UT.

Calculé el GMST usando el método descrito en http://aa.usno.navy.mil/faq/docs/GAST.php . Esta debe ser una fuente autorizada y reclama una precisión de 0,1 segundos.

En pseudocódigo:

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

Este cálculo concuerda con la calculadora en línea. El método aquí (o como se describe en el enlace) debería ser fácil de implementar.

James: un error menor en su pseudocódigo: en su cálculo final para GMST, muestra la variable hours_since_epoch. Debería ser hours_since_midnight.
@RobertSmith Curado.