GPS Satellite Carrier Doppler Shift

In this text I intend to find out how quickly the carrier frequency of GPS satellites changes as a result of the Doppler effect. I also intend to find out in what ranges one should expect the carrier frequency value to vary for GPS satellites and why.

I will solve the problem in a simplified form, numerically in Python. To solve this problem, ordinary school mathematics and physics are enough.

Statement of the problem

Given:

Parameter

Meaning

Variable designation

Units of measurement

Radius of the Earth

6378000

R_e

m

GPS orbit radius

26600000

R_o

m

Speed ​​of light

299792458

c

m/s

Carrier frequency of the signal

1575420000

F_L1

Hz

Mass of the Earth

5.9722e24

M

kg

Gravitational constant

6.6743015e-11

G

m³ kg⁻¹ s⁻²

For simplicity, let us assume that the observer is located at point A.

drawing to scale

drawing to scale

Find:

#

Size

designation

1

Dependence of the distance to the satellite on time

D
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()

This is the distance graph we got.

As you can see, the distance to the satellite is minimal when its astronomical altitude is 90 degrees. At the zenith.

And this is a graph of the satellite's speed relative to the GNSS receiver. Here you can see that the absolute speed of the satellite is minimal at the zenith (0 m/s) and maximal (~930 m/s) when the satellite approaches the horizon. At the same time, let me remind you that the satellite moves along the orbit at a speed of ~3874 m/s.

Now the Christian Doppler effect comes into play.

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

As is known, GPS satellites emit a signal on a carrier with a frequency of F_L1 = 1575.42 MHz

We see that the maximum absolute frequency shift from the carrier is -4884 Hz….4885 Hz. That is, the entire range is 9771 Hz.

By the way, the Doppler shift of a satellite can be used to calculate its speed relative to the observer.

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

By integrating the speed over time, you can estimate the distance (without a constant offset). If you make such measurements in different places on Earth, you can, to some extent, calculate the orbit of a satellite! Determine the orbit of a satellite with some kind of inert antenna… Pretty normal, right?

Now let us numerically differentiate the reception frequency f_rx

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *