43 lines
1.4 KiB
Python
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
|
|
|