Samples of GNSS Signal Records

On this page a few samples of GNSS signal records will be provided. These records are too short for the regular GNSS positioning algorithms. However they will be useful for someone who wants to verify the GNSS signal acquisition and tracking algorithms.

Signal Record

The signal sampling frequency is 16367600 Hz. The intermediate frequency is 4130400 Hz. In this record one signal sample is stored as one signed byte (int8). The record length is approximately 1 second and it was made in 2008.

Plots of the record file gioveAandB_1_signal.bin
IF signal plots

These GPS L1 signals are present in this record (sorted from the strongest to the weakest):

PRN Approximate Carrier Frequency
C/A Code Phase
[1] PRN 32 may not be acquired in the first millisecond of the record. This is most likely due to a bit transition in the navigation data.
[2] These PRNs require acquisition algorithms which are more sensitive than the default one (5 to 9 ms integration time is required).
22 4.128460 15042
3 4.127190 1618
19 4.129280 6184
14 4.133130 14540
18 4.127310 344
11 4.133280 2955
321 4.134060 6857
 6 4.127220 7828
282 4.132022 15203
92 4.132420 9437

 This record also contains  E1 (L1) signals from the two Galileo GIOVE satellites:

Satellite Approximate Carrier Frequency
Data Channel Code Phase
GIOVE A 4.129080 5667
GIOVE B 4.131250 34371

Signal Record

The signal sampling frequency is 12 Ms/s (MHz). The intermediate frequency is 3.563 MHz. The IF signal is sampled using one bit. Therefore one bit in the file represents one sample (8 samples in one byte). Due to this fact to process this signal the SDR that comes with the book must be modified as described below.

The following GPS PRNs are present in this record: 01, 03, 07, 19, 20, 22, 24, 28, 31.

An example how to read the this record file in Matlab:

[fid, message] = fopen(fileName, 'rb', 'b');
data = fread( fid, numberOfSamplesToBeRead, 'ubit1' )';
data = data * 2 - 1; %To convert values to +/- 1

Please note that the fopen command for this data file differs from the one used in the original SoftGPS code. The difference is the ‘b’ parameter ('rb' is not the same as 'r', 'b'). It is required because of the way this particular data file was written.

The tracking code must be modified in a few places. I will not provide the code, but instead I will tell where to look for the problems. The first place is the fseek command. This command works fine, when one the signal sample is stored as one byte in the record. However in this case one sample is stored as one bit. Therefore some code instead of the fseek command must be developed.
The second place for code change is the computation of the variable absoluteSample. The original code is also based on the byte size samples. This must be fixed.

