Skip to content
This repository was archived by the owner on Apr 13, 2021. It is now read-only.

Commit e22b722

Browse files
author
Ryan Kingsbury
committed
Rebase updates mostly related to short_set and warm_start
1 parent 61f67ec commit e22b722

File tree

3 files changed

+28
-23
lines changed

3 files changed

+28
-23
lines changed

peregrine/acquisition.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,16 @@ class Acquisition:
5454
Array of samples to use for acquisition. Can be `None` but in this case
5555
`init_samples` *must* be called with an array of samples before any other
5656
acquisition functions are used.
57-
sampling_freq : float, optional
57+
sampling_freq : float
5858
The sampling frequency of the samples in Hz.
59-
IF : float, optional
59+
IF : float
6060
The receiver intermediate frequency used when capturing the samples.
61-
samples_per_code : float, optional
61+
samples_per_code : float
6262
The number of samples corresponding to one code length.
63-
code_length : int, optional
63+
code_length : int
6464
The number of chips in the chipping code.
65+
n_codes_integrate : int, optional
66+
The number of codes to integrate.
6567
offsets : int, optional
6668
Offsets, in units of code length (1ms), to use when performing long
6769
integrations to avoid clobbering by nav bit edges.

peregrine/short_set.py

+17-17
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ def resolve_ms_integers(obs_pr, pred_pr, prn_ref, disp = True):
4848
print "Resolving millisecond integers:"
4949

