Main Content


Acquire GNSS signals

Since R2023a


The gnssSignalAcquirer System object™ detects signals emanating from a given global navigation satellite system (GNSS) satellite constellation. The object also estimates the coarse values of the code-phase offset and the frequency offset.

The object supports these satellite systems that use C/A-code for spreading their signals.

  • Global Positioning System (GPS)

  • Navigation with Indian Constellation (NavIC)

  • Quasi-Zenith Satellite System (QZSS)

To acquire a GNSS signal :

  1. Create the gnssSignalAcquirer object and set its properties.

  2. Call the object with arguments, as if it were a function.

To learn more about how System objects work, see What Are System Objects?




gsa = gnssSignalAcquirer creates a default GNSS signal acquirer System object.


gsa = gnssSignalAcquirer(Name=Value) sets properties using one or more optional name-value arguments. For example, gnssSignalAcquirer(GNSSSignalType="QZSS C/A") sets the type of the GNSS signal to "QZSS C/A".


expand all

Unless otherwise indicated, properties are nontunable, which means you cannot change their values after calling the object. Objects lock when you call them, and the release function unlocks them.

If a property is tunable, you can change its value at any time.

For more information on changing property values, see System Design in MATLAB Using System Objects.

Type of GNSS signal to acquire, specified as one of these options.

  • "GPS C/A"

  • "NavIC L5 C/A"

  • "NavIC S C/A"

  • "QZSS C/A"

Data Types: char | string

Sample rate of the input signal, specified as a positive numeric scalar.

Data Types: single | double

Intermediate frequency of the input signal in hertz, specified as a nonnegative numeric scalar.

Data Types: single | double

Range of the frequency search, specified as a two-element numeric vector.

Data Types: single | double

Resolution of the frequency search, specified as a positive numeric scalar.

Data Types: single | double

Detection threshold factor, specified as a numerical scalar greater than or equal to 1.

Data Types: single | double




y = gsa(x,prn) searches the input signal x for a satellite with a pseudo-random noise (PRN) index, prn, and returns the information for that PRN ID about the frequency offset, code phase offset, and detection status of a satellite with specified PRN ID.


[y,c] = gsa(x,prn) additionally returns a 3-D matrix, c, containing the correlation values of the searched satellites.

Input Arguments

expand all

Input signal, specified as a column vector of length gsa.SampleRate*10e-3, where 10e-3 represents one millisecond of the data.

Satellite PRN IDs, specified as anM-element vector. M is the number of PRN IDs to search for on the input signal.

Output Arguments

expand all

PRN ID information, returned as an M-by-4 table. The table contains these columns.

  • PRNID — The PRN ID corresponding to the information in the other columns.

  • FrequencyOffset — Coarse estimate of the frequency offset for the PRN ID

  • CodePhaseOffset — Coarse delay, in number of C/A-code chips, for the PRN ID.

  • IsDetected — Detection status of the PRN ID, returned as numeric 1 or 0.

The order of the PRN IDs in the first column of the table differs from the order of the PRN IDs in the input argument prn. The step function arranges the PRN IDs in the table in decreasing order of maximum correlation value.

Correlation value of the searched satellites, returned as a P-by-Q-by-R array.

  • P is the number of code-phase offsets in the search. To calculate P, the step function uses this equation:

    P = floor(gsa.SampleRate*10e-3).

    As a result, the step function searches the incoming signal for one block of C/A-code.

  • Q is the number of frequency offset bins in the search. To calculate Q, the step function uses this equation.

    Q = floor((gsa.FrequencyRange(2) - GSA.FrequencyRange(1))/gsa.FrequencyResolution) + 1.

  • R is the number of searched satellites. R is equal to the length of prn. The step function arranges the R layers in decreasing order of maximum correlation value within each layer.

Object Functions

To use an object function, specify the System object as the first input argument. For example, to release system resources of a System object named obj, use this syntax:


expand all

infoCharacteristic information about object
stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
cloneCreate duplicate System object
isLockedDetermine if System object is in use
resetReset internal states of System object


