Initial Galileo receiver and SignalSim integration
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
import numpy as np
|
||||
|
||||
from galileo_rx.fixed_point.bittrue_pipeline import compare_acquisition, sweep_acquisition_word_lengths
|
||||
from galileo_rx.fixed_point.fixed_acquisition import FixedPcpsAcquisition
|
||||
|
||||
|
||||
def test_fixed_acquisition_peak_agrees_with_float() -> None:
|
||||
rng = np.random.default_rng(4)
|
||||
count = 256
|
||||
fs = 1.024e6
|
||||
replica = np.where(rng.integers(0, 2, count), 1.0, -1.0)
|
||||
delay = 73
|
||||
doppler = 4000.0
|
||||
time_s = np.arange(count) / fs
|
||||
samples = np.roll(replica, delay) * np.exp(2j * np.pi * doppler * time_s)
|
||||
bins = np.asarray([-4000.0, 0.0, 4000.0])
|
||||
reference = np.asarray([
|
||||
np.abs(np.fft.ifft(np.fft.fft(samples * np.exp(-2j * np.pi * frequency * time_s)) * np.conjugate(np.fft.fft(replica)))) ** 2
|
||||
for frequency in bins
|
||||
])
|
||||
fixed = FixedPcpsAcquisition().search(samples, replica, fs, bins)
|
||||
comparison = compare_acquisition(reference / count**2, fixed, threshold=2.5)
|
||||
assert comparison.doppler_bin_agreement
|
||||
assert comparison.code_phase_agreement
|
||||
assert comparison.acquisition_decision_agreement
|
||||
|
||||
|
||||
def test_word_length_sweep_reports_each_width() -> None:
|
||||
rng = np.random.default_rng(7)
|
||||
replica = np.where(rng.integers(0, 2, 64), 1.0, -1.0)
|
||||
reports = sweep_acquisition_word_lengths(np.roll(replica, 9).astype(complex), replica, 1e6, np.asarray([0.0]), [6, 8])
|
||||
assert [item["input_bits"] for item in reports] == [6, 8]
|
||||
assert all(item["code_phase_agreement"] for item in reports)
|
||||
Reference in New Issue
Block a user