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
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
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.
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
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.