Sylphase SDGPS
The software-defined GPS(/GNSS) toolkit

NOTE: This SDGPS release only supports operation during the following range of dates: 2019-04-07 - 2038-11-21 This is due to the choice made in resolving the 1024-week ambiguity of the GPS L1 NAV WN field.

v0.22 (Jun 9 2021)

  • tee - Added new node that can be used to create "branches" off the main pipeline
    • Useful to run multiple solver nodes in parallel (e.g. kf2 and simple-pvt-solver)
  • listen-*-tcp - Fixed spurious assertion failure

v0.21 (Jun 8 2021)

  • main: Added --node-monitor for visualizing per-node CPU usage
  • plot-cooked2: Added Doppler acceleration plot
  • plot-observables: Added SV elevation plot

v0.20 (May 24 2021)

  • pretty-print node: Added --filter and --select options
  • set-antenna-position node: Newly added
  • UI enhancement: Status line is automatically truncated to terminal width to avoid artifacts
  • GPS_L2C GNSS: Added ionospheric model support
  • PPS subsystem refactoring
    • PPS-related algorithms are now entirely separate from hardware drivers, so all hardware now has full support for:
      • PPS capture into an Event stream
      • PPS output with output-pps and output-receiver-pps nodes
      • VCXO disciplining with generate-vcxo-waveform, gpsdo, pll-vcxo nodes
      • System time capture into a Time stream
    • Added new nodes for testing: mock-event-source, mock-pulse-output, pps-events-to-time-stream, print-time-at-event
  • RINEX support
    • observables-to-rinex
      • Carrier phase output support is now present and enabled by default
      • Export of GPS_L2C observables is now supported
    • rinex-to-observables: Progress is now displayed on status line
  • Plotting utilities
    • plot_client2 GUI will now default to synchronizing limits of all X axes with matching labels
    • plot-observables/plot-solution: Added support for input of an arbitrary reference trajectory; see new --reference-trajectory-* options
      • Appropriate reference trajectory (e.g. fixed, freefall) is auto-detected based on initial altitude
    • plot-solution: Added --frame option, supporting UVW (radial/in-track/cross-track) local coordinate system
      • Appropriate coordinate system is auto-detected based on initial altitude
    • plot-solution: Added RMS error annotation to plots and console output
    • plot-sensors node: Now plots Time and Event streams
    • plot-cooked2 node: Newly added
    • plot-observables node: Added "SV count" plot
    • PLOT_FILE now supports plotting from multiple nodes at once

Known issues:

  • On Genesys-ZU, 3rd LED from left ("Fix indication") is always unlit

v0.19 (Apr 27 2021)

  • acq: Added SDGPS_ACQ_THROTTLE_SVS environment variable override for threshold at which to reduce acquisition effort
    • Usage example: SDGPS_ACQ_THROTTLE_SVS=20 sdgps read-raw-file capture1.raw --rate inf ! sylphase-usbgpsimu2-offline ! tracker
    • Message printed: sylphase-usbgpsimu2-offline: acq: Threshold at which to reduce acquisition effort overridden from 8 to 20 by SDGPS_ACQ_THROTTLE_SVS environment variable.
  • plot-cooked2 node: Newly added
  • sylphase-usbgpsimu2-offline: Fixed CookedChecker: warning: more than half of max_stream_jitter utilized for async packet spam
  • sdgps main: added --log option

v0.18 (Apr 13 2021)

  • simulate-*: Added arguments to allow for randomly corrupting NAV bits for fuzz testing of decoders
  • static-kf2: Added --position-ecef argument for faster startup convergence when antenna position is known a priori

v0.17.2 (Mar 8 2021)

  • rinex-to-observables:
    • Handle missing C/N0 observable or SIGNAL STRENGTH UNIT header by assuming a constant 40 dB-Hz
    • Compute doppler from phase if D1C observable type is absent
    • Allow 2-letter observation codes in order to support RINEX 3.00/3.01 files

