Determination of Galileo GIOVE-A L1 BOC(1,1) PRN Codes


Power Spectrum at RF Front-End Output, with and without GPS & SBAS signals

Codeless Acquisition Statistic Mesh Plot Showing Main Peak at Correct Carrier Doppler Shift & BOC Phase

Project Participants: Mark L. Psiaki, Todd E. Humphreys, Shan Mohiuddin, Steven P. Powell, Paul M. Kintner, Jr., and Alex P. Cerruti

Codeless acquisition techniques and statistical analyses have been used to find and decode the L1 BOC(1,1) signal of the first Galileo prototype satellite, GIOVE-A. ASCII data files that contain the resulting PRN codes for GIOVE-A are located at links given near the end of this page.

The off-line analysis that produced these results used GIOVE-A L1 signals that were recorded using a roof-mounted hemispherical patch antenna and a digital storage receiver. Data were recorded on 2 March 2006 and on 8 March 2006. The recorded signals were analyzed off-line in Matlab. The analysis first acquired, tracked, and removed all GPS and SBAS C/A signals from the data. This step was needed because GPS and SBAS signals can interfere with codeless analysis of Galileo L1 BOC(1,1) signals. The GIOVE-A L1 signal was acquired using codeless techniques with aiding from NORAD ephemerides. This aiding narrowed the carrier Doppler shift search range and yielded a good approximation of the rate-of-change of the Doppler shift. The carrier phase, carrier Doppler shift, and BOC phase determined in the acquisition were used to remove the carrier and BOC signals, and 1.023 MHz in-phase accumulations were computed.

The PRN code determination procedure worked exclusively with the 1.023 MHz in-phase accumulations. A differential analysis was used to get a rough estimate of the transition times for navigation data bits on the data channel (the L1-B channel) and for secondary code chips on the pilot channel (the L1-C channel). These times were used in order to align the accumulation intervals of 250 Hz signal correlations to approximately match L1-B PRN code periods, and a discrimination procedure was applied to these accumulations in order to determine the transmitted L1-B data bits and the L1-C secondary code chips. This procedure first determined these bits and chips as "soft" real values and then as hard +1/-1 digital values. These bit and chip values were then used in an analysis of the 1.023 MHz in-phase accumulations in order to determine the L1-B PRN code chips and the L1-C primary PRN code chips.

The analysis of the PRN codes initially produced anomalous results because it assumed that the L1-C primary code was 4 msec in length and that the L1-C secondary code repeated every 100 msec. These assumptions were consistent with publicly available Galileo documentation, but they were inconsistent with the actual received signal structure. The true repetition period of the secondary code was determined to be 200 msec via autocorrelation analysis of the 1.023 MHz in-phase accumulations.

The first completely consistent means of reconciling the observed anomalies was to hypothesize that the L1-C secondary code length was 50 chips and that the secondary code had three levels, +1, 0, and -1, with the zero values interspersed every other chip between the +1/-1 values. This hypothesis maintained the 250 Hz nominal L1-C secondary code chipping rate that was given in the available documentation, and it yielded a 200 msec secondary code period.

A better hypothesis was determined after the initial internet posting of PRN code determination results. The initial posting yielded feedback from a colleague that pointed to the recently published article: Montenbruck, O., et al., "GIOVE-A Initial Signal Analysis," GPS Solutions, March 2006. This article reports results that are based on data from a high-gain 30-m dish antenna. It demonstrates that the L1-C primary code is 8184 chips long, i.e., it has a repetition period of 8 msec. Given this knowledge, the project was able to quickly re-analyze the L1-C primary and secondary PRN codes, and it was able to determine the second 4092-chips of the primary code -- the initial 4092 chips are the same as had been originally posted. This new analysis affirmed that the L1-C secondary code is 25 chips long and that it takes on only +1/-1 values.

In hindsight, it should have occurred to the project team that the L1-C primary code might be two times longer than stated in the original Galileo documentation. The alternative possibility, i.e., the possibility of using zero-valued secondary code chips, has negative ramifications if the GIOVE-A transmission system needs to maintain a constant power on the L1 signal.

The PRN codes given below are the CL1-B, CL1-C primary, and CL1-C secondary codes that are described in publicly available Galileo documentation. They can be used to acquire and track the GIOVE-A L1 BOC(1,1) signal using standard techniques that are compatible with the signal characteristics presented in that documentation. The CL1-B PRN code is 4092 chips in length and has a nominal repetition period of 4 msec. The CL1-C primary PRN code is 8184 chips in length and has a nominal repetition period of 8 msec. Every period of the CL1-C primary PRN code is aligned in time with two periods of the CL1-B PRN code. GIOVE-A transmits one L1-B data bit (symbol) per 4-msec period of the CL1-B code and one CL1-C secondary code chip per 8-msec period of the CL1-C primary code.

