210 likes | 324 Vues
ECE 6276 Final Project. Correlation based GPS System. Team 4: Alex Cunningham Phillip Marks Andrew D. Falendysz Meghashyam Adoni. Goals. Our goal is to use a correlator bank to determine which GPS satellite(s) are available at a given location.
E N D
ECE 6276 Final Project Correlation based GPS System Team 4: Alex Cunningham Phillip MarksAndrew D. Falendysz Meghashyam Adoni
Goals • Our goal is to use a correlator bank to determine which GPS satellite(s) are available at a given location. • To design a high-sensitivity, fast acquisition system to provide accurate results for weak GPS signals. The extra processing power can be used to integrate weak signals to the point where they can be used to provide a position or timing solution.1
System Overview • The GPS system utilizes CDMA with each satellite encoding its data using a unique 1023-’chip’ PRN code called C/A code. • On the receiver end a correlator bank computes the correlation of the received signal with possible PRN codes. • The PRN codes corresponding to the correlators whose output is above a threshold for any given lag are then used to decode the data.2 • The correlation algorithm used in our project is based on the FFT.
System Block Diagram Read New Code Demodulated Input Shift Register N Shift Register Code Correlator Y > Threshold PRN Code Chip Clk Detect Header
Components to Optimize • The primary component for this system is the correlator bank that acquires a lock on particular satellite signals. • For the purposes of this system, returning the correct delay for the position of a C/A frame will be sufficient proof of a lock. • Other parts of the system will be simulated with Matlab/Octave and used as test vectors.
General C Implementation int main(intargc, char ** argv){ // Load Data // prep buffers // move CA code into an int buffer float ca_code[CA_CODE_SIZE]; for (inti = 0; i < CA_CODE_SIZE; i++) {ca_code[i] = (float) cacode.get(); } // clear shift register - possibly optional step float shift_reg[CA_CODE_SIZE]; // load encoded data into a buffer that can be circled float* encoded_msg = new float[DATA_CYCLE_SIZE]; for (inti = 0; i < DATA_CYCLE_SIZE; i++) {encoded_msg[i] = (float) encoded.get(); } // a pointer to use with the circular buffer float * encoded_msg_ptr = encoded_msg +INPUT_OFFSET; // while waiting on a lockcout << "Looking for lock..." << endl;boolhaslock = false; while (!haslock) { // load a new piece of data //cout << "Load more data" << endl; float new_data = (float) *encoded_msg_ptr; // perform circular buffering on dataset if (encoded_msg_ptr = encoded_msg+CA_CODE_SIZE-1)encoded_msg_ptr = encoded_msg; elseencoded_msg_ptr++; //cout << "Using shift register" << endl; // data will cycle the encoded message continuously // shift existing data in shift_reg for (inti = CA_CODE_SIZE-1; i> 0; i--) {shift_reg[i] = shift_reg[i-1]; } // shift into the current registershift_reg[0] = new_data; // perform correlation //cout << "Performing correlation" << endl; float power;cout << "correlating..." << endl;correlator(shift_reg, ca_code, &power, CA_CODE_SIZE); // if threshold is high enough - break out of loop to acquire lock //cout << "checking for lock" << endl;cout << " correlation: " << power << endl; if (power > 0.5)haslock = true; }cout << "Lock found!" << endl; delete[] encoded_msg;cout << "Freeded Encode" << endl; return 0;}
C FFTW Implementation of Correlator void correlator(float *d, float *g, float *r, unsigned long N){fftw_planpG, pD, pS; double complex *D, *G, *S; D = (double complex*) fftw_malloc(sizeof(double complex) * N); G = (double complex*) fftw_malloc(sizeof(double complex) * N); S = (double complex*) fftw_malloc(sizeof(double complex) * N); //DEBUG: fill in S with dummy datapD = fftw_plan_dft_r2c_1d(N, (double*) d, D, FFTW_ESTIMATE);pG = fftw_plan_dft_r2c_1d(N, (double*) g, G, FFTW_ESTIMATE);pS = fftw_plan_dft_c2r_1d(N/2+1, S, (double*) r, FFTW_ESTIMATE|FFTW_PRESERVE_INPUT);fftw_execute(pG);fftw_execute(pD); double complex *tempDPtr, *tempSPtr, *tempGPtr;tempDPtr = D;tempGPtr = G;tempSPtr = S; for(inti = 0; i<= (N/2)+1; i++) { *D = conj(*D); *S = (*D) * (*G); D++; G++; S++; } S = tempSPtr; D = tempDPtr; G = tempGPtr; fftw_execute(pS);fftw_destroy_plan(pD);fftw_destroy_plan(pG);fftw_destroy_plan(pS);fftw_cleanup();fftw_free(D);fftw_free(G);fftw_free(S); tempDPtr = NULL;tempGPtr = NULL;tempSPtr = NULL;}
C Simulation Results • Octave implementation • Simulates with correct results • C Implementation • Compiles and runs • Can determine when satellite signal locks on • Still needs more testing to handle small array overflow errors
Test Vectors • Generated using Matlab/Octave scripts: • Synthesized GPS frame data • C/A codes for individual satellites • Frame data encoded with C/A codes • Modulate individual signals • Combine and add noise to signals • Demodulate combined signal • Offsets for lag calculations can be determined from test vectors
Data Overview 2 • First, an overview of the data coming from the satellites: • GPS Message • Consists of a NAV message modulated with a much higher-frequency code. • C/A Code • Stands for Coarse/Acquisition Code • 1023-’chip’ code at 1.023 MHz • NAV Message • Contains Navigation, Ephemeris, and Almanac information • 1500 bit message at 50 Hz • 300 bits per each of 5 sub-frames
Catapult C Optimizations • Primary optimization plans • Improve the speed of the correlator • Use multiple correlators/partially unrolled loops to parallelize the loop that attempts to lock on the signal • Strategy • Replace correlator with algorithm based on Numerical Recipes in C • Use existing CatapultC-optimized FFT code to improve the performance • Use bit-level algorithms rather than expanding the data from bits to bytes
Catapult C Expected Results • Use a parallel bank of correlators to improve acquisition time • Highly optimized correlation/FFT calculations to improve performance
Risks and Project Management • The simulated sections of the system allow for areas where the system can be simplified in the event of difficulties • Using only a single satellite • Little to no noise added in analog channel
Prior Art • Many patents available for correlator-based recievers and GPS systems • Snaptrack High Sensitivity Fast Acquisition GPS • GE Parallel Correlator for GPS receiver • Method and apparatus for computing signal correlation (GPS) • Correlator implementations • Multiplexed digital correlator
Expected Results • Simulated input and analog channel • HDL optimized correlator bank for acquiring signals from a simulated data stream
References • http://en.wikipedia.org/wiki/High_Sensitivity_GPS • Global Positioning System Standard Positioning Service Signal Specification,1995http://www.navcen.uscg.gov/pubs/gps/sigspec/gpssps1.pdf • Peter H. Dana, 1992 http://www.colorado.edu/geography/gcraft/notes/gps/gps.html • Discrete Fourier Transform http://en.wikipedia.org/wiki/Discrete_Fourier_transform#Circular_convolution_theorem_and_cross-correlation_theorem • Fast Acquisition, high sensitivity GPS receiver, Inventor: Norman F. Krasner, Assignee: Snaptrack, No. 6289041, Issued: Sep 11, 2001 • Parallel correlator for global positioning system receiver, Inventors: Glen W. Brooksby, Gerald J. Michon, Jerome J. Tiemann, Assignee: General Electric Company, No. 5579014, Issued: Nov 26, 1996 • Fast Acquisition, high sensitivity GPS receiver, Inventor: Norman F. Krasner, Assignee: Snaptrack, No. 6289041, Issued: Sep 11, 2001 • Method and apparatus for computing signal correlation, Inventor: Charles Abraham et al, Assignee: Global Locate, Inc, No. 6606346, Issued: Aug 12, 2003 • Multiplexed digital correlator, Inventor: Lawrence M. Leibowitz, Assignee: The United States of America as represented by the Secretary of the Navy, No. 4660164, Issued: Apr 21, 1987
Octave Script cacode(n) C/A Code n X Test Vector n NAV Msg n Random Phases Test Vector 1 Correlator Code Test Vector 2 NAV Msg n Test Vector 3