Я хочу сравнить позицию, рассчитанную с файлами Pyephem и TLE , с файлами RINEX и библиотекой GPSTK в конкретную дату и время, но у меня нет уверенности, что имя спутника "PRN ##" одинаково в обоих файлах ( ТЛЭ и РИНЭКС)?
например, в Celestrak (файл TLE) для созвездия GPS идентификатор или имя спутника:
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.091566 20.3285 40
но в файлах RINEX есть только буква, присоединенная к числу, например:
17 01 12 00 00 0,0000000 0 21G05G16G20G21 G25 G26G27G29G31R01R02R09 R15R16R17R18R19E01E26S20S36
где буква — это созвездие G для созвездия GPS , а R — для созвездия ГЛОНАСС , S — для SBAS и т. д. Рядом с буквой — число, например, G25 , номер этого спутника — 25 для файла RINEX.
Я работал с созвездием GPS. Я тестирую код на python, но я не уверен, что PRN 25 совпадает с G25?, потому что расчет высоты спутника с ID 25 в лунный день отличается во времени, которое показывает файл RINEX. сравнение с файлами TLE... или может быть что-то не так в моем коде.
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)
Положение (долгота, широта) совпадает с наземной станцией хранилища файлов RINEX. Спасибо.
ОБНОВЛЕНИЕ 1:
я тестирую свой код, одно транспортное средство за другим, и я могу видеть сравнение высот каждого спутника в течение дня. Для файлов RINEX я пытаюсь использовать 4 дня, день года 101, 100, 80 и 10. И для этих дней всегда TLS PRN 10 , результаты аналогичны RINEX PRN 12 ; Я сказал похожие, потому что это не те же результаты. Я все еще проверяю.
20 апреля
19 апреля
21 марта
10 января
По-видимому, существует идентификатор PRN для RINEX для каждого идентификатора PRN для TLE, в этом случае RINEX PRN 12 = TLE PRN 10. Но это не точный ответ, поэтому я позволю открыть вопрос.
ОБНОВЛЕНИЕ 2:
Расчет положения с помощью TLE очень точен. но у меня ошибка, я получил позицию в долготе/широте, но это была неправильная позиция, обязательно, вы должны взять позицию для сравнения, по файлу RINEX (файл наблюдения), в шапке; файл имеет позицию в X, Y, Z, поэтому необходимо преобразовать в позицию долгота-широта.
для получения долготы-широты:
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.
Я думаю, что здесь происходит в основном то же самое, что обсуждается в этом вопросе , где два ответа: «они используют разные системы координат» и «они означают разные вещи под одними и теми же именами элементов». Даже если у ОП правильное вращение кадра, различия в этом масштабе меня совсем не удивляют. По одной причине, спецификации для GPS и для TLE определяют разные уравнения для моделирования краткосрочного неэллиптического поведения орбит, поэтому при детальном сравнении результатов в диапазоне времен формы кривых будут просто одинаковыми. быть немного другим.
Что уникально в этом вопросе, так это то, как идентификатор спутника (ну, псевдослучайный идентификатор последовательности шума) входит в картину. Здесь я просто догадываюсь о коде ОП, но я думаю, что это может происходить из-за того, что спутников GPS много, и все они поддерживают очень похожие орбиты. Это, вероятно, означает, что если вы неправильно обрабатываете поворот кадра и просматриваете достаточно данных, вам повезет найти несколько примеров, в которых вы систематически искали не в том месте спутник, который хотели найти, но когда вы посмотрел туда, вы действительно нашли другой спутник того же созвездия почти в том месте, где вы смотрели.
VolkanOzcan
Майкеснайдер
ооо
Майкеснайдер
ооо
перицинтион