There is a 180-deg carrier phase ambiguity in the analysis process that has been used to determine these codes. The files given below represent the three PRN codes as sequences of +1/-1 values. The 180-deg phase ambiguity implies that the signs of the PRN codes given below may be opposite to what is considered correct by the Galileo system designers.

It was impossible to determine which chip of the CL1-C secondary code is considered to be the initial chip. Thus, the only thing that can be guaranteed about the secondary code presented below is that its circular cross-correlation with the true secondary code will have a correlation of +1 or -1 (magnitude of 1) at a single offset in the range 0 to 24. All other offsets will produce correlation magnitudes of 0.12 or less.

The PRN code chip values in the files listed below have been determined using two data sets, the one from 2 March 2006 and the one from 8 March 2006. Independent analysis of the two sets yielded identical PRN codes. Each chip's error probability is less than 8.6e-11, which implies that they are accurate to a very high confidence level (except for the sign ambiguities and the secondary code phase ambiguity that have been noted). If the GIOVE-A satellite continues to broadcast the same PRN codes that it broadcast on these two dates, then the codes given below can be used to reliably acquire and track its BOC(1,1) L1 signal. The only remaining difficulty concerns how to decode navigation data bits. The PRN code sign ambiguities will have to be resolved in order to do this. It may be possible to resolve the sign ambiguities based on publicly available documentation about the navigation data symbols, but that is a subject for a whole new project.

CL1-B primary PRN Code

CL1-C primary PRN Code

CL1-C Secondary PRN Code

The GIOVE-A L1 BOC(1,1) signal is reasonably strong in comparison to typical GPS L1 C/A-code signals. During the recording of the 2 March 2006 data set, the GIOVE-A satellite's elevation was 36 deg, as viewed from Ithaca, NY, and its signal had a carrier-to-noise ratio of 49.2 dB-Hz. Half of the power was in the L1-B signal, and half of the power was in the L1-C signal. The strongest GPS L1 C/A-code signal in this data set (PRN 17) had a carrier-to-noise ratio of 54.4 dB-Hz. The 8 March 2006 data set had a stronger GIOVE-A carrier-to-noise ratio, 51.6 dB-Hz. This increased signal strength was presumably caused by the higher GIOVE-A elevation, 45 deg. This latter data set's strongest GPS C/A-code signal (PRN 19) had a carrier-to-noise ratio of 54.9 dB-Hz. Thus, the strongest received GIOVE-A L1 BOC(1,1) signal was no more than 3.3 dB weaker than the strongest received GPS L1 C/A code signal. Note that the patch-antenna/pre-amp/RF-front-end system used in this study is very sensitive; typical systems produce peak GPS L1 C/A-code carrier-to-noise ratios of about 50 dB-Hz, but this system yields peak carrier-to-noise ratios of about 55 dB-Hz.

On April 3rd NovAtel used the L1-B PRN code given above in their new EuroPak-L1L5E5a receiver to successfully track the GIOVE-A signal, thus confirming the L1-B code's validity. Tests on subsequent days also proved successful, but tests on April 13th and April 18th failed to find the signal. Apparently, the GIOVE-A satellite was either not transmitting its BOC(1,1) signal on those days or its PRN codes were changed. By May 24th, NovAtel was again able to track the signal with the codes provided here.

On April 19th a new Galileo draft document was published that purported to contain, among other things, the Galileo system's 50 L1-B and L1-C primary PRN codes. None of the published codes correlated well with the codes given above, and the published L1-C codes were only 4092 chips long, which disagrees with the results given above for GIOVE-A.

Subsequently, the Cornell project team has learned that whereas the GIOVE-A power spectrum is meant to be representative of the final Galileo signal power spectrum, the GIOVE-A codes and navigation message were not meant to be the same as the final Galileo codes and navigation message. This explains why the GIOVE-A codes presented here are not among those in the recently released Galileo draft documentation. Sources from within the Galileo project indicate that the GIOVE-A interface control documentation will be publicly released in June 2006.

Additional Figures

Cornell GPS Home Page

Page created on 31 March 2006 by M. Psiaki
Page last modified on 31 May 2006