Files
galileo/tests/unit/test_correlator.py
T

43 lines
1.4 KiB
Python

import numpy as np
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
from galileo_rx.tracking.correlator import CorrelatorBank, SampleStreamCorrelator
from galileo_rx.tracking.nco import CarrierNco, CodeNco
def make_bank(fs: float, phase: float) -> CorrelatorBank:
profile = galileo_e1_profile()
return CorrelatorBank(
profile,
SyntheticCodeProvider(),
"E1B",
1,
CarrierNco(fs, 500.0),
CodeNco(fs, 4092, profile.code_rate_hz, phase),
0.25,
0.75,
)
def test_vector_and_sample_stream_correlators_agree() -> None:
fs = 4.5e6
profile = galileo_e1_profile()
generator = SyntheticSignalGenerator(
profile,
SyntheticCodeProvider(),
fs,
satellites=[SatelliteSignalConfig(1, "E1B", code_delay_chips=3.2, doppler_hz=500.0)],
channel=ChannelModelConfig(add_awgn=False),
)
samples, _ = generator.generate(500)
vector = make_bank(fs, -3.2).correlate(samples)
stream = SampleStreamCorrelator(make_bank(fs, -3.2))
for sample in samples:
stream.accept(sample)
cycle = stream.dump()
for tap in ("very_early", "early", "prompt", "late", "very_late"):
assert abs(getattr(vector, tap) - getattr(cycle, tap)) < 1e-8