42 thoughts on “Samples of GNSS Signal Records

  1. Hi
    Can you provide me a signal record which is at least 37s long. I would like to test the GNSS positioning algorithms too.


    1. Hi Rahul,

      Unfortunately at the moment I cannot do that for various reasons.

  2. How do you convert the 2 bit sign mag raw data into 8 bit format. The SDR code that came with the book requires 8 bit data. In Matlab, there is no datatype of 2 bits.

    The RF front end that I have provides 2 bit sign mag data. Can you please help on how to use this data with the SDR code on the Book DVD?

    1. Matlab has special data “types” that can handle one or more bits when fread is used. Check Matlab documentation on the fread function. Look for the “bitn” under the precision section.

    1. Hi,

      No, I cannot.
      If I will have some free time, then I will try to make such records. But at the moment I do not have other types of signal records that are not published on this web page.

  3. Dear Sir,
    I am just a beginner in studying of GNSS soft-receivers. My main concern is in GPS signal processing such as acquisition, tracking, etc. I was very pleased after reading front and back matters of this book in springer. There are many confused things for me in studying and doing researches in such GNSS soft-receivers. I would like to know if the Matlab codes in this book can be installed in the current Matlab package. This means …to install as a new GPS toolbox. Thanks you so much.
    Ms. Win Kay Khaing

    1. Dear Win Kay Khaing,

      Our code is not a Matlab toolbox, it does not need to be installed. Our code is Matlab scripts and functions that you can run and edit. Matlab had many versions since our code was published, so naturally sometimes you will have to fix some things in our code to make it work with the new versions of Matlab. We try to keep on our homepage a list of things that you need to update in our code, but you may also find some useful information on other pages on the Internet.

  4. Hi Darius

    Why is the GNSS signals are usually converted to an intermediate frequency instead of a direct baseband conversion?

    What are the problems with a direct baseband conversion of the signal?

    1. Hi Rahul,

      I am not an RF engineer, but as far as I know this has mostly to do with the flicker noise which has 1/f, or pink power density spectrum. The GNSS signals are very noise sensitive, so whenever it is possible the engineers try to minimize the noise on the receiver side. Also I know that DC-offset may also give some issues (especially with 1-bit ADCs) due to the nature/design of GNSS signals and GNSS measurements.
      In the GNSS receiver noise context here some of the main parameters that engineers must consider: the flicker noise, noise figure in components, noise gain, filter bandwidths, number of bits in the ADC.

  5. Hi Darius,

    I have collected 30 mins of live data from the onetalent sdrnav00 sdr but upon processing, I constantly get errors saying that no valid preambles were found for any of the 8 channels. Do you have any suggestions for how to fix this error?


    1. Hi Payam,

      Please make sure that you have configured the GNSS SDR correctly to process the files. This is a general answer that is valid for all GNSS front-ends. Different front-ends, different versions of these front-ends or their configuration may create signal records files with different sampling and IF frequencies. Also in some situations a real signal sampling is used and in other cases a quadrature sampling is used. Further more there are differences in a single sample storage in the file (independently from how many bots the ADC is producing): 1 bit, 2bits, 8 bits or more. For details please consult the documentation for your front-end version.

      When testing a new front-end at first try to process just about 0.5 to a few seconds of the signal. If the signal record settings are correct, then the acquisition should find signals and the tracking should be stable. The tracking errors on most of the channels should converge toward zero. You should be able to see a few navigation data bits (the bit transitions).

      If acquisition works but you observe that on all channels the signal tracking errors “drift” in one direction, then you might need to flip the sign of discriminator output (this may be caused by the front-end design) or in some cases it might be that some of frequency related parameters are a bit off.

  6. Dear Sir,
    I am developing a GNSS soft-receivers for education in shanghai.China . My main concern is in GPS signal processing such as acquisition, tracking, etc. I was very pleased after reading your book,it is a great book for me. I have used the data for testing ,the file named “GPSdata-DiscreteComponents-fs38_192-if9_55.bin” from the DVD attached.
    I have a quenstion that i don’t know the accuarcy longitude and latitude where is the data collected.Can you tell me? Thanks!

    1. Hi,

      The approximate latitude is 40.00806 (N) and longitude is about -105.26267 (105.26267 W).

  7. Hi Darius,
    Could you provide me recorded data for GPS L5 signal

    Thank you

    1. Hi Padma,

      At the moment I do not have a posibility to record anything but GPS L1 signals.

      Best regards,

  8. Hi Darius,
    For the record data “”,acquisition GPS PRNs are present in this record: 01, 03, 07, 14,19, 20, 22, 24, 28, 31. There is more “PRN 14” than you have present. Why ?
    Thank you
    best regards
    C. M

    1. Hi C. M

      I can’t follow you question. Could you explain in more details what is the problem?

  9. Hello sir,
    I am a beginner in navigation field, i am studying software defined GPS receiver.
    My main concern is in GPS signal processing such as acquisition, tracking and navigation.
    Can you please guide me how to get IF data so that i can test the MATLAB code completely.
    I got the data from this link “” . But this data is insufficient to get navigation output. Acquisition and tracking is obtained but data is not sufficient to get navigation output.
    Please help me in this regard
    Thanks you so much.

    1. Hello Sheher Banu S,

      Right now I do not have a possibility to host on this homepage long signal records. You will have to find another source for GNSS signal records or you if can – buy a GNSS front-end to make your own signal records.

  10. Dear Darius
    Thanks a lot for wonderful code.. I am using USRP 2932 to record GLONASS data.. I think there is not Intermediate frequency involved in this.. so what should I set IF value to? I guess same as the signal frequency? or Zero the difference of LO frequency and Signal frequency.

    1. Dear Vasu,

      The IF will depend on your USRP configuration (the frequency downconversion plan). It is likely that it will be near zero, but it might be something else (and especially if we are talking about the new CDMA GLONASS signals).

  11. Dear Mr Darius Plaušinaitis
    I am working on GNSS interfrence mitigation ,how i can add jammer signal(CW or CHIRP ) to the gps signal

    Thank you

    1. Dear Zaki Aissam,

      The best is to use a dedicated GNSS signal simulator as this can create the most controlled interference.

      Transition og interference on GNSS bands in open air is illegal, so you can do such approach only in controlled/closed environments.

      You can add the interference to the already recorded GNSS signal but this approach has a few serious challenges:
      * You have to make sure that the signal to interference power is correct. It might be problematic to achieve that for the GNSS signals which were sampled with a low number of ADC bits/sample.
      * The interference simulations must account for the RF signal processing. The radio interference has a strong effect to the signal conditioning (“processing”) by the RF front-end (and it might cause clipping, ADC saturation etc.). Plus – after passing the antenna, LNA, and the RF front-end the interference properties most likely will change. Don’t forget that some front-ends are designed to mitigate certain types of interference.
      * The recorded signal might contain already some interfering signals (at low level)

  12. Hi Darius Plaušinaitis
    Thanks a lot for your reply. I was trying to modify the GPS code in the book to process GLONASS signals.. However No GLONASS BIN file is available. Can I use RINEX data or .dat file for the same… with your receiver. Can you please suggest from where I can get GLONASS bin file otherwise?
    Thank You

    1. Hi,

      At the moment I do not have a possibility to do GLONASS signal records.
      No, you cannot use RINEX file. Se my other comment on RINEX files on this page.

    1. Hi,

      At the moment I have no possibility to do GLONASS signal records.

  13. Hi Darius,

    I am new to the data processing of GNSS signals. Please explain the different between RINEX file and the ‘*.bin’ files (you have provided as gioveAandB_short.bin and there are examples of *.bin given by SDR GNSS book, Borre. Could it be that we need to convert from RINEX format to bin format ? Is the *.bin format you provided a standard one ? Appreciate you assistance.

    1. Hi,

      The RINEX files are the GNSS measurement data (the outcome) after the GNSS receiver chip (or software receiver) has processed the GNSS radio signals (in other words – the input). The *.bin files are records of GNSS radio signals that normally is the input to the GNSS receiver chip or software receiver. In hardware receivers this signal data is never stored in files as it is passed in real-time from the RF front-end electronics to the signal processing chip (or IC die).

    1. Hi,

      At the moment I do not have a possibility to do IRNSS signal records.

  14. Hey! Thanks for the sample files!

    I am a software engineer just trying out some SDR tools, but I am a bit confused.

    On the first file, you mention that the sample frequency is roughly 16MHz, and each sample is a signed int8. You also mention that the total length is roughly ~1m. However, the uncompressed file is only about 16MiB, when I expected 60 * 16*10^6 ~ bytes.

    What am I missing?

    Thank you!

    1. Hi Manuel!

      You are right – the description text was wrong and now it is corrected. The record is one second long.

      Best regards,

  15. Hi Darius,

    thanks for the provided files.

    As I noticed the files only contain real data.
    But isn’t it necessary to have I and Q data to process GPS signals?

    Thanks for your reply!

    1. Hi Nils,

      Yes, one needs I and Q for the carrier tracking, but the data representation conversion can be done at various receiver stages. It can be part of the signal acquisition and tracking algorithms or it can be done in the radio front-end before signal tracking/acquisition part. Different approaches have their own advantages and drawbacks.

  16. Hi Darius,

    I’m working with your matlab gnss scripts using my usrp2 sdr device; I’m able to perfectly acquire visible gps satellites, as my hardware gps does, as I updated the code for longer coherent integration time than the default but there’s an insisting issue in tracking loop as the discriminator results are probably mismatched when finding preambles so “could not valid preamble” shows up every time. I also flipped the bit thresholds in the function to check for a 180 degrees phase ambiguity as well as the dll and pll discriminator signs themselves but no luck yet. My settings is 5 Msps @ 1575.42 Mhz center freq which translates to zero IF in the usrp & 16 bit I&Q quantized.

    Can you speculate what the problem may be?


  17. Dear sir
    i have “A Software-Defined GPS and Galileo Receiver
    A Single-Frequency Approach” book along with DVD which consisting matlab scripts and signal recorders.
    When iam trying to run the code by using matlab 14b version, acquisition and tracking performing properly for 8 satellites and track results are saving in a file and after it is showing some errors, i am trying to resolve this error but as the script following the functions hierarchy i could not be able to figure out where the error is present.
    i have run the code with the file name: GPSdata-DiscreteComponents-fs38_192-if9_55.bin
    the following errors iam getting please help me to resolve the error.

    Tracking started at 21-Jul-2018 20:03:09
    Tracking is over (elapsed time 00:27:03)
    Saving Acq & Tracking results to file “trackingResults.mat”
    Calculating navigation solutions…

    Scalar index required for this type of multi-level indexing.
    Error in calculatePseudoranges (line 63)
    travelTime(channelNr) = …
    Error in postNavigation (line 156), currMeasNr) = calculatePseudoranges(…
    Error in postProcessing (line 126)
    navSolutions = postNavigation(trackResults, settings);
    Error in init (line 75)

    thanking you..

    1. Dear Sathish,

      I am sorry, but I am not able to help you as I do not have Matlab license anymore and now I work in a different field that is not related to GNSS. This error is most likely related to changes in the newer Matlab versions. Please try to search in Internet for possible solutions.

    2. There is a difference to use ‘intersect’ function. If you use Matlab after 2012, you should add ‘legacy’ flag with ‘intersect’ function for SDR GNSS source

      Like below,

      Before in postNavigation.m (line 140)
      activeChnList = intersect(find(satElev >= settings.elevationMask), …

      Add ‘legacy’ flag,
      activeChnList = intersect(find(satElev >= settings.elevationMask), …

      I am also refer John KIM’s reply.

Leave a Reply

Your email address will not be published.