“TEQC (Translation, Editing and Quality Checking) — is UNAVCO-designed and supported for a variety of GPS/GNSS pre-processing and quick post-processing tasks, including translation to RINEX or BINEX, time windowing, satellite filtering, metadata correction, dataset merging or splitting, and GPS/GNSS quality checking of the data including coarse point-positioning.”
“Teqc (pronouced “tek”) is a simple yet powerful and unified approach to solving many pre-processing problems with GPS, GLONASS, Galileo, SBAS, Beidou, QZSS, and IRNSS data, especially in RINEX or BINEX format:”
The Teqc documenation has an excellent glossary of terms they use in the
teqc software. Of note for this blog post are:
- decimate - “modulo decimation of OBS epochs to # time units”
- epoch - “a specific time instance, using the GPS time basis or the time basis from another constellation”
- GPS - “‘Global Positioning System’; a specific spaceborne radionavigation system financed and operated by the U.S. Department of Defense”
- RINEX - “‘Receiver Independent Exchange’; ASCII exchange representation of GNSS data and metadata”
- SV - “‘Space Vehicle’, referring originally to a specific Navstar GPS satellite, but now used to refer to any one of the Navstar GPS, GLONASS, Beidou/Compass, Galileo, QZSS, IRNSS, or SBAS satellites”
Download binaries for macOS, Linux, Windows and others from the Teqc site. You can also find documentation & tutorials at that site.
teqc -version # executable: teqc # version: teqc 2019Feb25
Example of converting Leica file in the
You can filter help results for leica.
teqc -help | grep lei
-lei[ca] code input is from Leica receiver, record type 'code': code = ds for Leica DS format code = lb2 for Leica LB2 format code = mdb for Leica MDB format
Convert Leica to RINEX
# The output RINEX file could be `.obs` # You may also see it in the format of `.yyo`, where yy = 22. E.g, `.22o` # Use either of these commands. The record type is `mdb` teqc -lei mdb GNSS202235660778.m00 > GNSS202235660778.obs teqc -leica mdb GNSS202235660778.m00 > GNSS202235660778.obs
2.11 OBSERVATION DATA M (MIXED) RINEX VERSION / TYPE teqc 2019Feb25 20230105 00:07:30UTCPGM / RUN BY / DATE OSX ker:10.11.6|Core i5|gcc 4.3 -m64|OSX ker:10.10+|=+ COMMENT BIT 2 OF LLI FLAGS DATA COLLECTED UNDER A/S CONDITION COMMENT -Unknown- MARKER NAME -Unknown- -Unknown- OBSERVER / AGENCY 287551 LEICA 7.500/4.000 REC # / TYPE / VERS -Unknown- -Unknown- NONE ANT # / TYPE 0.0000 0.0000 0.0000 APPROX POSITION XYZ 2.0000 0.0000 0.0000 ANTENNA: DELTA H/E/N 1 1 WAVELENGTH FACT L1/2 6 L1 L2 C1 P2 S1 S2 # / TYPES OF OBSERV 1.0000 INTERVAL GNSS Survey COMMENT GNSS Survey COMMENT Project creator: COMMENT Leica Geosystems AG COMMENT SNR is mapped to RINEX snr flag value [0-9] COMMENT L1 & L2: min(max(int(snr_dBHz/6), 0), 9) COMMENT 2022 12 22 16 53 18.0000000 GPS TIME OF FIRST OBS 18 LEAP SECONDS END OF HEADER 22 12 22 16 53 18.0000000 0 22G31G22G03G04G21G01G26G32G16S31S33S35
Decimate the file from 1 sec to 30 seconds.
teqc -help | grep dec
`-O.dec[imate] interval[:offset] modulo decimation of OBS epochs to interval time units (default in seconds),`
teqc -O.dec 30 GNSS202235660778.obs > GNSS202235660778.30.obs
This reduces a 1 second file from 32 MB to a 30 second file down to 1.1 MB. You can inspect the
.obs file for
COMMENT and see that the decimation is now 30 seconds.
Analyze the RINEX output, focusing on decimation and excluded satellites.
ll -h *.obs # result of Linux listing of OBS files to determine file size, human readable -rw-r--r-- 1 roblabs staff 1.1M Jan 4 16:24 GNSS202235660778.30.obs -rw-r--r-- 1 roblabs staff 32M Jan 4 16:16 GNSS202235660778.obs # --- cat GGNSS202235660778.30.obs | grep COMMENT # result of Linux regular expression (grep) teqc 2019Feb25 20230105 00:16:58UTCCOMMENT BIT 2 OF LLI FLAGS DATA COLLECTED UNDER A/S CONDITION COMMENT GNSS Survey COMMENT GNSS Survey COMMENT Project creator: COMMENT Leica Geosystems AG COMMENT SNR is mapped to RINEX snr flag value [0-9] COMMENT L1 & L2: min(max(int(snr_dBHz/6), 0), 9) COMMENT Forced Modulo Decimation to 30 seconds COMMENT
Decimate & GPS Only
Our goal here is to do two operations in the same
teqc command: decimate & convert only the GPS data in the original file.
You can call
teqc with multiple flags (or sometimes called switches). This will be important if, for example, you want to convert with the following options:
- Convert to RINEX
- decimate down to 30 seconds
- Only use SVs from GPS. That is, filter out other constellations such as GLONASS, etc.
First, we need to understand how to filter out or remove from the RINEX the constellations that we don’t want.
Let’s look at how the help information from the
teqc executable is displayed.
teqc -help | grep use\ any
-G don't use any GPS SVs -R don't use any GLONASS SVs -S don't use any SBAS SVs -E don't use any Galileo SVs -C don't use any Beidou SVs -J don't use any QZSS SVs -I don't use any IRNSS SVs
The Teqc Tutorial from unavco.org has this documentation about excluding GLONASS(R), GALILEO(E), and SBAS(S), but leaving all GPS(G):
# These flags can explicity used to remove some constellations. # See page 12 of the PDF documentation for details # -R don't use any GLONASS SVs # -S don't use any SBAS SVs # -E don't use any Galileo SVs teqc -R -E -S +obs + +nav +,+ -tbin 1d tbinoutput inputfiles
Now we can put together decmitate and save GPS only.
teqc -O.dec 30 -R -E -S -C -J GNSS202235660778.obs > GNSS202235660778.30.GPS.obs
- As we saw with just decimate, we reduced a 32 MB 1-second file down to a 30-second file at 1.1 MB.
- Now with decimate and GPS Only, we reduced a 32 MB file down to 423K.
- You can review the comments in the RINEX file that shows which satellites were excluded.
Analyze the RINEX output, focusing on decimation and excluded satellites.
ll -h *.obs # result of Linux listing of OBS files to determine file size, human readable -rw-r--r-- 1 roblabs staff 32M Jan 4 16:16 GNSS202235660778.obs -rw-r--r-- 1 roblabs staff 1.1M Jan 4 16:24 GNSS202235660778.30.obs -rw-r--r-- 1 roblabs staff 423K Jan 12 18:11 GNSS202235660778.30.GPS.obs # --- cat GNSS202235660778.30.GPS.obs | grep COMMENT # result of Linux regular expression (grep) teqc 2019Feb25 20230105 00:16:58UTCCOMMENT BIT 2 OF LLI FLAGS DATA COLLECTED UNDER A/S CONDITION COMMENT GNSS Survey COMMENT GNSS Survey COMMENT Project creator: COMMENT Leica Geosystems AG COMMENT SNR is mapped to RINEX snr flag value [0-9] COMMENT L1 & L2: min(max(int(snr_dBHz/6), 0), 9) COMMENT Forced Modulo Decimation to 30 seconds COMMENT teqc edited: all GLONASS satellites excluded COMMENT teqc edited: all SBAS satellites excluded COMMENT teqc edited: all Galileo satellites excluded COMMENT teqc edited: all Beidou satellites excluded COMMENT teqc edited: all QZSS satellites excluded COMMENT
You can use the metadata extraction options
Interrogate the file native m00 file
teqc +meta GNSS202235660778.m00
Once you have decimate’d the file & filtered the SVs for GPS Only, you can use
+meta to get a summary of the RINEX file.
teqc +meta GNSS202235660778.30.GPS.obs # result of metadata extraction filename: GNSS202235660778.30.GPS.obs file format: RINEX file size (bytes): 432666 start date & time: 2022-12-22 16:53:30.000 final date & time: 2022-12-22 21:17:30.000 sample interval: 30.0000 possible missing epochs: 0 4-char station code: GNSS station name: -Unknown- station ID number: antenna ID number: -Unknown- antenna type: -Unknown- NONE antenna latitude (deg): 90 antenna longitude (deg): 0 antenna elevation (m): -6356752.3142 antenna height (m): 2.0000 receiver ID number: 287551 receiver type: LEICA receiver firmware: 7.500/4.000 RINEX version: 2.11 RINEX translator: teqc 2019Feb25 trans date & time: 2023-01-13 02:11:36.000