import numpy as np from galileo_rx.tracking.discriminators import ( dll_noncoherent_power_chips, dll_normalized_envelope_chips, fll_bpsk_phase_difference_hz, fll_phase_difference_hz, pll_four_quadrant_rad, pll_two_quadrant_rad, ) def test_pll_discriminator_sign_and_units() -> None: prompt = np.exp(1j * 0.2) assert abs(pll_four_quadrant_rad(prompt) - 0.2) < 1e-12 assert abs(pll_two_quadrant_rad(prompt) - 0.2) < 1e-12 def test_fll_phase_difference_is_hz() -> None: dt = 0.004 assert abs(fll_phase_difference_hz(1 + 0j, np.exp(2j * np.pi * 10 * dt), dt) - 10.0) < 1e-12 def test_bpsk_fll_rejects_data_sign_transition() -> None: dt = 0.004 prompt = -np.exp(2j * np.pi * 10 * dt) assert abs(fll_bpsk_phase_difference_hz(1 + 0j, prompt, dt) - 10.0) < 1e-12 def test_dll_sign() -> None: assert dll_normalized_envelope_chips(2 + 0j, 1 + 0j, 0.25) > 0 assert dll_noncoherent_power_chips(2 + 0j, 1 + 0j, 0.25) > 0