Учет теории относительности в системе GPS

Прокомментировать Просмотры: 1

Слева локация по данным gps‑sdr‑sim, справа — по данным «нерелятивистского» симулятора.

В данном материале мы подробно рассмотрим, каким образом релятивистские эффекты сказываются на точности позиционирования по сигналам 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;

Чтобы подготовить модифицированный симулятор без учета теории относительности, обнуляем эту переменную и выполняем пересборку:

 sed-i "434s|.*|\trelativistic =0;// -4.442807633E-10*eph.ecc*eph.sqrta*sek;|"
gcc gpssim.c -lm -O3 -o gps-sdr-sim-no-rel

Теперь сформируем файлы с синтезированными радиосигналами, имитирующими работу навигационного приемника. Географические координаты задаются ключом ‑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», прописав в строке 10 имя источника как gpssim_norel.iq.

Запускаем обработку в gnss‑sdr:

gnss-sdr --config_file="gps_analyze_true.conf"
gnss-sdr --config_file="gps_analyze_norel.conf"

Географические координаты экспортируются в форматах .kml, .gpx и .geojson с периодичностью 10 Гц (каждые 0,1 секунды). Графическая иллюстрация демонстрирует сопоставление результатов обоих прогонов за полчаса.

Как следует из сравнения, пренебрежение релятивистскими поправками влечет за собой погрешность позиционирования: облако вычисленных точек ощутимо смещается относительно эталонных координат.

Попробуем вникнуть в физическую природу рассматриваемой поправки. В фундаментальном труде Нила Ашби «Relativity in the Global Positioning System» (2003) приведена полная формула относительного изменения частоты:

\begin{equation}\frac{\Delta f}{f} = -\frac{1}{2}\frac{v^2}{c^2} - \frac{GM_E}{rc^2} - \frac{\Phi_0}{c^2}\label{eq:ashby_full}\end{equation}

  • v— орбитальная скорость спутника в инерциальной системе (ECI), м/с;

  • r— геоцентрическое расстояние до спутника, м;

  • GM_E = 3.986004418 \times 10^{14}м^3/с^2 — стандартный гравитационный параметр Земли;

  • \Phi_0 \approx -6.264 \times 10^7Дж/кг — гравитационный потенциал на уровне геоида;

  • c = 299792458м/с — скорость света в вакууме.

Исключив радиус  r через интеграл энергии v^2 = GM_E\left(\frac{2}{r} - \frac{1}{a}\right),{a} (где a — большая полуось), запишем выражение в следующем виде:

\left( \frac{\Delta f}{f} \right) = \left( \frac{\Delta f}{f} \right) _{const}+\left( \frac{\Delta f}{f} \right)_{fluct}

Инвариантная составляющая сдвига:

\left( \frac{\Delta f}{f} \right)_{const} = -\frac{3GM_E}{2ac^2} -\frac{\Phi_0}{c^2} \approx 4.46*10^{-10}

Вариативная составляющая:

\left( \frac{\Delta f}{f} \right)_{fluct} = \frac{GM_E}{ac^2} - \frac{v^2}{c^2}= \frac{v_s^2-v^2}{c^2} v_s= \sqrt{\frac{GM_E}{a}}   — циркулярная скорость на круговой орбите.

Таким образом, величину  \left( \frac{\Delta f}{f} \right)_{fluct} правомерно интерпретировать как доплеровский сдвиг второго порядка

Получить искомый член relativistic = -\frac{2\sqrt{GM_E \cdot a}}{c^{2}} \cdot e \cdot \sin (E) , где:

  • e— эксцентриситет эллиптической орбиты;

  • E— эксцентрическая аномалия, задающая текущее угловое положение спутника.

можно посредством интегрирования \left( \frac{\Delta f}{f} \right)_{fluct} начиная с момента {t_0}, когда аппарат проходит перигей. Очевидно, что данная поправка носит циклический характер с периодом, равным времени обращения спутника, и обладает нулевым математическим ожиданием.

Стабильный член сдвига частоты \left( \frac{\Delta f}{f} \right)_{const} в программе gps‑sdr‑sim не рассчитывается в явном виде, так как подразумевается, что оно изначально нивелировано при настройке бортового генератора. Именно эту постоянную составляющую  \left( \frac{\Delta f}{f} \right)_{const} обычно принято считать виновницей накопления колоссальной погрешности в 10 километров за сутки.


Литература

 

Источник

Поделиться:

Похожие статьи

Поиск по играм, новостям и статьям…

Введите не менее двух символов

Введите не менее двух символов