Recently I was able to get a very old GlobalSat USB GNSS receiver to interface to my new Apple MacMini M4 computer. Using the built-in USB driver, the GlobalSat receiver was recognized. Its interface appeared as
- /dev/cu.usbserial-130
Connecting to that port with the MacOS terminal app, and allowing the receiver to run for several hours resulted in the receiver recovering from about ten years of sitting in a box to being able to get a position fix. I wanted to get the data from the NMEA sentence GSV, which encodes a lot of information about the satellites being received. I looked for an on-line NMEA parser, but the only one I found did not work properly with the GSV sentence. So, on a lark, I grabbed the GSV data (which appears on three separate lines of NMEA code) and asked GROK to parse this sentence.
The input data:
- $GPGSV,3,1,10,19,76,337,26,17,62,061,36,22,61,144,30,06,60,210,29*7D
$GPGSV,3,2,10,14,41,144,29,03,30,064,34,24,25,284,,11,22,218,23*73
$GPGSV,3,3,10,01,14,046,29,12,10,311,*74
The GROK output:
The provided NMEA-0183 sentences are GPGSV sentences, which describe the satellites in view for a GPS receiver. Each sentence provides information about a subset of visible satellites, including their identification numbers, elevation, azimuth, and signal strength (SNR). Multiple sentences are used when there are more satellites than can fit in a single sentence (up to 4 satellites per sentence). Let’s parse the three provided sentences step-by-step.
General Structure of a GPGSV Sentence
A GPGSV sentence has the following format:
text$GPGSV,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>,<15>,<16>,<17>,<18>,<19>*<checksum>
<1>: Total number of GSV sentences in the sequence (e.g., 3 for a set of 3 sentences).
<2>: Sentence number (1, 2, 3, etc., indicating the position in the sequence).
<3>: Total number of satellites in view.
<4, 8, 12, 16>: Satellite PRN number (unique identifier for each satellite).
<5, 9, 13, 17>: Elevation in degrees (0 to 90, angle above the horizon).
<6, 10, 14, 18>: Azimuth in degrees (0 to 359, direction relative to true north).
<7, 11, 15, 19>: Signal-to-noise ratio (SNR) in dB (higher is better; empty if not tracked).
<checksum></checksum>: Two-digit hexadecimal checksum for error checking.
Parsing the Sentences
Sentence 1: $GPGSV,3,1,10,19,76,337,26,17,62,061,36,22,61,144,30,06,60,210,29*7D
$GPGSV: GPS Satellites in View.
3: Total of 3 sentences in this sequence.
1: This is the first sentence.
10: Total of 10 satellites in view.
Satellite 1:
- 19: PRN number (Satellite ID).
76: Elevation (76° above horizon).
337: Azimuth (337° from true north).
26: SNR (26 dB).
Satellite 2:
- 17: PRN number.
62: Elevation (62°).
061: Azimuth (61°).
36: SNR (36 dB).
Satellite 3:
- 22: PRN number.
61: Elevation (61°).
144: Azimuth (144°).
30: SNR (30 dB).
Satellite 4:
- 06: PRN number.
60: Elevation (60°).
210: Azimuth (210°).
29: SNR (29 dB).
Sentence 2: $GPGSV,3,2,10,14,41,144,29,03,30,064,34,24,25,284,,11,22,218,23*73
$GPGSV: GPS Satellites in View.
3: Total of 3 sentences.
2: This is the second sentence.
10: Total of 10 satellites in view.
Satellite 5:
- 14: PRN number.
41: Elevation (41°).
144: Azimuth (144°).
29: SNR (29 dB).
Satellite 6:
03: PRN number.
30: Elevation (30°).
064: Azimuth (64°).
34: SNR (34 dB).
Satellite 7:
24: PRN number.
25: Elevation (25°).
284: Azimuth (284°).
(empty): SNR (not tracked or no signal).
Satellite 8:
11: PRN number.
22: Elevation (22°).
218: Azimuth (218°).
23: SNR (23 dB).
Checksum: *73 (valid).
Sentence 3: $GPGSV,3,3,10,01,14,046,29,12,10,311,*74
$GPGSV: GPS Satellites in View.
3: Total of 3 sentences.
3: This is the third sentence.
10: Total of 10 satellites in view.
Satellite 9:
- 01: PRN number.
14: Elevation (14°).
046: Azimuth (46°).
29: SNR (29 dB).
Satellite 10:
- 12: PRN number.
10: Elevation (10°).
311: Azimuth (311°).
(empty): SNR (not tracked or no signal).
(No more satellites): This sentence only includes two satellites, as the total of 10 satellites has been covered.
Checksum: *74 (valid).
Summary of Parsed Data
The GPS receiver sees 10 satellites, described across three sentences. Here’s a consolidated view:
PRN Elevation(°) Azimuth(°) SNR (dB)
19 76 337 26
17 62 61 36
22 61 144 30
06 60 210 29
14 41 144 29
03 30 64 34
24 25 284 -
11 22 218 23
01 14 46 29
12 10 311 -
Observations
Signal Quality: Satellites with higher SNR (e.g., 36 dB for PRN 17) indicate stronger signals, likely contributing to a better GPS fix. Satellites 24 and 12 have no SNR, suggesting they are not actively tracked or have weak signals.
Elevation: Higher elevation (e.g., 76° for PRN 19) means satellites are closer to overhead, typically providing better accuracy. Lower elevation (e.g., 10° for PRN 12) may be less reliable due to potential obstructions.
Azimuth: The spread of azimuth angles indicates satellites are distributed across the sky, which is good for geometric dilution of precision (GDOP) and overall GPS accuracy.
Completeness: All 10 satellites are accounted for across the three sentences, with the last sentence only needing two satellite entries to complete the set.
Notes
The GP talker ID indicates GPS system data. Other systems (e.g., GL for GLONASS, GN for GNSS) may use different IDs.
The checksums (*7D, *73, *74) are valid, confirming the integrity of the sentences.
If you need further analysis (e.g., plotting satellite positions, assessing signal quality for navigation, or interpreting these in context with other NMEA sentences like GGA or RMC), please let me know!
If you have additional sentences or want me to focus on specific aspects (e.g., which satellites are likely used for a fix), provide more details.