Main Content

gnssSignalAcquirer

Acquire GNSS signals

Since R2023a

Description

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 acquiring these satellite signals.

  • Global Positioning System (GPS) for L1-course acquisition codes (C/A-codes) [1] and L1 civil (L1C) [2] codes

  • Navigation with Indian Constellation (NavIC) [3] for L5-SPS and S-SPS codes

  • Quasi-Zenith Satellite System (QZSS) [4] for L1-C/A codes

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?

Creation

Description

example

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

example

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

Properties

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"

  • "GPS L1CD

  • "NavIC L5 C/A"

  • "NavIC S C/A"

  • "QZSS C/A"

Data Types: char | string

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

Data Types: double

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

If the signal is at baseband, IntermediateFrequency is 0.

Data Types: double

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

The first element of the vector represents the lowest frequency value to search for. and the second element represents the highest frequency value to search for. As a result, the range of the search is from (IF + min(FrequencyRange)) to (IF + max(FrequencyRange)), where IF is the IntermediateFrequency property value.

Data Types: double

Resolution of the frequency search in hertz, specified as a positive numeric scalar. This property specifies the resolution with which frequencies are searched around the IntermediateFrequency property value.

At a constant value of FrequencyResolution, an increase in integration time increases the number of complete sinusoids within that integration time period. Because integration over a complete sinusoid is zero, as the number of complete sinusoids increase within an integration time, the integrated value becomes closer to zero. Hence, with high integration time, decreasing the frequency resolution increases the chances of signal detection.

When GNSSSignalType is "GPS L1CD", integration time within the code increases to 10 milliseconds. In this case, to increase the possibility of successful detection, decrease the FrequencyResolution to 50 Hz.

Data Types: double

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

A value of 1 means that the detection threshold is the same as the square of the reference noise level. For proper detection, this value must be greater than 1.

The default value implies that the threshold value is 1.9 times the square of the reference noise level. The System object compares the square of the maximum signal correlation value against this threshold value to detect a valid satellite signal.

Data Types: double

Usage

Description

example

acqtable = gsa(signal,prnid) searches the input signal for a satellite with a pseudo-random noise (PRN) index, prnid, 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.

example

[acqtable,corrmat] = gsa(signal,prnid) additionally returns a 3-D matrix containing the correlation values of the searched satellites.

Input Arguments

expand all

Input signal, specified as a column vector.

  • When you set the GNSSSignalType property to "GPS L1CD", length of signal must be equal to SampleRate*20e-3.

  • When you set the GNSSSignalType property to any value other than "GPS L1CD", length of signal must be equal to SampleRate*1e-3.

1e-3 represents one millisecond of the data.

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

The PRN ID value depends on the GNSSSignalType property value.

  • If GNSSSignalType is set to "GPS C/A" or "GPS L1CD" — Each element in PRNID must be an integer in the range [1, 210].

  • If GNSSSignalType is set to "NavIC L5 C/A" or "NavIC S C/A" — Each element in PRNID must be an integer in the range [1, 14].

  • If GNSSSignalType is set to "QZSS C/A" — Each element in PRNID must be an integer in the range [183, 202].

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 ranging 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 prnid. 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:

    • When you set the GNSSSignalType property to "GPS L1CD":

      P = floor(SampleRate*20e-3).

    • When you set the GNSSSignalType property to any value other than "GPS L1CD":

      P = floor(SampleRate*1e-3).

    As a result, the step function searches the incoming signal for one block of ranging code.

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

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

  • R is the number of searched satellites. R is equal to the length of prnid. 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:

release(obj)

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

Examples

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);
display(acqInfo)
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")
zlabel("Correlation")
title("Correlation Plot for PRN ID: " + acqInfo.PRNID(satIndex))

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

References

[1] IS-GPS-200, Rev:N. "NAVSTAR GPS Space Segment/Navigation User Segment Interfaces." GPS Enterprise Space & Missile Systems Center (SMC) - LAAFB, Aug 22, 2022.

[2] IS-GPS-800, Rev:J. "NAVSTAR GPS Space Segment/User Segment L1C Interfaces." GPS Enterprise Space & Missile Systems Center (SMC) - LAAFB, Aug 22, 2022.

[3] ISRO-IRNSS-ICD-SPS-1.1. "Signal in Space ICD for Standard Positioning Service." ISRO satellite navigation programme. August 2017.

[4] IS-QZSS-PNT-004. "Quasi-Zenith Satellite System. Interface Specification. Satellite Positioning, Navigation and Timing Service." Cabinet office, Government of Japan. January 25, 2021.

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

[6] 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

expand all