import numpy as np from galileo_rx.acquisition.acquisition_manager import AcquisitionManager from galileo_rx.config import AcquisitionConfig from galileo_rx.signal_profiles import galileo_e1_profile from galileo_rx.signals.code_provider import SyntheticCodeProvider from galileo_rx.signals.signal_generator import ChannelModelConfig, SatelliteSignalConfig, SyntheticSignalGenerator def test_e1c_secondary_wipeoff_for_eight_ms() -> None: fs = 4.092e6 profile = galileo_e1_profile() provider = SyntheticCodeProvider() generator = SyntheticSignalGenerator( profile, provider, fs, satellites=[SatelliteSignalConfig(8, "E1C", code_delay_chips=12.0, doppler_hz=500.0)], channel=ChannelModelConfig(add_awgn=False), ) samples, _ = generator.generate(int(0.008 * fs)) config = AcquisitionConfig( doppler_min_hz=500, doppler_max_hz=500, doppler_step_hz=250, coherent_integration_ms=8, noncoherent_accumulations=1, detection_threshold=1.5, zero_padding_mode="none", secondary_code_mode="wipeoff", parabolic_interpolation=False, ) result, _ = AcquisitionManager(profile, provider, fs, config).acquire_one(samples, "E1C", 8) assert result.detected and abs(result.code_phase_chips - 12.0) < 0.3 def test_e1b_bit_transition_hypothesis() -> None: fs = 4.092e6 profile = galileo_e1_profile() provider = SyntheticCodeProvider() generator = SyntheticSignalGenerator( profile, provider, fs, satellites=[SatelliteSignalConfig(9, "E1B", code_delay_chips=20.0, navigation_bits=[1, -1])], channel=ChannelModelConfig(add_awgn=False), ) samples, _ = generator.generate(int(0.008 * fs)) config = AcquisitionConfig( doppler_min_hz=0, doppler_max_hz=0, doppler_step_hz=250, coherent_integration_ms=8, noncoherent_accumulations=1, detection_threshold=1.5, zero_padding_mode="none", bit_transition_mode="hypothesis", parabolic_interpolation=False, ) result, _ = AcquisitionManager(profile, provider, fs, config).acquire_one(samples, "E1B", 9) assert result.detected and abs(result.code_phase_chips - 20.0) < 0.3