Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ authors = ["Soeren Schoenbrod <soeren.schoenbrod@nav.rwth-aachen.de>", "Michael
AstroTime = "c61b5328-d09d-5e37-a9a8-0eb41c39009c"
CoordinateTransformations = "150eb455-5306-5404-9cee-2592286d6298"
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
Dictionaries = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4"
DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
GNSSDecoder = "bf6b1ec8-12ad-4501-972c-3dec0d675c2b"
GNSSSignals = "52c80523-2a4e-5c38-8979-05588f836870"
Geodesy = "0ef565a4-170c-5f04-8de2-149903a85f3d"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
LsqFit = "2fda8390-95c7-5789-9bda-21331edee243"
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"

[weakdeps]
Expand All @@ -24,23 +24,23 @@ Tracking = "10b2438b-ffd4-5096-aa58-44041d5c8f3b"
PositionVelocityTimeTrackingExt = "Tracking"

[compat]
Acquisition = "2"
Acquisition = "2.6"
Aqua = "0.8"
AstroTime = "0.7"
CodecZlib = "0.7"
CoordinateTransformations = "0.6"
Dates = "1"
Dictionaries = "0.4"
DocStringExtensions = "0.6, 0.7, 0.8, 0.9"
Downloads = "1"
GNSSDecoder = "2"
GNSSSignals = "2"
GNSSDecoder = "3.6"
GNSSSignals = "3.3"
Geodesy = "0.5, 1.0"
LinearAlgebra = "1"
LsqFit = "0.12, 0.13, 0.14, 0.15, 0.16"
StaticArrays = "1"
Statistics = "1"
Test = "1"
Tracking = "2"
Tracking = "2.2"
Unitful = "1"
julia = "1.10"

Expand Down
1,423 changes: 11 additions & 1,412 deletions benchmark/fixtures.jl

Large diffs are not rendered by default.

24 changes: 17 additions & 7 deletions docs/src/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
```@docs
SatelliteState
PVTSolution
SatInfo
```

## PVT Computation
Expand Down Expand Up @@ -38,17 +39,26 @@ PositionVelocityTime._elevation_azimuth

## Dilution of Precision

The DOP values are read from the `dop` field of a [`PVTSolution`](@ref), e.g.
`pvt.dop.GDOP`.

```@docs
get_gdop
get_pdop
get_hdop
get_vdop
get_tdop
PositionVelocityTime.DOP
```

## Utilities

```@docs
get_num_used_sats
get_frequency_offset
get_sat_info
```

## Multi-GNSS Classification

When [`calc_pvt`](@ref) combines constellations and bands it classifies each satellite by
three keys, all provided by GNSSSignals (3.3+) and read from a satellite's ranging signal:
`GNSSSignals.get_time_system` (a `GNSSSignals.TimeSystem`, i.e. `GPST()`/`GST()`) drives
receiver-clock grouping (one bias per time system); `GNSSSignals.get_band_id` (e.g. `:L1`,
`:L5`) drives inter-frequency-bias grouping (one bias per band); and
`GNSSSignals.get_signal_id` (e.g. `:GPSL1CA`) is the per-signal identity used in the `sats`
key of [`PVTSolution`](@ref). This package forwards each of the latter two to a
[`SatelliteState`](@ref).
15 changes: 13 additions & 2 deletions docs/src/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,14 @@ Calculates position, velocity, and time from GNSS satellite measurements.
## Features

- Estimation of user position, velocity, and time
- Satellite position and velocity calculation from orbital parameters
- Satellite position and velocity calculation from orbital parameters (LNAV and
CNAV/CNAV-2 quasi-Keplerian ephemerides)
- Dilution of Precision (DOP) computation
- Support for GPS L1 and Galileo E1B
- Support for GPS (L1 C/A, L2C, L5, L1C) and Galileo (E1B, E5a), including combined
multi-GNSS solutions. Each measurement is one satellite-band pseudorange; the
group-delay/ISC correction is selected by the signal the range was generated on
(which may be a pilot such as GPS L1C-P or Galileo E1C), while the ephemeris and
clock come from the band's data-component decoder.

## Installation

Expand Down Expand Up @@ -46,3 +51,9 @@ With at least 4 satellite states, compute the PVT solution:
pvt = calc_pvt(sat_states)
lla = get_LLA(pvt) # latitude, longitude, altitude
```

Satellites from different constellations may be passed together. Because each GNSS
references its broadcasts to its own system time, [`calc_pvt`](@ref) estimates one
receiver clock bias per GNSS time system, so a combined fix needs at least `3 + M`
satellites for `M` distinct systems. The per-system clock offsets are reported as
`pvt.inter_system_biases` relative to `pvt.reference_system`.
7 changes: 1 addition & 6 deletions ext/PositionVelocityTimeTrackingExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,10 @@ using GNSSDecoder: GNSSDecoderState
using GNSSSignals: AbstractGNSSSignal
using Tracking: Tracking, get_code_phase, get_carrier_doppler, get_carrier_phase

# The name of the per-satellite tracking state changed between Tracking major versions:
# `SatState` up to Tracking 1, `TrackedSat` from Tracking 2 on. Bind to whichever exists so
# the extension supports both.
const TrackingSatState = isdefined(Tracking, :TrackedSat) ? Tracking.TrackedSat : Tracking.SatState

function PositionVelocityTime.SatelliteState(
decoder::GNSSDecoderState,
system::AbstractGNSSSignal,
sat_state::TrackingSatState,
sat_state::Tracking.TrackedSat,
)
SatelliteState(
decoder,
Expand Down
Loading
Loading