Релятивистские поправки в GPS

В этой статье разберем, как релятивистские поправки влияют на точность определения координат по GPS‑спутникам. Для наших тестов будем использовать симулятор сигнала спутников gps‑sdr‑sim и утилиту gnss‑sdr для геолокации.
Устанавливаем утилиту gnss‑sdr:
sudo apt install gnss-sdrСкачиваем и собираем gps‑sdr‑sim:
git clone https://github.com/osqzss/gps-sdr-sim.git
cd gps-sdr-sim
gcc gpssim.c -lm -O3 -o gps-sdr-simВ исходном коде файла gpssim.h — никаких релятивистских поправок нет. Теперь посмотрим файл gpssim.c, здесь находим поправку (строка 434):
relativistic = -4.442807633E-10*eph.ecc*eph.sqrta*sek;далее эта поправка добавляется к часам спутника:
clk[0] = eph.af0 + tk*(eph.af1 + tk*eph.af2) + relativistic - eph.tgd;Чтобы собрать «нерелятивистский» симулятор, достаточно обнулить эту поправку и пересобрать gps‑sdr‑sim:
sed-i "434s|.*|\trelativistic =0;// -4.442807633E-10*eph.ecc*eph.sqrta*sek;|"
gcc gpssim.c -lm -O3 -o gps-sdr-sim-no-relТеперь можно записать файлы с моделью сигналов, которые бы принял GPS‑ приемник. Координаты приемника задаются через параметр ‑l. Для запуска симулятора нужен файл эфимерид (он содержит параметры орбиты и поправки часов спутников). Файл эфимерид можно скачать с официального сайта НАСА, или использовать файл brdc0010.22n из архива gps‑sdr‑sim:
./gps-sdr-sim -e brdc2580.26n -l 56.46958800001232,84.94677100122212 -o gpssim_true.iq -s 2500000 -d 1800 -b 8
./gps-sdr-sim-no-rel -e brdc2580.26n -l 56.46958800001232,84.94677100122212 -o gpssim_norel.iq -s 2500000 -d 1800 -b 8Для работы с gnss‑sdr будем использовать конфигурационные файлы. Создаем файл «gps_analyze_true.conf» и копируем туда настройки:
[GNSS-SDR]
;######### GLOBAL OPTIONS ##################
GNSS-SDR.internal_fs_sps=2500000
;######### SIGNAL_SOURCE CONFIG ############
SignalSource.implementation=File_Signal_Source
# Укажите путь к вашему .bin файлу
SignalSource.filename=gpssim_true.iq
# Тип данных ishort означает знаковые 8-битные целые (int8)
SignalSource.item_type=ibyte
# Укажите реальную частоту дискретизации вашего файла
SignalSource.sampling_frequency=2500000
SignalSource.samples=0
;######### SIGNAL_CONDITIONER CONFIG ############
SignalConditioner.implementation=Signal_Conditioner
# Преобразование чередующихся int8 (I и Q) в комплексный формат float
DataTypeAdapter.implementation=Ibyte_To_Complex
InputFilter.implementation=Pass_Through
InputFilter.item_type=gr_complex
;######### CHANNELS GLOBAL CONFIG ############
Channels_1C.count=8
Channels.in_acquisition=8
Channel.signal=1C
;######### ACQUISITION GLOBAL CONFIG ############
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
Acquisition_1C.item_type=gr_complex
Acquisition_1C.pfa=0.01
# Диапазон поиска Доплера увеличен до +-10000 Гц на случай сильного сдвига частоты
Acquisition_1C.doppler_max=10000
Acquisition_1C.doppler_step=250
Acquisition_1C.blocking=true
;######### TRACKING GLOBAL CONFIG ############
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
Tracking_1C.item_type=gr_complex
# Полоса PLL (фаза) — 40 Гц, полоса DLL (код) — 4 Гц для стабильного удержания
Tracking_1C.pll_bw_hz=40.0
Tracking_1C.dll_bw_hz=4.0
Tracking_1C.dump=false
# Путь, куда будут сохраняться файлы (папка должна существовать)
;######### TELEMETRY DECODER GPS CONFIG ############
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
;######### OBSERVABLES CONFIG ############
Observables.implementation=Hybrid_Observables
;######### PVT CONFIG ############
PVT.enable_monitor=true
PVT.monitor_client_addresses=127.0.0.1
PVT.monitor_udp_port=1111
PVT.implementation=RTKLIB_PVT
PVT.positioning_mode=Single
PVT.output_rate_ms=100
PVT.display_rate_ms=500
PVT.iono_model=Broadcast
PVT.trop_model=Saastamoinen
PVT.flag_rtcm_server=true
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
PVT.rtcm_tcp_port=2101
PVT.rtcm_MT1019_rate_ms=5000
PVT.rtcm_MT1077_rate_ms=1000
Monitor.enable_monitor=true
Monitor.decimation_factor=1
Monitor.client_addresses=127.0.0.1
Monitor.udp_port=1112
GNSS-SDR.telecommand_enabled=true
GNSS-SDR.telecommand_tcp_port=3333Создаем файл «gps_analyze_norel.conf», копируем те же настройки, изменив имя файла на gpssim_norel.iq(10 строка).
Запускаем утилиту gnss‑sdr:
gnss-sdr --config_file='gps_analyze_true.conf'
gnss-sdr --config_file='gps_analyze_norel.conf'Координаты записываются в форматах.kml,.gpx и.geojson с частотой обновления 10 Гц (каждые 0,1 с). На рисунке представлены результаты сравнения двух симуляторов за период 30 минут.
Как видно из сравнения, отсутствие релятивистских поправок в симуляторе приводит к ошибке геолокации: облако точек смещается на несколько метров относительно эталонной позиции.
Теперь попробуем разобраться с физическим смыслом релятивистской поправки. В работе Нила Ашби «Relativity in the Global Positioning System» (2003) приводится полное выражение для относительного сдвига частоты:
— скорость спутника в инерциальной системе отсчета (ECI), м/с;
— расстояние от центра Земли до спутника, м;
м
/с
— гравитационный параметр Земли;
Дж/кг — гравитационный потенциал на геоиде;
м/с — скорость света.
Исключая расстояние через уравнение живой силы
— большая полуось орбиты, преобразуем исходное выражение:
Постоянная часть сдвига:
Переменная:
— средняя скорость спутника.
Таким образом, можно рассматривать как эффект Доплера второго порядка
Получить поправку relativistic =, где
— эксцентриситет орбиты;
— эксцентрическая аномалия,угол, который определяет текущее положение спутника на орбите.
можно путем интегрированияс момента времени
, когда спутник находится в
апогее орбиты. Как видно из определения, поправка relativistic периодична (период соответствует обороту спутника вокруг орбиты) и имеет нулевое среднее.
Постоянная часть сдвига в симуляторе gps‑sdr‑sim не учитывается, так как
считается, что она уже скомпенсирована настройкой часов спутника. Именно
принято «обвинять» в накоплении ошибок по 10 км в день.
Литература
Ashby, N. (2003). Relativity in the Global Positioning System. Living Reviews in Relativity, 6(1), 1. https://doi.org/10.12942/lrr-2003-1
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.