collapse all

Acquire a GPS baseband signal at a sampling rate of 10.23 MHz and visualize the correlation plot.

Load a precomputed GPS waveform.

load gnssWaveforms

Initialize the GNSS signal acquirer object.

gsa = gnssSignalAcquirer
gsa = 
  gnssSignalAcquirer with properties:

              GNSSSignalType: "GPS C/A"
                  SampleRate: 10230000
       IntermediateFrequency: 0
              FrequencyRange: [-10000 10000]
         FrequencyResolution: 500
    DetectionThresholdFactor: 1.9000

Search for 32 GPS satellite PRN IDs, and display the frequency offset, code-phase offset, and the detection status of a satellite for each PRN ID.

[acqInfo,corVal] = gsa(gpsBBWaveform,1:32);
acqInfo=32×4 table
    PRNID    FrequencyOffset    CodePhaseOffset    IsDetected
    _____    _______________    _______________    __________

      1            2000                111           true    
      5            9000                222           true    
     19            7000                444           true    
     12            5000                333           true    
     25            4500                555           true    
     30            1000                666           false   
     17           -5500               25.1           false   
     18            -500                666           false   
      6           -4500                134           false   
     21            4500                979           false   
     16           -1000                677           false   
     27           -9500              292.4           false   
      7           -8500                343           false   
     14            9000                790           false   
      2           -4000                 51           false   
      3           -9500                657           false   

Visualize a surface plot of the 2-D correlation values for the satellite that has the largest correlation magnitude.

freqRange= gsa.FrequencyRange;                                                   % Range of the frequency search in Hz
stepSize = gsa.FrequencyResolution;                                              % Step size of frequency search in Hz
satIndex = 1;                                                                    % Visualize 1st satellite correlation
mesh(freqRange(1):stepSize:freqRange(2),0:size(corVal,1)-1,corVal(:,:,satIndex)) % Surface plot
xlabel("Doppler Offset")
ylabel("Code Phase Offset")
title("Correlation Plot for PRN ID: " + acqInfo.PRNID(satIndex))

Figure contains an axes object. The axes object with title Correlation Plot for PRN ID: 1, xlabel Doppler Offset, ylabel Code Phase Offset contains an object of type surface.

Acquire a GPS intermediate frequency (IF) signal at 38.192 MHz.

Load a precomputed GPS waveform.

load gnssWaveforms

Initialize the GNSS signal acquirer object.

gsa = gnssSignalAcquirer(IntermediateFrequency=10e6,SampleRate=38.192e6);

Search for 32 GPS satellite PRN IDs.

Information = gsa(gpsIFWaveform,1:32); % Information about frequency Offset, code-phase Offset, and detection of a satellite for each PRN ID
gsaInfo = info(gsa)                    % Characteristic information
gsaInfo = struct with fields:
    ReferenceNoiseLevel: 1.2586e+03


[1] Science Applications International Corporation (SAIC). NAVSTAR GPS Space Segment/Navigation User Segment Interfaces. IS-GPS-200N. El Segundo, CA: SAIC, August 22, 2022

[2] Indian Space Research Organization (ISRO). Signal in Space ICD for Standard Positioning Service. ISRO-IRNSS-ICD-SPS-1.1. Bangalore: ISRO, August 2017.

[3] Quasi-Zenith Satellite System Services. Quasi-Zenith Satellite System Interface Specification Satellite Positioning, Navigation and Timing Service. IS-QZSS-PNT-004. Cabinet Office, Government of Japan (CAO), January 25, 2021.

[4] Ward, P.W. “GPS Receiver Search Techniques.” In Proceedings of Position, Location and Navigation Symposium - PLANS ’96, 604–11. Atlanta, GA, USA: IEEE, 1996.

[5] Kaplan, Elliott D., and C. Hegarty, eds. Understanding GPS/GNSS: Principles and Applications. Third edition. GNSS Technology and Applications Series. Boston; London: Artech House, 2017.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced in R2023a