Sistema de tracking satelital en Rust con cálculo preciso de corrección Doppler para enlaces de radio.
use tracking::{doppler_downlink, doppler_uplink};
// Downlink: Calcular frecuencia de recepción en estación terrena
let freq_rx = doppler_downlink(freq_tx_sat, range_rate);
// Uplink: Calcular frecuencia de transmisión desde estación terrena
let freq_tx = doppler_uplink(freq_rx_sat, range_rate);Parámetros:
freq_tx_sat/freq_rx_sat: Frecuencia del satélite en Hzrange_rate: Velocidad radial en m/s (depredict-rs)
Nota: El range_rate se obtiene automáticamente del Observation struct:
let observation = tracker.track(Utc::now())?;
let range_rate = observation.range_rate; // en m/scargo run --example comparar_con_skyfield # Genera datos Rust
python3 src/validaciones/validar_iss.py # Compara con SkyfieldResultado: Diferencia promedio 13.06 Hz (
# 1. Generar datos Rust
cargo run --example track_satelite
# 2. Validar con Skyfield
python3 src/validaciones/validar_satelite.pyResultado (AO-91): Diferencia promedio 9.42 Hz (✅ BUENO)
Los resultados se guardan en:
validacion_doppler/iss/- ISSvalidacion_doppler/satelites/- Otros satélites
sgp4 = "2.3.0" # Propagación orbital
predict-rs = "0.1.1" # Predicción satélites
chrono = "0.4.41" # Manejo de tiempopip install skyfield pandas matplotlibDoppler Shift (Hz) = -f₀ × (Vᵣ / c)
Donde:
f₀ = Frecuencia transmitida (Hz)
Vᵣ = Velocidad radial (m/s)
c = Velocidad de la luz (299,792,458 m/s)
Por defecto: Buenos Aires, Argentina
let observer = PredictObserver {
latitude: -34.6037_f64.to_radians(),
longitude: -58.3816_f64.to_radians(),
altitude: 25.0, // metros
min_elevation: 0.0,
};MIT
- sgp4 - Implementación SGP4 en Rust
- predict-rs - Librería de predicción satelital
- Skyfield - Referencia Python para validación
- CelesTrak - TLEs actualizados
- SatNOGS DB - Base de datos comunitaria de frecuencias satelitales