В этом тексте я намерен выяснить как быстро меняется частота несущей спутников GPS в результате эффекта Доплера. Также намерен выяснить в каких диапазонах стоит ожидать варьирование значения несущей частоты для GPS спутников и почему.

Задачу буду решать в упрощенном виде, численно на Python. Для решения этой задачи достаточно обыкновенной школьной математики и физики.

Постановка задачи

Дано:

Параметр

Значение

Обозначение переменной

Единицы измерения

Радиус Земли

6378000

R_e

м

радиус орбиты GPS

26600000

R_o

м

Скорость света

299792458

c

м/c

Частота несущей сигнала

1575420000

F_L1

Hz

Масса Земли

5.9722e24

M

кг

Гравитационная постоянная

6.6743015e-11

G

м³·кг⁻¹·с⁻²

Для простоты положим, что наблюдатель расположен в точке A.

рисунок в масштабе
рисунок в масштабе

Найти:

#

Величина

обозначение

1

Зависимость расстояния до спутника от времени

D(t)

2

Зависимость высоты спутника от времени

h(t)

3

Зависимость производную расстояния до спутника от времени

D`(t)

4

Частоту принятого сигнала несущей от времени

f(t)

5

Изменение фазы несущей сигнала от времени (-kx)

P(t)

Решение

В виду симметрии задачи для простоты воображаемый неподвижный навигационный приёмник поместив в точку A c декартовыми координатами (0, R_e). Построим формулы координат спутника от времени

\left\{\begin{matrix} x(\phi)_{sv}=R_o cos(\phi)\\  y(\phi)_{sv}=R_o sin(\phi) \end{matrix}\right.   \qquad  \qquad  \qquad  \qquad  \qquad (1)

Предположим что спутник вращается точно по круговой орбите. Тогда phi линейно зависит от t.

\phi(t)=\frac{2\pi t}{T}  \qquad \qquad \qquad (2)

T-это период обращения спутника вокруг своей орбиты.

T=\frac{P_{orbit}}{V_{sv}}  \qquad \qquad \qquad (3)

P_orbit - это длина орбиты. По сути - длина окружности.

\\ P_{orbit}=2\pi R_o  \qquad \qquad \qquad (4)  \\ T=   \frac{2\pi R_o}{V_{sv}} \qquad \qquad \qquad (5)

Орбитальную скорость спутника в условиях круговой орбиты тоже сочнем постоянной по модулю. Она зависит от радиуса орбиты и массы земли.

 V_{sv}=   \sqrt{\frac{GM}{R_o}   }\qquad \qquad \qquad (6)

(6)->(5)

  T=   \frac{2\pi R_o}{\sqrt{\frac{GM}{R_o}   }  } \qquad \qquad \qquad (7)

(7)->(2)

  \phi(t)=\frac{ t \sqrt{\frac{GM}{R_o} }} {R_o}  \qquad \qquad \qquad (8)  \\

Тут M-массе Земли, G-гравитационная постоянная.

  \left\{\begin{matrix}  x_{sv}(t)=R_o cos(         \frac{   t\sqrt{\frac{GM} {R_o} }  }     {R_o}    )  \\   y_{sv}(t)=R_o sin(           \frac{t \sqrt{\frac{GM}{R_o} }  }{R_o} )  \end{matrix}\right.   \qquad  \qquad  \qquad  \qquad  \qquad   (9)

Надо выразить расстояние от приёмника до спутника.

D(t) = abs(x_{sv}(t)+j[y_{sv}(t)-R_e])  \qquad (10)

Вот этого достаточно чтобы построить график расстояния до спутника от времени.

import matplotlib.pyplot as plt
import math
import numpy as np

F_L1_Hz=1575420000.0 #L1 carrier
C_m_s = 299792458.0 # speed of lignt
R_m=6371000;#radius of Erth
Ro_m = (R_m+20180000.0) #radius of orbit
Mass_of_earth_kg= (5.9722 ) * (10**24)
G =  6.6743015*np.power(10.0, -11.0)

Orbit_speed_mps = np.sqrt(G*Mass_of_earth_kg/Ro_m);
OnePRNpath_m = Orbit_speed_mps*0.001

print("OnePRNpath {} m".format(OnePRNpath_m))
#OnePRNpath 3.8746246836846634 m

print("SV Orbit_speed {} m/s".format(Orbit_speed_mps))

Orbit_path_m = 2*math.pi*Ro_m

SV_OrbitPeriod_s = Orbit_path_m/ Orbit_speed_mps
print("SV Orbit_period {} h".format(SV_OrbitPeriod_s/3600.0))

#Coordinates of receiver
Rx_x = 0
Rx_y = R_m

t_s = np.arange(0, SV_OrbitPeriod_s, 1.0)
phi_rad = 2*math.pi*t_s/SV_OrbitPeriod_s

SV_x=Ro_m*np.cos(phi_rad)
SV_y=Ro_m*np.sin(phi_rad)

Dist_vector = (SV_x-Rx_x)+ 1j*(SV_y-Rx_y)

Dist_m = np.abs(Dist_vector)
h_deg=np.rad2deg(np.angle(Dist_vector))

fig, axes = plt.subplots(2)

axes[0].plot(t_s, Dist_m, label="dist[m]")
axes[0].grid()

axes[1].plot(t_s, h_deg, label="h [deg]")
axes[1].grid()

axes[0].legend(loc='best')
axes[1].legend(loc='best')

plt.xlabel('Time,[s]')
plt.xticks(rotation=-90)

plt.show()

Получился вот такой график расстояния.

Как видно, расстояние до спутника минимально, когда его астрономическая высота равна 90 градусов. В зените.

А это график скорости спутника относительно GNSS приёмника. Тут видно, что абсолютная скорость спутника минимальна в зените (0 м/c) и максимальна (~930 м/c), когда спутник приближается к горизонту. При этом, напомню, что по орбите спутник движется со скоростью ~3874 м/c.

А теперь на сцену выходит эффект Кристиана Доплера.

f_{rx} = (1-\frac{V_{sv}}{c})F_{L1}    \qquad (11)

Как известно GPS спутники испускают сигнал на несущей с частотой F_L1 = 1575.42 MHz

Мы видим, что максимальной абсолютное смещение частоты от несущей составляет -4884 Hz....4885 Hz. То есть весь диапазон 9771 Hz.

К слову, по доплеровскому смещению спутника можно вычислить его скорость, относительно наблюдателя.

V_{sv} = c (1-\frac{f_{rx} }{F_{L1}})    \qquad (12)

Проинтегрировав скорость по времени можно оценить расстояние (без постоянного смещения). Если выполнить такие измерения в разных местах на Земле, то можно в какой-то степени вычислить орбиту спутника! Определить орбиту спутника какой-то там косной антенной... Нормально так, да?

А теперь численно продифференциируем частоту f_rx(t) приёма по времени t.

Мы видим, что даже в самом худшем случае, когда спутник пролетает над головой, частота несущей меняется медленнее, чем на один герц в секунду.

Как меняется фаза несущей?

Проведём воображаемый эксперимент. Предположим, что спутник не движется, а просто последовательно застывает на время в каждой точке орбиты. Как известно GPS сигнал это электромагнитная волна. Оценим как меняется фазовое смещение несущей на стороне приёмника. Вот это перед вами уравнение бегущей волны (13).

\\ s_{rx}(x,t)=Asin(2 \pi F_{L1}t-kx+\delta )   \qquad (13) \\ k=\frac{2\pi}{\lambda } \qquad (14) \\ \lambda=\frac{c}{F_{L1}} \qquad (15) \\

Тут с - скорость света, к- волновое число (14). (15) - это длина волны. Дельта - это константа.

Второй с низу график - это -k*x. Самый нижний график - это скорость изменения смещения фазы на стороне приёмника. Как можно заметить, скорость смещения фазы огромная! Когда спутник приближается к горизонту за секунду смещение фазы несущей изменяется на 1,753e6 градусов в секунду.

Иначе говоря, если на стороне приёмника запустить воображаемый идеальный ADC+DFT, то он будет показывать, что смещение фазы несущей (слагаемое -kx) меняется от 0 до 360 градусов 4888 раз в секунду! Это как?! Это как интересно GNSS приёмники успевают подстраивать свой цифровой гетеродин на синхронную работа на таких бешеных вращениях фазы?

Фаза принятого синуса зависит от положения приёмника относительно источника волны. Иначе говоря, смешение фазы принятого синуса зависит от расстояния между передатчиком и приемником: -kx. Вся фаза (2pi*f*t - kx) может меняться в диапазоне от 0 до 360 градусов. Для частоты GNSS L1 1575.42МHz длина волны равна 19.0294 cm. GPS спутник, который движется от неподвижного предмета на Земле на скорости до 930 м/с пролетает эти 0.190294 m за 204us. Как это можно отслеживать фазу от 0 до 360 за 204us?

То есть один цикл происходит за 204us. То за секунду обращение фазы произойдет 4900 раз. Или в случае c движуoегося спутника смещение фазы несущей на стороне приёмника ведёт себя как-то по другому?

Практическая часть

У меня есть гигабайтный файл сырых GNSS I-данных. Это последовательность 1, -1 на частоте дискретизации 16.368 MHz.

Я подал его утилите gnss-sdrgui.exe и утилита нашла

Доплеровское смещение в t=0c

Доплеровское смещение в t=48c

смещение частоты

Скорость смещения частоты

Units:

Hz

Hz

Hz

Hz/s

PRN5

-1229.873

-1194.480

35.32

0.73

Как видно теория соотвтствует эксперименту.

Что можно уточнить в этих вычислениях?

1--Рассчитать ожидаемое доплеровское смещение несущей для случая, когда спутник движется по эллиптической орбите.

2--Учитывать вращение Земли вокруг своей оси.

3--Вывести формулы для оценки смещения фазы в случае с движущимся спутником.

Итоги

Данный простой численный расчет показывает, что на стороне GNSS приёмника частоту несущей надо искать в диапазоне +/- 5kHz от несущей L1. Также частота меняется медленно. Не более чем на один герц в секунду. А вот фаза смещения несущей (-kx) движется очень быстро ~5000 циклов в сек.

Эти теоретические выводы могут быть полезны при отладке SDR алгоритмов внутри GNSS приёмников.

Словарь

Акроним

Расшифровка

SV

Space Vehicle

GPS

Global Positioning System

GNSS

Global Navigation Satellite System

Links

SDR приемник GPS на микроконтроллере

Новая жизнь старого GPS-приёмника

https://latex.codecogs.com/editor.html

Лекция 2 Волны

Комментарии (8)


  1. Dynasaur
    08.09.2024 20:35
    +1

    Модель построена для наблюдателя, находящегося в плоскости орбиты, если я ничего не пропустил. Но обычно это не так. Кроме того, наблюдатель может находиться в самолёте, тогда разность скоростей может дать дополнительную поправку. Хоть и врядли значительную.


    1. YourgenAP
      08.09.2024 20:35

      Модель, действительно, построена для плоскости орбиты спутника, иначе он не пройдет зенит и надир. И оговорено про статического наблюдателя. Поправка, к слову, на скорость, играет роль для самолетов


      1. Dynasaur
        08.09.2024 20:35
        +1

        Тогда вам ещё нужна и поправка на скорость вращения Земли, т.к. она примерно как скорость реактивного лайнера


  1. jorikdima
    08.09.2024 20:35
    +1

    Вот что точно надо добавить это эффект ошибки опорной частоты. Это, при ширпотребных TCXO, добавит очень прилично к диапазону поиска.


  1. Stratum
    08.09.2024 20:35

    Прекрасный пример теоретического сферического коня в вакууме, когда автор даже не удосужился хотя бы на SDR-приемнике померить сдвиг частот. Не теоретически, а курсором на экране.


  1. CitizenOfDreams
    08.09.2024 20:35

    смещение фазы несущей (слагаемое -kx) меняется от 0 до 360 градусов 4888 раз в секунду! Это как?! Это как интересно GNSS приёмники успевают подстраивать свой цифровой гетеродин на синхронную работа на таких бешеных вращениях фазы?

    Какое же оно "бешеное"? Частота несущей 1575MHz, то есть за один цикл фаза сдвигается на 0.001 градуса.


  1. YourgenAP
    08.09.2024 20:35
    +1

    Как уже написали выше, сферический конь в вакууме, так еще и, походу, на плоской земле. Ладно, упрощения форм земли и орбиты можно допустить. Но дальше начинается что-то странное. Очень серьезное упрощение, что наблюдатель в плоскости спутника (спутник проходит через зенит и надир), то есть вообще не учитываются азимут и высота над горизонтом. Добавляем еще сверху, что расчетам подвергается и участок орбиты за горизонтом, то есть сигнал вообще не доступен. А так задачка для ЕГЭ по физике в раздел по астрономии


    1. BigBeaver
      08.09.2024 20:35

      В целом, любые допущения допустимы, если явно указаны. Другое дело, что нелпохо бы "практическую часть" более содержательно раскрыть, посчитать ошибку и тд.