Transcript Implementation of a Software- based GPS Receiver Anthony J. Corbin
Implementation of a Software based GPS Receiver
Anthony J. Corbin Dr. In Soo Ahn Friday, April 24, 2020
Overview
Progress Flowcharts Acquisition Tracking Position Calculation Software Organization Changes to Project Objectives Results DLL/PLL Tracking Position Updated Schedule
Progress
MATLAB GPS software [1] has been ported to C++ This includes: Coordinate conversion Tracking loop Acquisition algorithms DSP design approach was abandoned due to technical issues which will be discussed later.
C++ code can accurately find a position from stored sample data.
Coarse Acquisition
Coarse acquisition searches around the intermediate frequency in the range +/- 10 KHz with a step of 500 Hz Frequency Domain Correlation L1 C/A Code Generator FFT
conj
+/- 10 KHz 500 Hz Step FFT IFFT SNR > Threshold?
No Yes Acquired Satellite
Fine Acquisition
Uses the frequency estimate from Coarse Acquisition to obtain a better estimate The overall functionality is very similar to Coarse Acquisition FFT 10 L1 C/A Code Samples Length 2^(n+1) FFT Size L1 C/A Code Generator Zero Append FFT
conj
IFFT MAX Index Sampling Frequency/FFT Size Carrier Estimate
Tracking
Carrier Frequency I Q Phase Remainder Signal P Chipping Length Generator L1 Code Remainder E Q_P Q_E I_P Carrier Discriminator I_E Code Discriminator I_L L Q_L
Delay-Locked Loop [1]
Position Calculation
Ephemeris Data Pseudoranges Satellite Positions
X RCV
1 .
X SAT
1 .
.
Y RCV
1
Y SAT
1 .
.
.
Z RCV
1
Z SAT
.
1 .
.
1 .
.
.
X
.
.
c
t
1
RCV
SAT
1 .
.
.
c
t
1 Solve using QR Factorization Update Receiver Position
Functional Software Diagram
010101
.
.
.
.
Timestamp Size
Sample Samples
Acquisition
.
.
.
.
Acquire Track
Satellite Satellites
Pseudoranging Ephemeris Data Collection
Acquired Satellites
Timestamp Position
Position
Position Vectorization
.
.
.
.
Positioning
Changes to Project Objectives
Finding the satellite positions requires an accurate time…requiring collection of at least subframes 1-3 of the ephemeris data The equation below shows the number of multiplications per second required to track one satellite. This does not include C/A code generation, carrier demodulation, or the overhead involved with sampling.
The DSP considered is clocked at 225 MHz which is simply not fast enough.
16368
Samples
* 2
arms
* 3
alignments
98 .
2
Million ms Multiplies
/
s
USB GPS Dongle
USB 2.0 Interface Simple software interface
C/A Code Tracking
The graphs to the right show the code error output from the delay locked loop.
The parameters have been selected in such a way that the loop converges very quickly.
-25 -30 -35 -40 -45 -10 -15 -20 5 0 0 -5 200 400 600 800 1000 1200 1400 1600 1800 2000 - 30 - 35 - 40 - 45 - 10 - 15 - 20 - 25 5 0 0 - 5 20 40 60 80 100 120 140 160 180 200
Carrier Tracking
Carrier error is shown on the right with respect.
In this example, the frequency of the carrier appears to be drifting further below the intermediate frequency.
This is an illustration of the Doppler Effect.
-30 -40 -50 -60 30 20 10 0 0 -10 -20 5000 10000 15000 20000 25000 30000
Navigation Data
The figures to the right show resolved 50 Hz navigation data.
The top graph shows 32s of data, while the bottom graph shows 3s.
6000 4000 2000 0 0 -2000 -4000 -6000 6000 4000 2000 0 0 -2000 -4000 -6000 5000 10000 15000 20000 25000 30000 500 1000 1500 2000 2500 3000
Position Results
51.81 m
Position Results
104.4 m
Current Display
The display currently uses a console window.
A GUI could be written in any language.
Speed
Currently the C++ code requires under a minute (per satellite) to read a full 36 s of satellite data.
Compare this with the Matlab code which takes 6 minutes per satellite.
7 6 5 4 1 0 3 2 C++ Matlab Tracking
Intel Threading Building Blocks
Intel’s TBB is a library for creating threaded programs Platform independent Relatively easy to use
Real-time Functionality
Taking a direct approach to implementing real-time functionality appears to be extremely difficult (possibly impossible) given current hardware limitations.
However, a possibility exists, which may feasibly yield results.
Real-time Functionality
Estimate Position Estimate new satellite position given the difference in the time stamps.
Estimate pseudoranges.
Collect 36s of data with a timestamp.
Extract ephemeris data and calculate initial position.
Collect a small data sample with a timestamp.
Use the current carrier estimate to perform a frequency domain correlation with 1 ms of the small sample Using the entire small sample estimate the current carrier frequency and save it.
Updated Schedule
Week 1/23-1/26 GPS Acquisition Software 1/27-2/2 Activity Develop C++ Tracking Algorithm 2/3-2/9 2/24-3/1 Develop C++ Tracking Algorithm 2/10-2/16 Develop software to calculate position 2/17-2/23 Documentation and software design Redevelop software with updated design using lessons learned from initial development 3/2-3/8 Continue redevelopment 3/9-3/15 3/30-4/5 Debug and document redesign 3/16-3/22 Continue debugging and documenting 3/23-3/29 Design display Develop and test display 4/6-4/12 4/27-5/3 Develop and test display 4/13-4/19 System debugging and documentation 4/20-4/26 System debugging and documentation System debugging and documentation
References
[1] Kai Borre, Dennis M. Akos, Nicolaj Bertelsen, Peter Rinder, and Soren Holdt Jensent, Software-Defined GPS
and Galileo Receiver : A Single-
Frequency Approach. Birkhauser: Boston, 2007, pp. 29, 83, 105.
[2] SiGe, SE4110L-EK1 Evaluation Board User Guide.
[3] SiGe, SE4110L Datasheet.