SBF Field Decoding Reference¶
Every value stored in obs_ds and the sbf_obs metadata dataset is derived
from raw SBF integers through a well-defined transformation. This page documents
each formula with the source field type, the arithmetic applied, and the firmware
page reference.
All page references are to the Septentrio AsteRx SB3 ProBase Firmware v4.14.0 Reference Guide (abbreviated RefGuide-4.14.0) unless stated otherwise.
Epoch Timestamps¶
Source: MeasEpoch header — WNc (u2) + TOW (u4, milliseconds).
Source block: ReceiverTime (ΔLS), RefGuide-4.14.0 p.369.
GPS Time uses a fixed epoch and has no leap seconds; UTC is obtained by subtracting the current GPS–UTC offset ΔLS:
| Symbol | Meaning | Value |
|---|---|---|
| \(t_\text{GPS epoch}\) | GPS reference epoch | 1980-01-06 00:00:00 UTC |
| \(WN_c\) | Continuous GPS week number | from MeasEpoch.WNc |
| \(TOW\) | Time of Week | ms, from MeasEpoch.TOW |
| \(\Delta_\text{LS}\) | GPS − UTC leap-second offset | 18 s (valid from 2017-01-01; updated from ReceiverTime when present) |
Signal Number Decoding¶
Source: MeasEpochChannelType1.Type (u1) and ObsInfo (u1), p.262.
The 5 least-significant bits of Type carry a signal index:
If \(\text{SigIdxLo} = 31\) the signal number is extended via ObsInfo:
Otherwise \(\text{sig_num} = \text{SigIdxLo}\). The mapping from signal number to constellation / band / tracking code is defined in the signal type table (RefGuide-4.14.0 §4.1.10, p.256).
C/N₀ (SNR)¶
Source: MeasEpochChannelType1.CN0 (u1), p.264.
Dataset variable: SNR (units: dB-Hz).
The raw byte encodes carrier-to-noise density in two different scales depending on the signal type:
Signals 1 and 2 are tracked semi-codeless and have a lower intrinsic \(C/N_0\); the firmware omits the +10 dB offset and enforces a minimum of 1 dB‑Hz.
Do-Not-Use: raw value 255 → stored as NaN.
CN0HighRes correction (MeasExtra)¶
Source: MeasExtra.MeasExtraChannelSub.Misc bits 0–2 (u3), p.265.
When MeasExtra (Block 4000) is logged, the reader applies an additional
sub-quantisation correction that extends resolution from 0.25 dB to 1/32 dB:
If MeasExtra is absent the correction is zero (NaN guard prevents modification).
| Resolution | Source |
|---|---|
| 0.25 dB-Hz | MeasEpoch.CN0 alone |
| 0.03125 dB-Hz (1/32 dB-Hz) | after CN0HighRes correction |
Pseudorange¶
Source: MeasEpochChannelType1.Misc bits 0–3 (CodeMSB, u4-equivalent),
CodeLSB (u4), p.262.
where \(\text{CodeMSB} = \text{Misc} \;\&\; 0x0F\).
Do-Not-Use: CodeMSB = 0 and CodeLSB = 0 → NaN.
Type2 (slave signal) pseudorange¶
Source: MeasEpochChannelType2.OffsetsMSB bits 0–2 (CodeOffsetMSB,
3-bit two's-complement, range −4 to +3), CodeOffsetLSB (u2), p.264.
Do-Not-Use: CodeOffsetMSB = −4 and CodeOffsetLSB = 0 → NaN.
Doppler Shift¶
Source: MeasEpochChannelType1.Doppler (i4), p.263.
Positive Doppler indicates a closing range (approaching satellite).
Do-Not-Use: raw = −2 147 483 648 (\(= -2^{31}\), i4 minimum) → NaN.
Type2 (slave signal) Doppler¶
Source: MeasEpochChannelType2.OffsetsMSB bits 3–7 (DopplerOffsetMSB,
5-bit two's-complement, range −16 to +15), DopplerOffsetLSB (u2), p.264.
The Type2 Doppler includes a frequency-ratio correction to account for the different carrier frequency of the slave signal:
where \(f_1, f_2\) are the carrier frequencies of the Type1 (master) and Type2 (slave) signals respectively.
Do-Not-Use: DopplerOffsetMSB = −16 and DopplerOffsetLSB = 0 → NaN.
Carrier Phase¶
Source: MeasEpochChannelType1.CarrierMSB (i1), CarrierLSB (u2), p.263–264.
The carrier phase is encoded as a fractional offset relative to the pseudorange, expressed in cycles. Let \(\lambda = c / f\) be the carrier wavelength:
Do-Not-Use: CarrierMSB = −128 and CarrierLSB = 0 → NaN.
Type2 carrier phase¶
Uses \(PR_2\) (Type2 pseudorange, above) and the slave signal wavelength \(\lambda_2\).
GLONASS FDMA Carrier Frequencies¶
Source: ChannelStatus.ChannelSatInfo.FreqNr, RefGuide-4.14.0 §4.1.10 p.256 and
ChannelStatus Block 4013 p.393.
GLONASS uses Frequency Division Multiple Access (FDMA). The centre frequency depends on the frequency slot \(K = \text{FreqNr} - 8\).
FreqNr range differs by firmware version
RefGuide-4.14.0 allows slot range −7 to +13 (FreqNr 1–21). RefGuide-4.15.1 restricts this to −7 to +6 (FreqNr 1–14), matching the current GLONASS ICD allocation.
These frequencies are used as \(f\) in the carrier phase wavelength formula and as \(f_1, f_2\) in the Type2 Doppler formula.
GLONASS L3 CDMA (signal 12) has a fixed frequency of 1202.025 MHz and does not use this formula.
Satellite Geometry (SatVisibility → θ, φ)¶
Source: SatVisibility.SatInfo.Elevation (i2, scale 0.01 °/LSB),
Azimuth (u2, scale 0.01 °/LSB), RefGuide-4.14.0 p.400.
Polar angle θ¶
The SBF block stores elevation above the horizon. canvod-readers converts to
the polar angle (co-elevation) used in the Tau-Omega VOD formula:
| θ | Geometry |
|---|---|
| \(\theta = 0\) | satellite at zenith (directly overhead) |
| \(\theta = \pi/2\) | satellite at the horizon |
Azimuth φ¶
The stored azimuth is the geographic (compass) convention: 0 = North, π/2 = East,
measured clockwise. Both θ and φ are stored in radians as broadcast_theta
and broadcast_phi in the sbf_obs metadata dataset.
MeasExtra Signal-Quality Fields¶
All fields below are sourced from MeasExtra Block 4000,
MeasExtraChannelSub sub-block, p.265.
Multipath correction (pseudorange)¶
Raw field: i2. Add to the stored pseudorange to recover the unmitigated measurement before firmware multipath filtering.
Smoothing correction (pseudorange)¶
Raw field: i2. Add to the stored pseudorange to recover the raw unsmoothed measurement before Hatch-filter carrier smoothing.
Code tracking variance¶
Raw field: u2. Estimated noise variance of the code-phase measurement. Maximum representable value is 6.5534 m² (raw = 65534). Do-Not-Use: 65535 → NaN.
Carrier tracking variance¶
Raw field: u2, direct copy (scale = 1 mcycle²/LSB). Maximum 65534 mcycles². Do-Not-Use: 65535 → NaN.
The corresponding Doppler variance is:
where DopplerVarFactor (MeasExtra block header, p.264) is a per-epoch scale
factor that converts mcycles² to Hz².
Lock time¶
Raw field: u2. Duration of uninterrupted carrier phase tracking. Reset to 0 on reacquisition. Clipped to 65534 s. Do-Not-Use: 65535 → NaN.
Cumulative loss-of-continuity counter¶
Raw field: u1, direct copy. Increments at every reacquisition or cycle slip. A change \(\Delta N_\text{slip} \neq 0\) between consecutive epochs is a direct indicator of a carrier-phase discontinuity (cycle slip).
Carrier multipath correction¶
Raw field: i1, scale \(1/512\) cycles/LSB (\(\approx 1.953 \times 10^{-3}\) cycles/LSB). Add to the stored carrier phase to recover the unmitigated phase.
Auxiliary Scalar Fields¶
Fields stored with a simple scale or offset:
| Variable | Source block | Raw field | Formula | Unit |
|---|---|---|---|---|
pdop, hdop, vdop |
DOP (Block 4001), fallback PVTGeodetic | u2 | raw × 0.01 | 1 |
h_accuracy_m |
PVTGeodetic (Block 4007) HAccuracy |
u2 | raw × 0.01; DNU 65535 | m |
v_accuracy_m |
PVTGeodetic (Block 4007) VAccuracy |
u2 | raw × 0.01; DNU 65535 | m |
mean_corr_age_s |
PVTGeodetic (Block 4007) MeanCorrAge |
u2 | raw × 0.01 | s |
temperature_c |
ReceiverStatus (Block 4014) Temperature |
u1 | raw − 100; DNU 0 | °C |
Page references: DOP block p.349, PVTGeodetic pp.337–339, ReceiverStatus pp.396–399.
Summary: Non-trivial Transformations¶
| Observable | Non-trivial step |
|---|---|
| SNR | Signal-dependent formula (±10 dB offset); two-pass correction from MeasExtra |
| Pseudorange | 40-bit reconstruction from two fields (CodeMSB × 2³² + CodeLSB); Type2 adds delta |
| Carrier phase | Mixed-unit formula: pseudorange converted to cycles via λ = c/f, then phase delta added |
| Type2 Doppler | Frequency-ratio scale factor applied before adding delta |
| θ (polar angle) | Elevation → co-elevation (90° − elevation), then degrees → radians |
| φ (azimuth) | Scale 0.01°/LSB, degrees → radians |
| GLONASS frequencies | Slot-dependent FDMA formula required for λ and Type2 Doppler |
| Epoch | GPS week + TOW (ms) → UTC datetime via leap-second subtraction |
| CN0HighRes | Bit-field extraction (bits 0–2) then scale 1/32 dB-Hz/LSB |
| CarMPCorr | Integer division by 512 to convert i1 to fractional cycles |
References¶
- Septentrio AsteRx SB3 ProBase Firmware v4.14.0 Reference Guide
- Septentrio AsteRx SB3 ProBase Firmware v4.15.1 Reference Guide
- IS-GPS-200 Rev. N §20.3.3.5.2.4 — GPS time and leap seconds
- RINEX 3.04 signal nomenclature — used verbatim for SID code strings