import numpy as np from galileo_rx.acquisition.acquisition_manager import AcquisitionManager from galileo_rx.config import AcquisitionConfig, TrackingConfig from galileo_rx.signal_profiles import galileo_e1_profile from galileo_rx.signals.code_provider import SyntheticCodeProvider from galileo_rx.tracking.tracking_channel import TrackingChannel from galileo_rx.types import AcquisitionResult, TrackingState def test_noise_only_does_not_pass_peak_ratio_threshold() -> None: fs = 4.092e6 rng = np.random.default_rng(345) samples = rng.standard_normal(int(0.008 * fs)) + 1j * rng.standard_normal(int(0.008 * fs)) config = AcquisitionConfig( doppler_min_hz=-500, doppler_max_hz=500, doppler_step_hz=250, noncoherent_accumulations=2, detection_threshold=2.5, zero_padding_mode="none", ) result, _ = AcquisitionManager(galileo_e1_profile(), SyntheticCodeProvider(), fs, config).acquire_one(samples, "E1C", 1) assert not result.detected def test_consecutive_failures_request_reacquisition() -> None: fs = 4.092e6 acquisition = AcquisitionResult( True, 1, "E1B", 0.0, 0.0, 0.0, 0.0, 1.0, 0.1, 10.0, None, 4.0, 1 ) config = TrackingConfig(use_fll_assist=False, loss_of_lock_epochs=3) channel = TrackingChannel(galileo_e1_profile(), SyntheticCodeProvider(), fs, config, acquisition) zero_epoch = np.zeros(channel.integration_samples, dtype=np.complex128) measurements = [channel.process_epoch(zero_epoch) for _ in range(3)] assert measurements[-1].reacquisition_requested assert measurements[-1].state == TrackingState.REACQUISITION