¿El número PRN en los archivos TLE es el mismo en los archivos RINEX? (en constelación GPS)

Quiero comparar la posición calculada con archivos Pyephem y TLE , con archivos RINEX y biblioteca GPSTK en una fecha y hora específicas, pero no tengo la certeza de si el nombre del satélite "PRN ##" es el mismo en ambos archivos ( TLE y RINEX)?

por ejemplo, en Celestrak (archivo TLE) para una constelación GPS, la identificación o el nombre del satélite es:

GPS BIIF-1 (PRN 25)
1 26690C 01004A 17096.69312500 -.00000000 00000-0 00000-0 0 966 2 26690 53.0252 160.8176 0181123 256.0966 20.90285 10

pero en los archivos RINEX solo tienen una letra unida a un número, así:

17 01 12 00 00 0.0000000 0 21G05G16G20G21 G25 G26G27G29G31R01R02R09 R15R16R17R18R19E01E26S20S36

donde la letra es la constelación G para constelación GPS y R para constelación GLONASS , S es para SBAS , etc. Junto a la letra hay un número, por ejemplo, G25 , el número de ese satélite es 25 para el archivo RINEX.

Estoy trabajado con la constelación de GPS. Estoy probando con algo de código en python, pero no estoy seguro si el PRN 25 es el mismo que el G25, porque calcular la elevación del satélite con ID 25 en un día completo es diferente en el tiempo que muestra el archivo RINEX. en comparación con los archivos TLE... o puede haber algo mal en mi código.

obsHeader, obsData = gpstk.readRinex3Obs(obsfile)
navHeader, navData = gpstk.readRinex3Nav(navfile)
# setup ephemeris store to look for satellite positions
bcestore = gpstk.GPSEphemerisStore()
for navDataObj in navData:
    ephem = navDataObj.toGPSEphemeris()
    bcestore.addEphemeris(ephem)
bcestore.SearchNear()
navData.close()
#look each satellite
for obsObject in obsData: #round the data
    for satID, datumList in obsObject.obs.iteritems():
        if satID.systemGPS == satID.system and satID.id == NumSatellite:
            time=obsObject.time #satellite time from the observation
            CivilTime = gpstk.CivilTime(obsObject.time)
            #break
            eph   = bcestore.findEphemeris(satID, obsObject.time)
            svXvt = eph.svXvt(obsObject.time)
            elev = obsHeader.antennaPosition.elvAngle(svXvt.getPos())
            azim    = obsHeader.antennaPosition.azAngle(svXvt.getPos())
            
            SecondsTime.append(obsObject.time.getSecondOfDay())
            TimesSatRin.append(CivilTime)
            AziSatRin.append(azim)
            ElevSatRin.append(elev)
#for each observation day.
DateTimeRinex = CivilTime2datetime(TimesSatRin)
for t in DateTimeRinex:
    #for each Time of the rinex (for the specific Satellite)
    print 'next time: ', t

    names,elevs,azs,types = GetPositionELAZ(t,Longitude_obs,Latitude_obs,1) #just GPS with TLE files
    print names
    for i in range (0,len(names)):
        number = int(filter(str.isdigit, names[i]))
        #print number,' number sat of the TLE'
        if number == NumSatellite:
            print 'GOT',number,' number sat of the TLE'
            TimeTLE.append(t)
            ElevTLE.append(elevs)
            AzimTLE.append(azs)

La posición (lon,Lat) es la misma de la estación terrestre del repositorio de archivos RINEX. Gracias.

ACTUALIZACIÓN 1:
Estoy probando con mi código, un vehículo por uno, y puedo ver la comparación de elevaciones de cada satélite a lo largo del día. Para los archivos RINEX pruebo con 4 días, día del año 101, 100, 80 y 10. y para estos días siempre el TLS PRN 10 los resultados son similares a RINEX PRN 12 ; Dije similar, porque no son los mismos resultados. Todavía estoy comprobando.

20 de abril

20 de abril

19 de abril

19 de abril

21 de marzo

21 de marzo

10 de enero

10 de enero

Aparentemente existe una ID de PRN para RINEX por cada ID de PRN para TLE, en este caso RINEX PRN 12 = TLE PRN 10. Pero esta no es la respuesta precisa, así que dejaré abierta la pregunta.

ACTUALIZACIÓN 2:

El cálculo de posición con TLE es muy preciso. pero me dio un error, me dio una posición en Longitud/Latitud, pero era una posición incorrecta, por cierto, debe tomar la posición para comparar, por el archivo RINEX (el archivo de observación), en la Cabecera; el archivo tiene la posición en X,Y,Z, por lo que es necesario convertir a posición longitud-latitud.ingrese la descripción de la imagen aquí

para obtener la Longitud-Latitud:

def Get_latitude(x, y, z):
    #radius earth
    r = 6371000.
    return np.arcsin(z/r)*(180/np.pi)

def Get_longitude(x, y, z):
    #radius earth
    r = 6371000.
    if (x > 0):
        return np.arctan(y/x)*(180./np.pi)
    elif y > 0:
        return np.arctan(y/x)*(180./np.pi) + 180.
    else:
        return np.arctan(y/x)*(180./np.pi) - 180.
No estoy seguro de haber entendido bien el problema, pero el número PRN está dedicado a un satélite gps, por lo que no debería cambiar entre diferentes fuentes. ¿Cuál es la diferencia de la que hablas?
La identificación del archivo TLS para cada satélite es, por ejemplo, GPS BIIRM-3 (PRN 12) y en el archivo RINEX es, por ejemplo, G12 , estoy tratando de comparar el mismo satélite, por ejemplo, en _12/03/2017 - 12:34 pm _ según la prueba, no son el mismo satélite (PRN12 y G12) entonces, ¿cuál es el mismo satélite en archivos TLE y archivos RINEX? (o puede ser que mi prueba sea incorrecta)
comentario al margen, Skyfield es otro paquete de python que tiene algunas funciones que se superponen con pyephem. Ambos son mantenidos por la misma persona, pero en el futuro, Skyfield puede volverse más útil para los vuelos espaciales por satélite y el sistema solar, ya que se basa directamente en las efemérides del JPL, mientras que pyephem hace muchos cálculos especializados pero no se basa en las efemérides del JPL.
Gracias @uhoh, estoy probando Skyfield , no lo conocía y es muy interesante. Por ahora, estoy comparando la posición del satélite en Azimut y Elevation, por lo tanto, ambas bibliotecas funcionan para mí, pero veo que Skyfield también usa TLE. ¿Es incorrecto comparar los archivos RINEX con los archivos TLE en una fecha específica?
Hay muchos objetos en órbita y muy pocas personas guardan todos sus nombres en la cabeza. Para mejorar sus posibilidades de obtener una respuesta, publique ejemplos específicos de lo que está hablando. Miré en una descarga satcat de CelesTrak y no veo "BIIRM" en ningún lado. ¿Qué es un "ID de archivo TLS"? Modifique su pregunta y agregue ejemplos claros y específicos de lo que está hablando. No espere que la gente busque una respuesta para usted. ¿Qué has mirado hasta ahora para tratar de obtener la respuesta? Creo que este es el tipo de cosas a las que @VolkanOzcan puede haberse referido.
Los PRN se reasignan periódicamente, por lo que un SV en particular puede tener varios PRN diferentes a lo largo de su vida. Es muy posible que Celestrak o su proveedor de datos no se mantenga completamente actualizado con los cambios de PRN.

Respuestas (1)

Creo que lo que está pasando aquí es básicamente lo mismo discutido en esta pregunta , donde las dos respuestas son "usan diferentes sistemas de coordenadas" y "significan cosas diferentes con los mismos nombres de elementos". Incluso si el OP obtuvo la rotación del marco correcta, las diferencias a esta escala no me sorprenden en absoluto. Por una razón, las especificaciones para GPS y para TLE definen diferentes ecuaciones para modelar el comportamiento no elíptico de las órbitas a corto plazo, por lo que al comparar los resultados en detalle en un rango de tiempos, las formas de las curvas solo van a ser un poco diferente.

Lo que es único acerca de esta pregunta es cómo la identificación del satélite (bueno, la identificación de la secuencia de ruido pseudoaleatoria) entra en escena. Aquí solo estoy adivinando sobre el código del OP, pero lo que creo que puede estar sucediendo es que hay muchos satélites GPS y todos mantienen órbitas muy similares. Esto probablemente significa que si no está manejando correctamente la rotación del marco y mira suficientes datos, por suerte encontrará algunos ejemplos en los que buscó sistemáticamente en el lugar equivocado para el satélite que deseaba encontrar, pero cuando miraste allí, en realidad encontraste un satélite diferente de la misma constelación en prácticamente el lugar donde buscaste.