v0.17.1 (Mar 8 2021)

  • Added sdgps --version option, which outputs full SDGPS version (e.g. v0.17-0-gd73e2ecb) and exits
  • pretty-print-json-file: Added utility to make viewing JSON files easier
  • simulate-observables: Output ephemeris data so that simulate-observables ! observables-to-rinex works
  • rinex-to-observables: Be more lenient when parsing RINEX files and give better error messages
    • Immediately exit when opening a RINEX 2.xx file rather than trying to parse it as a RINEX 3.xx file
    • Accept all line endings; ignore whitespace at ends of lines; ignore blank lines; ignore unknown headers
  • bashrc: Added [sudo][gdb]sdgps aliases to allow for tab completion while running SDGPS with elevated permissions and/or under a debugger
  • statlog: Added "statlog" functionality for gathering and jointly logging parameters from multiple nodes
  • plot-raw: Rotate PSD spectrum so that it's centered on center of passband; draw LO and band edges as vertical lines
  • scripts/plot_sdgps: Added Python example of utilizing output of SDGPS's PLOT_FILE= plot-to-disk functionality
  • sylphase-usbgpsimu2: USB reliability improvements (expected to solve remaining issues with running SDGPS in a VM)
  • Bugfix: Fixed acquisition performance degrading after startup on all receivers (broken since v0.16)
  • Bugfix: observables-to-rinex: Fixed output filename being interpreted relative to SDGPS repository root rather than working directory

v0.17 (Feb 23 2021)

  • rinex-to-observables and observables-to-rinex nodes: newly added; preliminary support for RINEX import/export
  • generate-orbital-trajectory node: newly added
  • print-solution-eme2000 node: newly added
  • Bugfix: correctly handle GPS week number having rolled over

v0.16.1 (Feb 15 2021)

  • README: updated to remove obsolete commands
  • sylphase-usbgpsimu2: reduced USB transfer overhead
  • plot-raw: fixed divide-by-zero crash if packet with all-zero samples arrives
  • scripts/run_parallel_tests*: don't run more tests in parallel than there are CPU cores

v0.16 (Feb 8 2021)

  • static-kf2 node: newly added
  • plot-sensors node: newly added
  • plot-cooked node: newly added
  • plot-solution node: newly added
  • scripts/analyze_solution: removed, as it's been replaced by plot-solution
  • fake-gnss-outage node: newly added
  • decoder node: added --max-unconfirmed-time option
  • "config provider" infrastructure: newly added; see sdgps --help for config strings that can be provided to simulate-* nodes
  • Acquisition iteration count is now displayed in status line on all devices

v0.15 (Dec 17 2020)

  • Added new ImGui/ImPlot-based plot_client2, which replaces matplotlib-based plot_client
  • Updated magnetic model to WMM 2020
  • kf2 node: Fixed assertion failure on startup when used with new Infix-2 hardware
  • plot-observables node: Added --live option for real-time streaming plotting of observables
  • plot-raw node: Added --time, --histogram, and --tone options
  • sylphase-usbgpsimu2 nodes: Added --output-pps and --output-receiver-pps options
  • tracker node: When using --plot to plot live correlation waveforms, waveform is now sinc-interpolated

v0.14.2 (Oct 24 2020)

  • Fixes for Infix-2 support (namely, sensor axes not being rotated properly, VCXO voltage not being initialized properly)
  • Added --list-devices option to sylphase-usbgpsimu2 nodes

v0.14.1 (Oct 16 2020)

  • Fix udev rules on Ubuntu focal
  • Fix Python shebangs for Ubuntu focal

v0.14 (Oct 13 2020)

  • Include Infix-1/2 (sylphase-usbgpsimu2) support
  • uhd-tx node: output PPS signal on GPIO6
  • Ubuntu focal support added
  • main: added --timestamp option

v0.13 (Sep 6 2020)

  • Added --detrend argument to plot-observables
  • Cleaned up and commented the source of plot-observables

v0.12 (Sep 5 2020)

  • Changed plot_client dependency from GTK2 to GTK3 to fix plotting on Ubuntu Bionic
  • Updated doc/install_deps to include packages needed for plotting
  • Cleaned up

v0.11 (Sep 3 2020)

  • Initial version