В этом тексте я намерен выяснить как быстро меняется частота несущей спутников 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). Построим формулы координат спутника от времени
Предположим что спутник вращается точно по круговой орбите. Тогда phi линейно зависит от t.
T-это период обращения спутника вокруг своей орбиты.
P_orbit - это длина орбиты. По сути - длина окружности.
Орбитальную скорость спутника в условиях круговой орбиты тоже сочнем постоянной по модулю. Она зависит от радиуса орбиты и массы земли.
(6)->(5)
(7)->(2)
Тут M-массе Земли, G-гравитационная постоянная.
Надо выразить расстояние от приёмника до спутника.
Вот этого достаточно чтобы построить график расстояния до спутника от времени.
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.
А теперь на сцену выходит эффект Кристиана Доплера.
Как известно GPS спутники испускают сигнал на несущей с частотой F_L1 = 1575.42 MHz
Мы видим, что максимальной абсолютное смещение частоты от несущей составляет -4884 Hz....4885 Hz. То есть весь диапазон 9771 Hz.
К слову, по доплеровскому смещению спутника можно вычислить его скорость, относительно наблюдателя.
Проинтегрировав скорость по времени можно оценить расстояние (без постоянного смещения). Если выполнить такие измерения в разных местах на Земле, то можно в какой-то степени вычислить орбиту спутника! Определить орбиту спутника какой-то там косной антенной... Нормально так, да?
А теперь численно продифференциируем частоту f_rx(t) приёма по времени t.
Мы видим, что даже в самом худшем случае, когда спутник пролетает над головой, частота несущей меняется медленнее, чем на один герц в секунду.
Как меняется фаза несущей?
Проведём воображаемый эксперимент. Предположим, что спутник не движется, а просто последовательно застывает на время в каждой точке орбиты. Как известно GPS сигнал это электромагнитная волна. Оценим как меняется фазовое смещение несущей на стороне приёмника. Вот это перед вами уравнение бегущей волны (13).
Тут с - скорость света, к- волновое число (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
Комментарии (8)
jorikdima
08.09.2024 20:35+1Вот что точно надо добавить это эффект ошибки опорной частоты. Это, при ширпотребных TCXO, добавит очень прилично к диапазону поиска.
Stratum
08.09.2024 20:35Прекрасный пример теоретического сферического коня в вакууме, когда автор даже не удосужился хотя бы на SDR-приемнике померить сдвиг частот. Не теоретически, а курсором на экране.
CitizenOfDreams
08.09.2024 20:35смещение фазы несущей (слагаемое -kx) меняется от 0 до 360 градусов 4888 раз в секунду! Это как?! Это как интересно GNSS приёмники успевают подстраивать свой цифровой гетеродин на синхронную работа на таких бешеных вращениях фазы?
Какое же оно "бешеное"? Частота несущей 1575MHz, то есть за один цикл фаза сдвигается на 0.001 градуса.
YourgenAP
08.09.2024 20:35+1Как уже написали выше, сферический конь в вакууме, так еще и, походу, на плоской земле. Ладно, упрощения форм земли и орбиты можно допустить. Но дальше начинается что-то странное. Очень серьезное упрощение, что наблюдатель в плоскости спутника (спутник проходит через зенит и надир), то есть вообще не учитываются азимут и высота над горизонтом. Добавляем еще сверху, что расчетам подвергается и участок орбиты за горизонтом, то есть сигнал вообще не доступен.
А так задачка для ЕГЭ по физике в раздел по астрономииBigBeaver
08.09.2024 20:35В целом, любые допущения допустимы, если явно указаны. Другое дело, что нелпохо бы "практическую часть" более содержательно раскрыть, посчитать ошибку и тд.
Dynasaur
Модель построена для наблюдателя, находящегося в плоскости орбиты, если я ничего не пропустил. Но обычно это не так. Кроме того, наблюдатель может находиться в самолёте, тогда разность скоростей может дать дополнительную поправку. Хоть и врядли значительную.
YourgenAP
Модель, действительно, построена для плоскости орбиты спутника, иначе он не пройдет зенит и надир. И оговорено про статического наблюдателя. Поправка, к слову, на скорость, играет роль для самолетов
Dynasaur
Тогда вам ещё нужна и поправка на скорость вращения Земли, т.к. она примерно как скорость реактивного лайнера