5050
for prn, pr in obs_pr.iteritems():
51-
pr_int_est = (pred_pr[prn] - pr) / gps.code_wavelength
51+
pr_int_est = (pred_pr[prn] - pr) / gps.l1ca_code_wavelength
5252
pr_int = round(pr_int_est)
5353
if abs(pr_int - pr_int_est) > 0.15:
5454
logger.warn("Pseudorange integer for PRN %2d is %.4f" % (
5555
prn + 1, pr_int_est) + ", which isn't very close to an integer.")
56-
pr += pr_int * gps.code_wavelength
56+
pr += pr_int * gps.l1ca_code_wavelength
5757
obs_pr[prn] = pr
5858
if disp:
5959
print ("PRN %2d: pred pseudorange = %9.3f km, obs = %9.3f, " + \
@@ -78,9 +78,9 @@ def fill_remainder(n_ms):
7878
return [k for k,v in itertools.groupby(sorted(hs))]
7979

8080
def long_correlation(signal, ca_code, code_phase, doppler, settings, plot=False, coherent = 0, nav_bit_hypoth = None):
81-
from swiftnav.correlate import track_correlate_
81+
from swiftnav.correlate import track_correlate
8282
code_freq_shift = (doppler / gps.l1) * gps.chip_rate
83-
samples_per_chip = settings.samplingFreq / (gps.chip_rate + code_freq_shift)
83+
samples_per_chip = settings.freq_profile['sampling_freq'] / (gps.chip_rate + code_freq_shift)
8484
samples_per_code = samples_per_chip * gps.chips_per_code
8585
numSamplesToSkip = round(code_phase * samples_per_chip)
8686
remCodePhase = (1.0 * numSamplesToSkip / samples_per_chip) - code_phase
@@ -94,12 +94,14 @@ def long_correlation(signal, ca_code, code_phase, doppler, settings, plot=False,
9494
costas_q = 0.0
9595
for loopCnt in range(n_ms):
9696
rawSignal = signal[numSamplesToSkip:]#[:blksize_]
97-
E, P, L, blksize, remCodePhase, remCarrPhase = track_correlate_(
97+
E, P, L, blksize, remCodePhase, remCarrPhase = track_correlate(
9898
rawSignal,
99+
1023, # Chips to correlate
99100
code_freq_shift + gps.chip_rate,
100101
remCodePhase,
101-
doppler + settings.IF,
102-
remCarrPhase, ca_code, settings.samplingFreq)
102+
doppler + settings.freq_profile['GPS_L1_IF'],
103+
remCarrPhase, ca_code, settings.freq_profile['sampling_freq'],
104+
gps.L1CA)
103105

104106
I_E = E.real
105107
Q_E = E.imag
@@ -149,12 +151,10 @@ def refine_ob(signal, acq_result, settings, print_results = True, return_sweeps
149151
# TODO: Fit code phase results for better resolution
150152
from peregrine.include.generateCAcode import caCodes
151153
from scipy import optimize as opt
152-
samples_per_chip = settings.samplingFreq / gps.chip_rate
154+
samples_per_chip = settings.freq_profile['sampling_freq'] / gps.chip_rate
153155
samples_per_code = samples_per_chip * gps.chips_per_code
154156
# Get a vector with the C/A code sampled 1x/chip
155157
ca_code = caCodes[acq_result.prn]
156-
# Add wrapping to either end to be able to do early/late
157-
ca_code = np.concatenate(([ca_code[1022]],ca_code,[ca_code[0]]))
158158

159159
dopp_offset_search = 100 # Hz away from acquisition
160160
code_offsets = np.arange(-1,1, 1.0 / 16 / 2)
@@ -296,14 +296,14 @@ def refine_obs(signal, acq_results, settings,
296296

297297
return obs_cp, obs_dopp
298298

299-
def predict_observables(prior_traj, prior_datetime, prns, ephem, window):
299+
def predict_observables(prior_traj, prior_datetime, prns, ephem, window, settings):
300300
from datetime import timedelta
301301
from numpy.linalg import norm
302302
from numpy import dot
303303
"""Given a list of PRNs, a set of ephemerides, a nominal capture time (datetime) and a
304304
and a time window (seconds), compute the ranges and dopplers for
305305
each satellite at 1ms shifts."""
306-
timeres = 50 * gps.code_period # Might be important to keep this an integer number of code periods
306+
timeres = 50 * settings.code_period # Might be important to keep this an integer number of code periods
307307
t0 = prior_datetime - timedelta(seconds=window / 2.0)
308308
ranges = {}
309309
dopplers = {}
@@ -360,11 +360,11 @@ def minimize_doppler_error(obs_dopp, times, pred_dopp, plot = False):
360360
def plot_expected_vs_measured(acqed_prns, prn_ref,
361361
obs_pr, obs_dopp,
362362
prior_traj, t_better,
363-
ephem):
363+
ephem, settings):
364364
import matplotlib.pyplot as plt
365365

366366
# Compute predicted observables around this new estimate of capture time
367-
pred_ranges, pred_dopplers, times = predict_observables(prior_traj, t_better, acqed_prns, ephem, 20)
367+
pred_ranges, pred_dopplers, times = predict_observables(prior_traj, t_better, acqed_prns, ephem, 20, settings)
368368
pred_pr = pseudoranges_from_ranges(pred_ranges, prn_ref)
369369

370370
ax = plt.figure(figsize=(12,6)).gca()
@@ -660,7 +660,7 @@ def postprocess_short_samples(signal, prior_trajectory, t_prior, settings,
660660
# Improve the time part of the prior estimate by minimizing doppler residuals
661661
pred_ranges, pred_dopplers, times = predict_observables(prior_traj, t_prior,
662662
acqed_prns, ephem,
663-
30)
663+
30, settings)
664664
i, t_better = minimize_doppler_error(obs_dopp, times, pred_dopplers,
665665
plot = plot)
666666

@@ -671,7 +671,7 @@ def postprocess_short_samples(signal, prior_trajectory, t_prior, settings,
671671
print "By minimizing doppler residuals, adjusted the prior time and position by %.6s seconds, %.3f km" % (
672672
delta_t, delta_r/ 1e3)
673673
pred_ranges, pred_dopplers, times = predict_observables(
674-
prior_traj, t_better, acqed_prns, ephem, 1e-9)
674+
prior_traj, t_better, acqed_prns, ephem, 1e-9, settings)
675675

676676
pred_pr_t_better = {prn: pred_ranges[prn][0] for prn in acqed_prns}
677677

@@ -681,7 +681,7 @@ def postprocess_short_samples(signal, prior_trajectory, t_prior, settings,
681681

682682
if plot:
683683
plot_expected_vs_measured(acqed_prns, prn_ref, obs_pr, obs_dopp,
684-
prior_traj, t_better, ephem)
684+
prior_traj, t_better, ephem, settings)
685685

686686
# Perform PVT navigation solution
687687
r_sol, t_sol, los, tot, residuals = pt_solve(r_better, t_better, obs_pr,

peregrine/warm_start.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,12 @@ def warm_start(signal, t_prior, r_prior, v_prior, ephem, settings,
9191

9292
samplingFreq = settings.freq_profile['sampling_freq']
9393

94-
a = acquisition.Acquisition(signal, samplingFreq,
94+
a = acquisition.Acquisition(gps.L1CA,
95+
signal,
96+
samplingFreq,
9597
settings.freq_profile['GPS_L1_IF'],
9698
samplingFreq * settings.code_period,
99+
settings.code_length,
97100
n_codes_integrate=n_codes_integrate,
98101
wisdom_file = wiz_file)
99102
# Attempt to acquire both the sats we predict are visible
@@ -102,7 +105,7 @@ def warm_start(signal, t_prior, r_prior, v_prior, ephem, settings,
102105
prns = pred + notup,
103106
doppler_priors = pred_dopp + [0 for p in notup],
104107
doppler_search = settings.rxFreqTol * gps.l1,
105-
show_progress = True, multi = True)
108+
progress_bar_output='stderr', multi = True)
106109
nacq_results = acq_results[len(pred):]
107110
acq_results = acq_results[:len(pred)]
108111

0 commit comments

Comments
 (0)