In [1]:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import copy
from datetime import datetime, timedelta
import glob
import re
%load_ext autoreload
%autoreload 2
import peregrine
import peregrine.acquisition
import peregrine.analysis.samples
import peregrine.analysis.acquisition
import peregrine.include.generateCAcode
import peregrine.samples
import peregrine.tracking
import peregrine.initSettings
import peregrine.ephemeris
import peregrine.gps_time
import peregrine.navigation as nav
import peregrine.gps_constants as gps
import peregrine.sig_gen as sg
import peregrine.parallel_processing as pp
import swiftnav.track
import swiftnav.correlate
import tricks
from tricks import *
fs=16.368e6; fi=fs/4
In [12]:
run='/home/henry/Documents/car1-lot1-20150722-121630.1bit'; num_skip=int(fs*15); num_samples=int(fs*40)
s = peregrine.samples.load_samples(run, file_format='1bit',
num_samples=num_samples, num_skip=num_skip)
In [14]:
prns_search = range(51)
A = peregrine.acquisition.Acquisition(s, fs, fi, (gps.chips_per_code * fs / gps.chip_rate),
n_codes_integrate=4)
acq = A.acquisition(prns=prns_search, show_progress=True, doppler_search=7000, threshold=24)
acqed = [a for a in acq if a.status=='A']
peregrine.analysis.acquisition.snr_bars(acq)
peregrine.analysis.acquisition.acq_table(acq)
In [19]:
prns_to_track = [17, 48, 51]
coherent_len = 1; s2bw = 20
ms_to_track = None #100 * 1000
chans = [a for a in acqed if a.prn+1 in prns_to_track]
track_res={tr.prn: tr for tr in peregrine.tracking.track(s, chans,
ms_to_track=ms_to_track,
sampling_freq=fs,
stage1_loop_filter_params=(
(1, 0.7, 1), # Code loop parameters
(15, 0.7, 1), # Carrier loop parameters
1e3, # Loop frequency
5, # Carrier loop aiding_igain
1540),
stage2_coherent_ms=coherent_len,
stage2_loop_filter_params=(
(1, 0.7, 1), # Code loop parameters
(s2bw, 0.7, 1), # Carrier loop parameters
1e3/coherent_len,# Loop frequency
0, # Carrier loop aiding_igain
1540),
multi=(prns_to_track > 1)}
In [23]:
tr = track_res[48-1]
plot_tr(tr, plots=['P','IQ'])
In [35]:
nav_msg_syms_raw = (np.sign(np.real(tr.P))+1)/2
print nav_msg_syms_raw
plt.plot(nav_msg_syms_raw[1000:][:50],'.')
plt.ylim(-0.5, 1.5)
# These are every ms, i.e. two of these samples make up each 500 Hz SBAS message symbol.
# Alignment is unknown.
Out[35]:
In [ ]: