Introduction

GNSS Interferometric Reflectometry (GNSS-IR) is a ground-based remote sensing technique that uses commercial off-the-shelf GNSS hardware. GNSS-IR shares heritage with early GNSS reflection experiments that used a single GNSS antenna and receiver. To enhance the reflected signal, these experimental teams tilted the antenna towards the reflection surface (Anderson 2000; Hannah 2001). A group based in Boulder, Colorado subsequently demonstrated that zenith-pointing GNSS antennas (the orientation used by all geodesists and surveyors) could also be used to measure environmental signals such as soil moisture, snow depth, and vegetation water content (Larson et al. 2008; Larson et al. 2009; Small et al. 2010). These GNSS-IR results meant that at least some of the data from thousands of geodetic-quality receivers could be used as environmental sensors.

As with Anderson (2000) and Hannah (2001), the Boulder group used SNR data as the primary reflection observable. GNSS data from the Plate Boundary Observatory were subsequently analyzed routinely to estimate environmental parameters in an initiative called PBO H2O (Larson 2016). The Boulder group and Chalmers University collaborated to demonstrate that zenith-pointing GNSS-IR antennas could be used to measure tides (Larson et al. 2013a).

The goal of this paper is to introduce the goals and general features of gnssrefl, an open source software package in python for GNSS-IR (Larson 2024). It builds upon the lessons learned from the PBO H2O project and an earlier software release (Roesler and Larson 2018). Examples for measuring tides, snow accumulation, and soil moisture with gnssrefl are presented.

Software

gnssrefl was developed with the following design goals:

  1. 1.

    Single language (python).

  2. 2.

    Open source.

  3. 3.

    Utilities to download and translate GNSS observation and orbit files.

  4. 4.

    Measures water levels (tides), snow accumulation and ice surface changes, and surface soil moisture.

  5. 5.

    Includes GPS, Glonass, Galileo, and Beidou observations.

  6. 6.

    Public access for example use cases.

  7. 7.

    Download via GitHub, python package index, and dockers.

  8. 8.

    Tools for assessment of GNSS-IR site quality.

The primary retrieved parameter in GNSS-IR is the vertical distance between the GNSS antenna phase center and the surface or reflector height. The reflector height is derived from the dominant frequency of low elevation angle SNR data for a given rising or setting satellite arc. gnssrefl uses a periodogram to estimate this frequency, which is then scaled by \(2/\lambda\) (where \(\lambda\) is the signal wavelength) to give reflector height (Axelrad et al. 2005).

gnssrefl is split into three broad categories: main modules, utilities, and environmental application modules (Fig. 1). The goals of the main modules are to (1) extract SNR data from GNSS data files and calculate azimuth/elevation angles and (2) estimate reflector heights. Utilities have been developed to help analysts set up appropriate analysis strategies and to calculate daily averages of reflector heights.

Fig. 1
figure 1

Overview of the modules and utilities of gnssrefl

Data translation and access

rinex2snr is the primary data translation module in gnssrefl. rinex2snr can be used with locally stored observation files or it can query 17 different global GNSS archives. The standard RINEX 2.11 data format (Gurtner and Estey 2007) and the newer RINEX 3 and 4 formats (Romero 2020) are allowed. A separate utility (nmea2snr) supports data stored in the NMEA format (Gakstatter 2015).

In addition to stripping out the SNR data, rinex2snr and nmea2snr calculate and store elevation and azimuth angles for each satellite observation. The output of the translation modules is a SNR file with time, azimuth and elevation angles, satellite number and SNR observations on multiple frequencies. None of the carrier phase or pseudorange data used for positioning are retained as they are irrelevant for GNSS-IR.

Site assessment utilities

In positioning software, measurements from all azimuths are used and a single elevation angle limit is imposed. In contrast, GNSS-IR requires the user to choose the desired azimuth and elevation angles to be used (the reflection mask). Here we outline the utilities in gnssrefl that help users optimize the reflection mask.

The first utility helps define the appropriate reflection mask; it should be defined in a way that ensures that the reflected signals come from the surface of interest, e.g. ice, snow, soil, water. The reflection zone for a single rising or setting satellite arc depends on the reflector height, the GNSS transmission frequency, and the satellite elevation and azimuth angles. Roesler and Larson (2018) previously provided Matlab tools to calculate and display GPS reflection zones for different azimuth and elevation masks. gnssrefl expanded this module – refl_zones - to include the Galileo, Glonass, and Beidou constellations (see supplement for sample output).

The GNSS-IR analyst also needs to confirm that the GNSS receiver is using a sampling rate that will allow an unaliased estimation of reflector height. Utility max_resolve_RH computes the maximum reflector height that can be estimated at a site for a given receiver sampling rate and azimuth/elevation angle mask (Roesler and Larson 2018). This is particularly important when analysts try to estimate reflector heights for sites that are operating at 30-second sampling intervals.

A third utility - quickLook – examines and displays reflection characteristics for a given SNR file using different reflection masks and quality control settings. The focus for quickLook is providing a visual summary of reflector height results on a given day rather than quantitative results for long periods of time.

Estimation of reflector height

gnssir is used for routine estimation of reflector heights. These values are used as input to the functions that make environmental products. Here only final results are shown for three examples that were operating zenith-pointing geodetic instruments; fuller descriptions of the inputs and outputs are provided in the supplement and at the GitHub repository. A discussion of the accuracy values for GNSS-IR retrievals for soil moisture, snow accumulation, and water levels are found in Small et al. (2016), McCreight et al. (2014) and Larson et al. (2017), respectively.

Sea level measurement

The GNSS instrument at Mornington Island, Australia was installed by the State of Queensland ~ 40 m offshore. This is too close to the shore to allow unobstructed water reflections in all directions (see supplement). In total ~ 130 reflector heights can be retrieved per day using elevation angle arcs that extend from 5 to 15 degrees (Fig. 2). The reflector heights are corrected in the subdaily module for the \(\dot{H}\) effect (Larson et al. 2013b) and inter-frequency biases.

Fig. 2
figure 2

Mornington Island reflector height estimates (blue circles) for a two-week period. Also shown is an 8 knot/day spline fit (cyan)

The estimated reflector heights agree with an 8-knot spline fit with an RMS of 0.033 m. The correlation between GNSS-IR and a collocated traditional tide gauge is better than 0.99 (Larson and Williams 2023). Better temporal resolution can be achieved in gnssrefl by using shorter/overlapping elevation angle ranges. Alternatively one can use the invsnr module, where SNR data arcs are simultaneously inverted to estimate a water level time series (Strandberg et al. 2016; Purnell et al. 2021). gnssrefl also allows users to convert their GNSS-IR-based relative water levels to values defined in the International Terrestrial Reference Frame (Altamimi et al. 2023).

Snow accumulation

The Niwot Ridge GNSS site was installed by the Boulder group at an elevation of 3500 m (Nievinski and Larson 2014). Snow depth values (Fig. 3) are based on a daily average of reflector heights. To convert reflector height to snow depth, a bare soil reflector height value is empirically defined for a user-defined snow-free time-period (snowdepth module). In North America this time-period is in the late summer or early fall, as shown in Fig. 3.

Fig. 3
figure 3

Daily snow depth measurements for niwot ridge GNSS-IR station for 2013-2014

Soil moisture

GNSS station SCIA was installed in Victorville, California as part of the Plate Boundary Observatory network. It is sparsely vegetated with very little rain in the summers. The soil moisture code (module vwc) follows the models developed by Chew et al. (2016) for PBO H2O. Soil moisture values in gnssrefl are reported once per day. Figure 4 shows soil moisture for Victorville over a two-year time period.

Fig. 4
figure 4

Daily soil moisture (volumetric water content) for the GNSS-IR site SCIA

Installation and documentation

The source code, documentation, and docker images for gnssrefl are hosted at GitHub. Examples are provided for soil moisture, surface changes on ice sheets, snow depth, tides, and lake/river monitoring. Although here we shared results from geodetic-quality GNSS sensors, one can also use gnssrefl to analyze SNR data recorded by low-cost GNSS sensors (Fagundes et al. 2021; Karegar et al. 2022).

gnssrefl was written for retrospective data analysis, i.e. after a full day of observations have been downloaded. However, the software can download real-time multi-GNSS orbits. This means that it would be straightforward to use the existing software to update a water level time series at ~ 15–30 min intervals, thus supporting users interested in monitoring storm surges in near real-time (e.g. Peng et al. 2019). Soil moisture and snow accumulation products could similarly be updated for near-real-time applications by modifying how frequently the products are created. For a truly real-time GNSS-IR monitoring system such as might be desired for tsunami monitoring (Larson et al. 2021), a user would need to install an appropriate Kalman filter (Strandberg et al. 2019; Liu et al. 2023).

Conclusions

An open-source software package in python has been developed to support GNSS-IR users. Mapping tools allow users to visualize reflection zones and choose appropriate receiver sampling intervals. gnssrefl supports the four major GNSS constellations and the most commonly-used GNSS data formats. Users are encouraged to make changes to the code at its public repository so that improvements can be shared with the community.