1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2025-09-01 18:38:00 +00:00

Skyplot: improve GLONASS satellite positions

This commit is contained in:
Carles Fernandez
2025-05-01 17:02:06 +02:00
parent fedcef31cc
commit 2157cb3814

View File

@@ -192,10 +192,10 @@ def calculate_satellite_position(ephemeris, transmit_time):
if system == 'R': # GLONASS - use position + velocity * time
dt = transmit_time
# Convert km to meters and add velocity component
xk = ephemeris['x'] * 1000 + ephemeris['x_vel'] * 1000 * dt
yk = ephemeris['y'] * 1000 + ephemeris['y_vel'] * 1000 * dt
zk = ephemeris['z'] * 1000 + ephemeris['z_vel'] * 1000 * dt
# Convert km to meters
xk = (ephemeris['x'] + ephemeris['x_vel'] * dt + 0.5 * ephemeris['x_acc'] * dt**2) * 1000
yk = (ephemeris['y'] + ephemeris['y_vel'] * dt + 0.5 * ephemeris['y_acc'] * dt**2) * 1000
zk = (ephemeris['z'] + ephemeris['z_vel'] * dt + 0.5 * ephemeris['z_acc'] * dt**2) * 1000
else:
# Constants
mu = 3.986005e14 # Earth's gravitational constant (m^3/s^2)
@@ -257,17 +257,18 @@ def calculate_satellite_position(ephemeris, transmit_time):
return xk, yk, zk
def calculate_satellite_positions(ephemeris, start_time, end_time, step_min=15):
def calculate_satellite_positions(ephemeris, start_time, end_time, step_min=5):
"""Generate multiple positions over time for a single satellite
between start_time and end_time.
"""
positions = []
current_time = start_time
system = ephemeris['prn'][0]
max_valid_time = 1800 if system == 'R' else 14400
while current_time <= end_time:
transmit_time = (current_time - ephemeris['epoch']).total_seconds()
if abs(transmit_time) <= 14400: # 4 hours
if abs(transmit_time) <= max_valid_time:
x, y, z = calculate_satellite_position(ephemeris, transmit_time)
positions.append((current_time, x, y, z))
@@ -371,7 +372,7 @@ def plot_satellite_tracks(satellites, obs_lat, obs_lon, obs_alt,
el = []
for _, x, y, z in positions:
azimuth, elevation = ecef_to_az_el(x, y, z, obs_lat, obs_lon, obs_alt)
if elevation > 0: # Above horizon
if elevation > 5: # Above horizon
az.append(azimuth)
el.append(elevation)