Rhine River, Wesel, Germany

The data collected here is from a Raspberry Pi Reflector. Detailed instructions for RPR setup are provided here.

This RPR is operating next to the Rhine in Wesel, Germany. We collected NMEA data from 23 March 2020 to 20 August 2021 using upright-pointing antenna and since then with sideways-looking antenna facing the river (tilting the antenna 90° from the vertical direction toward the river). In this example we also show impact of antenna set-up orientation.


Station Name: WESL

Location: Wesel, Nordrhein-Westfalen, Germany

Archive: zenodo

Ellipsoidal Coordinates:

  • Latitude: 51.646144

  • Longitude: 6.606817

  • Height: 73.057 m

Google Map Link

Data Summary

Station WESL is located on WSV river gauge’s building next to the Rhine river in Wesel, Germany. It is operated by the University of Bonn, Institute of Geodesy and Geoinformation, APMG.

The RPR antenna is mounted about 13 m abover the water surface. SNR data on the L1 frequency every 1 second are collected for all GPS satellites.

1. Pick up RPR data

RPR data for period 2020-2022 are publically available from a zenodo archive. The data record is extended until June 2023 under a new data veraion.

Download all data (~ 1.7 GB, or 3.3 GB for the extended record):

wget https://zenodo.org/record/6828597/files/MakanAKaregar/RPRatWesel-NMEA.zip?download=1

or download only a few days data from here:


Create nmea and station directory:

mkdir -p $REFL_CODE/nmea/WESL

and then store RPR NMEA files in $REFL_CODE/nmea/WESL/yyyy/ where yyyy is the year number.

$REFL_CODE is an environmental variable to be used by gnssrefl.

2. Pick up an azimuth and elevation angle mask

Use either gnssrefl’s refl_zone command:

refl_zones WESL -lat 51.646144 -lon 6.606817 -el_height 73.057 -RH 13 -azim1 250 -azim2 330 -el_list 5 10 15 20

or try the reflection zone webapp with input parameters as:

  • Lat. 51.646144

  • Lon. 6.606817

  • EllipseHt. 73.057

  • Set Reflector Ht. Value 13

  • Elevation Angles 5,10,15,20,25

  • Azimuth Angles Start 250 End 330

Here is a KML map generated from refl_zone command:


3. Translate NMEA format to SNR-ready format

Now we should translate NMEA data to gnssrefl internal format (SNR-ready files) using gnssrefl’s nmea2snr command. Here is an example for a single-day translation (doy 231 of 2021 or Aug. 19, 2021).

nmea2snr WESL 2021 231 -lat 51.646144 -lon 6.606817 -height 73.057

to translate all data (from doy 114 of 2020 to doy 4 of 2022):

nmea2snr WESL 2020 114 -doy_end 4 -year_end 2022 -lat 51.646144 -lon 6.606817 -height 73.057 -risky True

The SNR files are stored in $REFL_CODE/yyyy/snr/WESL/

3. Test quality control parameters

With gnssrefl’squickLook you can visually examin various azimuth mask settings and quality control parameters.

quickLook WESL 2021 233 -h1 6 -h2 16

quickLook makes two plots:

1- Periodogram against reflector height for each 90 degree quadrant:


Since the RPR antenna is installed sideways facing the river (pointing toward west), it doesn’t record any reflection from the northeast and southeast directions (right upper and lower panels). There is a bridge to the south of the antenna which interferes with the reflected signals so reflection data recorded from the southwest (left lower panel) direction are noisy and not reliable. Left upper panel shows coherent peaks in periodogram of SNR data recorded from the northwest direction. The peaks correspond to a reflector height of around 11 meters. That means the water is ~ 11 meters below the RPR antenna. However, there are several satellite tracks with double peaks that might be related to the reflections from objects very close to the antenna. These double peaks can be removed after imposing a better elevation or azimuth mask.

2- Reflector height, peak2noise value and peak amplitude against azimuth:


These plots provide more details for quality control. Acceptable reflector heights are plotted in the top plot in blue. Gray points are the reflector heights do not pass quality control. Their corresponding peak to noise ratio plotted in the middle plot is smaller than a default value of 2.7. Reflector height retrievals for satellite tracks sweeping from the azimuth ~250 to ~330 degrees are acceptable. We often don’t set value smaller than 2.7 for the peak to noise ratio.

4. Define analysis inputs

Based on your finding from quickLook and the quality control parameters you can now set most of input parameters using gnssir_input command.

Key parameters to set:

The reflector height lower limit -h1 and the upper limit -h2.

Elevation -e1 and -e2 and azimuth -azlist mask. In our case we set 5≤ elevation angle ≤20 and 250≤ azimuth ≤330

List of GNSS constellations and frequencies -frlist. We set to 1 as we have only GPS L1 data.

gnssir_input WESL -lat 51.646144 -lon 6.606817 -height 73.057 -h1 6 -h2 16 -e1 5 -e2 20 -frlist 1 -azlist 250 330

5. Analyze data

Once an appropriate input parameters were set, reflector heights can be estimated using the gnssir command:

Here, we process a single day, doy 233 of 2021, setting plt option:

gnssir WESL 2021 233 -plt T


The daily analysis output files are stored in $REFL_CODE/yyyy/results/wesl

6. Processing and post-processing time series of reflector heights

We now process 3 months of data from doy 93 to doy 171 of 2023.

I maintain the daily archive of this RPR data at the University of Bonn’s cloud:

Download 2023 data and then store the NMEA files in $REFL_CODE/nmea/WESL/yyyy/

Translate NMEA format to SNR format:

nmea2snr WESL 2023 93 -doy_end 117 -lat 51.646144 -lon 6.606817 -height 73.057

and process the data:

gnssir WESL 2023 93 -doy_end 171

with daily_avg command, we can derive daily average of reflector height with plots, remove outliers and print daily average reflector height to a text file in $REFL_CODE/Files/wesl/wesl_dailyRH.txt. Note that this command should be used with caution when applying to fast-changing tidal river and sea level. At this site tides are absent.

Positional parameters to set in daily_avg:

medfilter is a tolerance (in meter) in which all residuals larger than this tolerance are removed.

ReqTracks is the minimum required number of satellite tracks for averaging.

These post-processing parameters are site specific. For example, historical river gauge data (2010–2021) for the Rhine near Wesel indicates the 95th percentile of day-to-day water-level variation amounts to 30 cm, thus we identify a reflector height as outlier when it differs from the median value of all reflector height (for each day) by more than 30 cm. The value for ReqTracks depends on azimuth mask.

daily_avg wesl 0.3 10

../_images/WESL_SubDaily.png ../_images/WESL_DailyAvg.png

All and daily mean of reflector heights are printed to wesl_allRH.txt and wesl_dailyRH.txt text files in $REFL_CODE/Files/wesl/, respectively.

7. Comparison with river gauge and accuracy assessment

There is a river gauge collocated with the RPR at this site. Unfortunately, only the last 30 days of data can be downloaded from WSV database. If you need historical data please email me at: karegar@uni-bonn.de

I processed all available data from 2020 to 2022 adopting the analyzing strategy we went through together. I interpolate the river gauge 15-min measurements to the times of the RPR water level estimates. The differences between two sub-daily water level and daily water level are shown in plots (a) and (b), respectively.

The quality of RPR sub-daily water level data is significantly improved by forming daily mean as daily averaging filters out random sources of error. The RMS of differences between two water level data reduces from 7.6 cm (sub-daily) to 6 cm (daily).

The Rhine experienced winter flooding period in mid-February followed by heavy rainfall and then exceptional flood event in summer 2021 (9–16 July). The heavy rainfall in July 2021 led to severe flooding in Western Europe including the Rhine river.

Water level fluctuations during annual flooding can be substantial and reach levels of 8 m, which causes overbank flooding. This is a site photo I took in March 2020 during an annual flood.

The vertical red dash line in plots (a) and (b) is Aug. 20, 2023 (doy 232) of RPR antenna orientation change from upright to sideways.

8. Impact of antenna set-up orientation

Geodetic antennas are always set in zenith direction but the flexibility of low-cost sensor is the ability to customize the antenna orientation so you can rotated the antenna towards the water body to get strong reflection. I tested the impact of antenna orientation by tilting the antenna 90° from the vertical direction toward the river. The plot below shows that the interference patterns in SNR from the sideways antenna are more distinct, with less noise and larger oscillation amplitudes than data from the zenith-pointing antenna. The increased amplitude is related to the gain pattern that is now applied by the antenna toward the surface of river and the reduced noise is from the mitigation of cross channel interference when fewer satellites are tracked.

The RMS of sub-daily residuals reduces from 7.6 to 3 cm for the time spans before and after the antenna orientation change, respectively. For daily residuals, the RMS decreases from 6 to 1.5 cm

So when set your RPR antenna, tilt it always toward the river.

Prepared by Makan Karegar. Last updated June 30, 2023.