Implement Galileo E1B I/NAV navigation decoding
This commit is contained in:
@@ -11,6 +11,11 @@ build/
|
||||
*.hex
|
||||
e1_synthetic.c128
|
||||
|
||||
# Compact, decoder-only navigation evidence is intentionally versioned. The
|
||||
# much larger RF sample vectors remain ignored by the generic *.bin rule.
|
||||
!verification/navigation/**/*.bin
|
||||
!verification/navigation/**/*.npz
|
||||
|
||||
# External simulator checkout discovered locally; rebuild/integration scripts
|
||||
# consume it by path, but it is maintained as a separate Git repository.
|
||||
/signalsim/
|
||||
|
||||
@@ -37,6 +37,8 @@ complex IQ; both acquisition and tracking pass on its IQ8 output. See the
|
||||
noise, and interference are future channel-model plug-ins.
|
||||
- Combined E1B/E1C tracking is represented by separate manager channels; a
|
||||
weighted combining policy is intentionally not assumed.
|
||||
- E1B I/NAV word types 1–6 are decoded from tracked RF prompts. Almanac parsing,
|
||||
OSNMA authentication, and PVT are deliberately not implemented yet.
|
||||
|
||||
## Install and test
|
||||
|
||||
@@ -63,6 +65,10 @@ python -m galileo_rx.cli track --config configs/tracking_example.yaml --input sa
|
||||
python -m galileo_rx.cli run --config configs/acquisition_example.yaml --input samples.bin
|
||||
python -m galileo_rx.cli compare-fixed --config configs/acquisition_example.yaml --input samples.bin
|
||||
python -m galileo_rx.cli validate-signalsim --signalsim-path signalsim/SignalSim --config configs/signalsim_validation.yaml --output-dir reports/signalsim_validation
|
||||
python -m galileo_rx.cli collect-navigation --config configs/navigation_collection.yaml --output-dir reports/navigation_run
|
||||
python -m galileo_rx.cli prompts-to-symbols --input verification/navigation/signalsim_navigation_multisat/prn_01/prompt_epochs.npz --prn 1 --output-dir reports/navigation_replay/prn_01
|
||||
python -m galileo_rx.cli decode-inav --input verification/navigation/signalsim_navigation_multisat/prn_01/prompt_epochs.npz --prn 1 --output-dir reports/navigation_replay/prn_01
|
||||
python -m galileo_rx.cli inspect-navigation --input verification/navigation/signalsim_navigation_multisat/prn_01
|
||||
```
|
||||
|
||||
The CLI uses synthetic codes by design. Replace the provider with
|
||||
@@ -113,6 +119,28 @@ module-level contract is duplicated close to the code in
|
||||
Exact phase-gate test and example commands are recorded in
|
||||
[development_phases.md](docs/development_phases.md).
|
||||
|
||||
## E1B navigation decoding
|
||||
|
||||
The I/NAV pipeline preserves 4 ms Prompt I/Q epochs and their sample timestamps,
|
||||
recovers confidence-bearing symbols, resolves page polarity explicitly, applies
|
||||
the official 30×8 deinterleaver and soft Viterbi decoder, validates CRC-24Q, and
|
||||
parses typed word 1–6 data. Ephemerides are committed atomically only when words
|
||||
1–4 have matching IODnav; the previous valid set survives incomplete updates.
|
||||
|
||||
The measured 32.2 s SignalSim regression decoded 70/70 CRC-valid pages. Four of
|
||||
five tracked satellites produced complete ephemerides, clocks, healthy status,
|
||||
and GST; PRN 19 correctly remained incomplete because word 1 was outside the
|
||||
observation. Post-decode comparison against SignalSim's RINEX source passed at
|
||||
the broadcast quantization resolution. No simulator truth is accepted by the
|
||||
normal decoder API.
|
||||
|
||||
See [ICD mapping](docs/inav_icd_mapping.md), the
|
||||
[hardware/software partition](docs/navigation_hardware_software_partition.md),
|
||||
the [collection report](reports/navigation_run/inav_collection_report.md), and
|
||||
the [readiness gate](reports/navigation_readiness_review.md). Saved artifacts
|
||||
under `verification/navigation/` can replay navigation decoding without RF
|
||||
acquisition or tracking.
|
||||
|
||||
## Phase completion record
|
||||
|
||||
1. Profiles, typed configuration, code providers, BOC, generator, and I/O.
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
signalsim:
|
||||
path: signalsim/SignalSim
|
||||
vector: navigation_multisat
|
||||
samples: verification/vectors/signalsim/navigation_multisat/navigation_multisat_iq8.bin
|
||||
sample_format: IQ8
|
||||
|
||||
rf:
|
||||
sampling_frequency_hz: 4092000.0
|
||||
intermediate_frequency_hz: 1023000.0
|
||||
|
||||
satellites:
|
||||
prns: [1, 4, 19, 21, 27]
|
||||
expected_doppler_hz:
|
||||
1: 1828.0
|
||||
4: 2171.0
|
||||
19: -367.0
|
||||
21: -712.0
|
||||
27: -2637.0
|
||||
|
||||
acquisition:
|
||||
doppler_min_hz: -4000.0
|
||||
doppler_max_hz: 3000.0
|
||||
doppler_step_hz: 250.0
|
||||
coherent_integration_ms: 4.0
|
||||
noncoherent_accumulations: 5
|
||||
detection_threshold: 2.5
|
||||
zero_padding_mode: none
|
||||
|
||||
tracking:
|
||||
integration_ms: 2.0
|
||||
pull_in_duration_ms: 300.0
|
||||
pll_noise_bandwidth_hz: 10.0
|
||||
fll_noise_bandwidth_hz: 20.0
|
||||
dll_noise_bandwidth_hz: 1.0
|
||||
minimum_confidence: 0.1
|
||||
|
||||
navigation:
|
||||
icd: Galileo OS SIS ICD Issue 2.2, November 2025
|
||||
minimum_satellites: 4
|
||||
page_sync_confirmations: 2
|
||||
maximum_sync_errors: 0
|
||||
viterbi_traceback_depth: 35
|
||||
require_time: true
|
||||
require_healthy: true
|
||||
@@ -48,3 +48,20 @@ python -m galileo_rx.cli track --config configs/tracking_example.yaml --input sa
|
||||
python -m galileo_rx.cli run --config configs/acquisition_example.yaml --input samples.bin
|
||||
python -m galileo_rx.cli compare-fixed --config configs/acquisition_example.yaml --input samples.bin
|
||||
```
|
||||
|
||||
## E1B I/NAV pre-PVT gate
|
||||
|
||||
```bash
|
||||
python tools/generate_signalsim_vectors.py --signalsim-path signalsim/SignalSim --vector navigation_multisat --project-root .
|
||||
python -m galileo_rx.cli collect-navigation --config configs/navigation_collection.yaml --output-dir reports/navigation_run --require-ready
|
||||
python -m galileo_rx.cli prompts-to-symbols --input verification/navigation/signalsim_navigation_multisat/prn_01/prompt_epochs.npz --prn 1 --output-dir reports/navigation_replay/prn_01
|
||||
python -m galileo_rx.cli decode-inav --input verification/navigation/signalsim_navigation_multisat/prn_01/prompt_epochs.npz --prn 1 --output-dir reports/navigation_replay/prn_01
|
||||
python -m galileo_rx.cli inspect-navigation --input reports/navigation_replay/prn_01
|
||||
python -m galileo_rx.cli compare-inav-truth --artifact-root verification/navigation/signalsim_navigation_multisat --rinex signalsim/SignalSim/EphData/BRDC00IGS_R_20211700000_01D_MN.rnx --collection-report reports/navigation_run/inav_collection_report.json --signalsim-config verification/vectors/signalsim/navigation_multisat/generated_config.json --output-dir reports
|
||||
MPLBACKEND=Agg python -m pytest tests/navigation tests/integration/test_signalsim_inav_symbols.py tests/integration/test_signalsim_inav_pages.py tests/integration/test_signalsim_inav_ephemeris.py tests/integration/test_multisat_navigation_collection.py
|
||||
MPLBACKEND=Agg python -m pytest
|
||||
```
|
||||
|
||||
The RF `.bin` vector is regenerated locally and remains ignored; its committed
|
||||
configuration, metadata, SHA-256 tag, log, and compact prompt-to-ephemeris
|
||||
artifacts make the gate reproducible without checking in hundreds of megabytes.
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
# Galileo I/NAV ICD source mapping
|
||||
|
||||
The sole normative source for this decoder is **European Union, Galileo Open
|
||||
Service Signal-in-Space Interface Control Document, Issue 2.2, November 2025**.
|
||||
The implementation does not infer layouts from SignalSim. SignalSim is an RF
|
||||
stimulus and an independent post-decode truth source only.
|
||||
|
||||
Bit positions below are zero-based, MSB-first positions in the reconstructed
|
||||
128-bit nominal I/NAV word. ICD table positions are one-based on-air order.
|
||||
Signed values use two's complement. A scale written `2^-n*pi` converts an ICD
|
||||
semi-circle value to radians.
|
||||
|
||||
## Channel coding and page construction
|
||||
|
||||
| Implementation | ICD reference | Implemented definition |
|
||||
| --- | --- | --- |
|
||||
| E1-B symbol rate | §3.4.2 and Table 3 | 250 symbols/s; one symbol spans one 4 ms primary-code epoch |
|
||||
| Page-part layout | §4.3.2 and Table 37 | 10 uncoded sync symbols followed by 240 interleaved FEC symbols; one second total |
|
||||
| Synchronization | §4.3.2.1 | `0101100000`; repeated boundaries 250 symbols apart are required |
|
||||
| Nominal page | §4.3.2.3 and Table 38 | Sequential even/odd one-second page parts form one 2-second vertical E1-B page |
|
||||
| Tail | §4.3.2.2 and Table 38 | Six zero tail bits terminate each 120-bit page part |
|
||||
| Convolutional FEC | §4.1.4.1, Figure 13, Table 26 | Rate 1/2, K=7, G1=171 octal, G2=133 octal, second encoder output inverted |
|
||||
| Interleaver | §4.1.4.2 and Table 27 | 30 columns × 8 rows; write by column and read by row; decoder applies the reverse permutation |
|
||||
| Independent coded vector | Annex D.2 | Exact ICD I/NAV encoded and interleaved page-part vector is used by unit tests |
|
||||
| CRC | §5.1.9.4, Equations 25–26 | 24-bit CRC, generator `0x1864CFB`, zero initial remainder, MSB-first protected bits |
|
||||
| CRC coverage | §4.3.2.3 and Table 38 | Even/odd, page type, both data parts, OSNMA, SAR and spare; sync, SSP and tails excluded |
|
||||
|
||||
`InavPageDecoder` reconstructs the 128-bit data word from even bits 2–113 and
|
||||
odd bits 2–17. CRC is evaluated over even bits 0–113 and odd bits 0–81, against
|
||||
odd bits 82–105, exactly matching the E1-B vertical-page allocation in Table 38.
|
||||
|
||||
## Critical word layouts and scales
|
||||
|
||||
| Word | Field | Word bit range | Width | Signed | Scale | Unit | ICD allocation | ICD definition |
|
||||
| ---: | --- | ---: | ---: | :---: | ---: | --- | --- | --- |
|
||||
| 1 | Type | 0–5 | 6 | No | 1 | — | Table 42 | §4.3.5 |
|
||||
| 1 | IODnav | 6–15 | 10 | No | 1 | — | Table 42 | §5.1.8.1 |
|
||||
| 1 | t0e | 16–29 | 14 | No | 60 | s | Table 42 | Table 67 |
|
||||
| 1 | M0 | 30–61 | 32 | Yes | 2^-31*pi | rad | Table 42 | Table 67 |
|
||||
| 1 | e | 62–93 | 32 | No | 2^-33 | — | Table 42 | Table 67 |
|
||||
| 1 | sqrt(A) | 94–125 | 32 | No | 2^-19 | m^1/2 | Table 42 | Table 67 |
|
||||
| 2 | IODnav | 6–15 | 10 | No | 1 | — | Table 43 | §5.1.8.1 |
|
||||
| 2 | Omega0 | 16–47 | 32 | Yes | 2^-31*pi | rad | Table 43 | Table 67 |
|
||||
| 2 | i0 | 48–79 | 32 | Yes | 2^-31*pi | rad | Table 43 | Table 67 |
|
||||
| 2 | omega | 80–111 | 32 | Yes | 2^-31*pi | rad | Table 43 | Table 67 |
|
||||
| 2 | i-dot | 112–125 | 14 | Yes | 2^-43*pi | rad/s | Table 43 | Table 67 |
|
||||
| 3 | IODnav | 6–15 | 10 | No | 1 | — | Table 44 | §5.1.8.1 |
|
||||
| 3 | Omega-dot | 16–39 | 24 | Yes | 2^-43*pi | rad/s | Table 44 | Table 67 |
|
||||
| 3 | Delta-n | 40–55 | 16 | Yes | 2^-43*pi | rad/s | Table 44 | Table 67 |
|
||||
| 3 | Cuc | 56–71 | 16 | Yes | 2^-29 | rad | Table 44 | Table 67 |
|
||||
| 3 | Cus | 72–87 | 16 | Yes | 2^-29 | rad | Table 44 | Table 67 |
|
||||
| 3 | Crc | 88–103 | 16 | Yes | 2^-5 | m | Table 44 | Table 67 |
|
||||
| 3 | Crs | 104–119 | 16 | Yes | 2^-5 | m | Table 44 | Table 67 |
|
||||
| 3 | SISA(E1,E5b) | 120–127 | 8 | No | index | — | Table 44 | §5.1.11.1 |
|
||||
| 4 | IODnav | 6–15 | 10 | No | 1 | — | Table 45 | §5.1.8.1 |
|
||||
| 4 | SVID | 16–21 | 6 | No | 1 | — | Table 45 | §5.1.8.2 |
|
||||
| 4 | Cic | 22–37 | 16 | Yes | 2^-29 | rad | Table 45 | Table 67 |
|
||||
| 4 | Cis | 38–53 | 16 | Yes | 2^-29 | rad | Table 45 | Table 67 |
|
||||
| 4 | t0c | 54–67 | 14 | No | 60 | s | Table 45 | Table 70 |
|
||||
| 4 | af0 | 68–98 | 31 | Yes | 2^-34 | s | Table 45 | Table 70 |
|
||||
| 4 | af1 | 99–119 | 21 | Yes | 2^-46 | s/s | Table 45 | Table 70 |
|
||||
| 4 | af2 | 120–125 | 6 | Yes | 2^-59 | s/s^2 | Table 45 | Table 70 |
|
||||
| 5 | ai0 | 6–16 | 11 | No | 2^-2 | sfu | Table 46 | Table 74 |
|
||||
| 5 | ai1 | 17–27 | 11 | Yes | 2^-8 | sfu/degree | Table 46 | Table 74 |
|
||||
| 5 | ai2 | 28–41 | 14 | Yes | 2^-15 | sfu/degree^2 | Table 46 | Table 74 |
|
||||
| 5 | Disturbance flags 1–5 | 42–46 | 5 | No | Boolean | — | Table 46 | Table 74 |
|
||||
| 5 | BGD(E1,E5a) | 47–56 | 10 | Yes | 2^-32 | s | Table 46 | Table 72 |
|
||||
| 5 | BGD(E1,E5b) | 57–66 | 10 | Yes | 2^-32 | s | Table 46 | Table 72 |
|
||||
| 5 | E5b/E1B health | 67–70 | 2+2 | No | status | — | Table 46 | Table 84 |
|
||||
| 5 | E5b/E1B DVS | 71–72 | 1+1 | No | status | — | Table 46 | §5.1.10 |
|
||||
| 5 | GST week | 73–84 | 12 | No | 1 | week | Table 46 | Table 69 |
|
||||
| 5 | GST TOW | 85–104 | 20 | No | 1 | s | Table 46 | Table 69 |
|
||||
| 6 | A0 | 6–37 | 32 | Yes | 2^-30 | s | Table 47 | Table 75 |
|
||||
| 6 | A1 | 38–61 | 24 | Yes | 2^-50 | s/s | Table 47 | Table 75 |
|
||||
| 6 | Delta-tLS | 62–69 | 8 | Yes | 1 | s | Table 47 | Table 75 |
|
||||
| 6 | t0t | 70–77 | 8 | No | 3600 | s | Table 47 | Table 75 |
|
||||
| 6 | WN0t | 78–85 | 8 | No | 1 | week modulo 256 | Table 47 | Table 75 |
|
||||
| 6 | WNLSF | 86–93 | 8 | No | 1 | week modulo 256 | Table 47 | Table 75 |
|
||||
| 6 | DN | 94–96 | 3 | No | 1 | day | Table 47 | Table 75 |
|
||||
| 6 | Delta-tLSF | 97–104 | 8 | Yes | 1 | s | Table 47 | Table 75 |
|
||||
| 6 | TOW | 105–124 | 20 | No | 1 | s | Table 47 | Table 69 |
|
||||
|
||||
## Implemented support boundary
|
||||
|
||||
Word types 1–6 are parsed into typed dataclasses. They provide the complete
|
||||
four-word ephemeris, satellite clock polynomial, BGD, E1B health/DVS, GST,
|
||||
ionosphere coefficients and GST–UTC parameters required by the pre-PVT gate.
|
||||
Almanac words and OSNMA authentication are intentionally outside this milestone.
|
||||
Unsupported word types remain preserved as CRC-valid raw page evidence and do
|
||||
not update the active navigation database.
|
||||
@@ -0,0 +1,57 @@
|
||||
# Navigation hardware/software partition
|
||||
|
||||
The measured partition keeps sample-rate work in the tracking IP and performs
|
||||
I/NAV decoding in software. No result in this milestone justifies placing a
|
||||
soft-decision Viterbi decoder or navigation database in RTL.
|
||||
|
||||
## Tracking-IP output contract
|
||||
|
||||
One record is emitted for every 4 ms E1B primary-code epoch:
|
||||
|
||||
| Field | Proposed representation | Meaning |
|
||||
| --- | --- | --- |
|
||||
| PRN/channel | unsigned integer | Logical satellite and component |
|
||||
| start/end timestamp | 64-bit sample counters | Continuous receiver time association |
|
||||
| Prompt I/Q | signed fixed-point accumulators | Unreduced coherent evidence |
|
||||
| carrier phase/frequency | NCO state/measurement words | Reprocessing and phase diagnostics |
|
||||
| code phase | unsigned fixed-point chips | Code-time association |
|
||||
| C/N0 | fixed-point dB-Hz or invalid | Monitoring only |
|
||||
| carrier/code lock | bits | Decoder validity gate |
|
||||
| cycle slip/discontinuity | bits | Immediate symbol/page synchronizer reset |
|
||||
| valid | bit | Transaction validity |
|
||||
|
||||
The interface should use an AXI-Stream-like `valid/ready` transaction. A FIFO
|
||||
must absorb software service latency; backpressure cannot be allowed to stop the
|
||||
sample-rate tracking datapath. At 250 records/s/channel, even 36 active E1B
|
||||
channels produce only 9000 records/s, so a memory-mapped DMA ring is sufficient.
|
||||
|
||||
## Software decoder
|
||||
|
||||
Software retains floating `numpy.float64` prompt/soft values in the reference
|
||||
model and performs:
|
||||
|
||||
```text
|
||||
prompt axis and symbol synchronization
|
||||
-> page synchronization and polarity resolution
|
||||
-> 30x8 deinterleaving
|
||||
-> soft Viterbi decode
|
||||
-> vertical-page assembly and CRC-24Q
|
||||
-> typed word parsing
|
||||
-> atomic IODnav ephemeris assembly
|
||||
-> GST/clock/health navigation database
|
||||
```
|
||||
|
||||
This split keeps policy-rich, low-rate state machines inspectable and updateable.
|
||||
The saved `prompt_epochs.npz` files are the exact boundary between future RTL
|
||||
tracking and the software decoder. HDL verification shall replay the same RF
|
||||
vector, compare each tracking epoch with the bit-true model, then feed the RTL
|
||||
prompt records into this decoder without SignalSim truth.
|
||||
|
||||
## Conditions that could justify later hardware offload
|
||||
|
||||
Only measured CPU load, power, or startup-latency failure should trigger an
|
||||
offload study. Plausible granular offloads are symbol accumulate-and-dump,
|
||||
deinterleaver address generation, or a shared Viterbi accelerator. CRC, word
|
||||
parsing, ephemeris consistency, time rollover handling, and the navigation store
|
||||
remain better software candidates because their throughput is negligible and
|
||||
their standards/policy behavior is state-rich.
|
||||
@@ -0,0 +1,211 @@
|
||||
{
|
||||
"decoder_truth_inputs": [],
|
||||
"icd": "Galileo OS SIS ICD Issue 2.2, November 2025",
|
||||
"signalsim_commit": "80b262113e77c4482ca9f5cbfef9bcada402ed28",
|
||||
"sample_file": "/home/onur/Desktop/galileo/verification/vectors/signalsim/navigation_multisat/navigation_multisat_iq8.bin",
|
||||
"sample_sha256": "b38393b32eec2df53f9813ea7ff8f13e5e0fc72fa5cb7fb910a2b8f907a56a6e",
|
||||
"sample_count": 131758308,
|
||||
"sampling_frequency_hz": 4092000.0,
|
||||
"intermediate_frequency_hz": 1023000.0,
|
||||
"satellites": {
|
||||
"1": {
|
||||
"prn": 1,
|
||||
"acquisition_detected": true,
|
||||
"acquisition_time_s": 0.1004119270000956,
|
||||
"raw_doppler_hz": 1750.0,
|
||||
"expected_doppler_hz": 1828.0,
|
||||
"start_sample_timestamp": 90995,
|
||||
"tracking_epoch_count": 16088,
|
||||
"tracking_time_s": 13.650105177999649,
|
||||
"tracking_final_state": "PLL_TRACK",
|
||||
"tracking_reacquisition_requests": 10,
|
||||
"tracking_lock_timestamp": 107363,
|
||||
"prompt_epoch_count": 8044,
|
||||
"first_synchronized_symbol_timestamp": 4428515,
|
||||
"first_page_sync_timestamp": 4428515,
|
||||
"first_crc_valid_page_timestamp": 4428515,
|
||||
"page_parts": 31,
|
||||
"pages": 15,
|
||||
"crc_passes": 15,
|
||||
"crc_failures": 0,
|
||||
"fec_failures": 0,
|
||||
"received_word_types": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"missing_ephemeris_word_types": [],
|
||||
"complete_ephemeris": true,
|
||||
"ephemeris_iod_nav": 29,
|
||||
"first_complete_ephemeris_timestamp": 61716515,
|
||||
"clock_parameters": true,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"decoding_time_s": 1.260811995001859
|
||||
},
|
||||
"4": {
|
||||
"prn": 4,
|
||||
"acquisition_detected": true,
|
||||
"acquisition_time_s": 0.08580062900000485,
|
||||
"raw_doppler_hz": 2250.0,
|
||||
"expected_doppler_hz": 2171.0,
|
||||
"start_sample_timestamp": 86819,
|
||||
"tracking_epoch_count": 16088,
|
||||
"tracking_time_s": 13.877967087995785,
|
||||
"tracking_final_state": "PLL_TRACK",
|
||||
"tracking_reacquisition_requests": 61,
|
||||
"tracking_lock_timestamp": 103187,
|
||||
"prompt_epoch_count": 8044,
|
||||
"first_synchronized_symbol_timestamp": 12624707,
|
||||
"first_page_sync_timestamp": 12624707,
|
||||
"first_crc_valid_page_timestamp": 12624707,
|
||||
"page_parts": 29,
|
||||
"pages": 14,
|
||||
"crc_passes": 14,
|
||||
"crc_failures": 0,
|
||||
"fec_failures": 0,
|
||||
"received_word_types": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"missing_ephemeris_word_types": [],
|
||||
"complete_ephemeris": true,
|
||||
"ephemeris_iod_nav": 30,
|
||||
"first_complete_ephemeris_timestamp": 61728707,
|
||||
"clock_parameters": true,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"decoding_time_s": 1.3411525530027575
|
||||
},
|
||||
"19": {
|
||||
"prn": 19,
|
||||
"acquisition_detected": true,
|
||||
"acquisition_time_s": 0.0836479790013982,
|
||||
"raw_doppler_hz": -250.0,
|
||||
"expected_doppler_hz": -367.0,
|
||||
"start_sample_timestamp": 87566,
|
||||
"tracking_epoch_count": 16088,
|
||||
"tracking_time_s": 13.9836710640011,
|
||||
"tracking_final_state": "PLL_TRACK",
|
||||
"tracking_reacquisition_requests": 406,
|
||||
"tracking_lock_timestamp": 103934,
|
||||
"prompt_epoch_count": 8044,
|
||||
"first_synchronized_symbol_timestamp": 16684718,
|
||||
"first_page_sync_timestamp": 16684718,
|
||||
"first_crc_valid_page_timestamp": 20776718,
|
||||
"page_parts": 28,
|
||||
"pages": 13,
|
||||
"crc_passes": 13,
|
||||
"crc_failures": 0,
|
||||
"fec_failures": 0,
|
||||
"received_word_types": [
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"missing_ephemeris_word_types": [
|
||||
1
|
||||
],
|
||||
"complete_ephemeris": false,
|
||||
"ephemeris_iod_nav": null,
|
||||
"first_complete_ephemeris_timestamp": null,
|
||||
"clock_parameters": true,
|
||||
"health_valid": false,
|
||||
"data_valid": false,
|
||||
"decoding_time_s": 1.2081766550036264
|
||||
},
|
||||
"21": {
|
||||
"prn": 21,
|
||||
"acquisition_detected": true,
|
||||
"acquisition_time_s": 0.08741291100159287,
|
||||
"raw_doppler_hz": -750.0,
|
||||
"expected_doppler_hz": -712.0,
|
||||
"start_sample_timestamp": 93628,
|
||||
"tracking_epoch_count": 16088,
|
||||
"tracking_time_s": 13.982213923998643,
|
||||
"tracking_final_state": "PLL_TRACK",
|
||||
"tracking_reacquisition_requests": 259,
|
||||
"tracking_lock_timestamp": 101812,
|
||||
"prompt_epoch_count": 8044,
|
||||
"first_synchronized_symbol_timestamp": 12598780,
|
||||
"first_page_sync_timestamp": 12598780,
|
||||
"first_crc_valid_page_timestamp": 12598780,
|
||||
"page_parts": 29,
|
||||
"pages": 14,
|
||||
"crc_passes": 14,
|
||||
"crc_failures": 0,
|
||||
"fec_failures": 0,
|
||||
"received_word_types": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"missing_ephemeris_word_types": [],
|
||||
"complete_ephemeris": true,
|
||||
"ephemeris_iod_nav": 29,
|
||||
"first_complete_ephemeris_timestamp": 61702780,
|
||||
"clock_parameters": true,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"decoding_time_s": 1.231179278001946
|
||||
},
|
||||
"27": {
|
||||
"prn": 27,
|
||||
"acquisition_detected": true,
|
||||
"acquisition_time_s": 0.08157938700605882,
|
||||
"raw_doppler_hz": -2750.0,
|
||||
"expected_doppler_hz": -2637.0,
|
||||
"start_sample_timestamp": 88014,
|
||||
"tracking_epoch_count": 16088,
|
||||
"tracking_time_s": 13.978430488001322,
|
||||
"tracking_final_state": "PLL_TRACK",
|
||||
"tracking_reacquisition_requests": 0,
|
||||
"tracking_lock_timestamp": 96198,
|
||||
"prompt_epoch_count": 8044,
|
||||
"first_synchronized_symbol_timestamp": 12642270,
|
||||
"first_page_sync_timestamp": 12642270,
|
||||
"first_crc_valid_page_timestamp": 12642270,
|
||||
"page_parts": 29,
|
||||
"pages": 14,
|
||||
"crc_passes": 14,
|
||||
"crc_failures": 0,
|
||||
"fec_failures": 0,
|
||||
"received_word_types": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"missing_ephemeris_word_types": [],
|
||||
"complete_ephemeris": true,
|
||||
"ephemeris_iod_nav": 29,
|
||||
"first_complete_ephemeris_timestamp": 61746270,
|
||||
"clock_parameters": true,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"decoding_time_s": 1.2002744679994066
|
||||
}
|
||||
},
|
||||
"galileo_time": {
|
||||
"week_number": 1138,
|
||||
"time_of_week_s": 554765,
|
||||
"page_start_sample_timestamp": 69930270,
|
||||
"source_word_type": 6,
|
||||
"valid": true
|
||||
},
|
||||
"navigation_ready": true
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
# Galileo I/NAV collection report
|
||||
|
||||
The standalone decoder consumed tracked E1B prompts only; simulator ephemeris and time truth were not inputs.
|
||||
|
||||
| PRN | Tracking | Symbol sync | Page sync | CRC pages | Complete ephemeris | Clock | Time | Ready |
|
||||
| --: | -------: | ----------: | --------: | --------: | -----------------: | ----: | ---: | ----: |
|
||||
| 1 | PLL_TRACK | True | 31 | 15 | True | True | True | True |
|
||||
| 4 | PLL_TRACK | True | 29 | 14 | True | True | True | True |
|
||||
| 19 | PLL_TRACK | True | 28 | 13 | False | True | True | False |
|
||||
| 21 | PLL_TRACK | True | 29 | 14 | True | True | True | True |
|
||||
| 27 | PLL_TRACK | True | 29 | 14 | True | True | True | True |
|
||||
@@ -0,0 +1,747 @@
|
||||
{
|
||||
"comparison_stage": "post_decode_only",
|
||||
"truth_injected_into_decoder": false,
|
||||
"rinex_source": "/home/onur/Desktop/galileo/signalsim/SignalSim/EphData/BRDC00IGS_R_20211700000_01D_MN.rnx",
|
||||
"satellites": {
|
||||
"1": {
|
||||
"rinex_epoch": "2021 06 19 10 10 00",
|
||||
"fields": {
|
||||
"toe_s": {
|
||||
"decoded_raw_integer": 9250,
|
||||
"decoded_scaled_value": 555000.0,
|
||||
"simulator_truth_value": 555000.0,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 60.0,
|
||||
"pass": true
|
||||
},
|
||||
"toc_s": {
|
||||
"decoded_raw_integer": 9250,
|
||||
"decoded_scaled_value": 555000.0,
|
||||
"simulator_truth_value": 555000.0,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 60.0,
|
||||
"pass": true
|
||||
},
|
||||
"mean_anomaly_rad": {
|
||||
"decoded_raw_integer": 1205435370,
|
||||
"decoded_scaled_value": 1.763453196161098,
|
||||
"simulator_truth_value": 1.763453196161,
|
||||
"absolute_error": 9.792167077193881e-14,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"eccentricity": {
|
||||
"decoded_raw_integer": 686593,
|
||||
"decoded_scaled_value": 7.992994505912066e-05,
|
||||
"simulator_truth_value": 7.992994505912e-05,
|
||||
"absolute_error": 6.505213034913027e-19,
|
||||
"expected_quantization_step": 1.1641532182693481e-10,
|
||||
"pass": true
|
||||
},
|
||||
"sqrt_a": {
|
||||
"decoded_raw_integer": 2852441455,
|
||||
"decoded_scaled_value": 5440.600309371948,
|
||||
"simulator_truth_value": 5440.600309372,
|
||||
"absolute_error": 5.184119800105691e-11,
|
||||
"expected_quantization_step": 1.9073486328125e-06,
|
||||
"pass": true
|
||||
},
|
||||
"omega0_rad": {
|
||||
"decoded_raw_integer": 124271520,
|
||||
"decoded_scaled_value": 0.1817990533460104,
|
||||
"simulator_truth_value": 0.181799053346,
|
||||
"absolute_error": 1.0408340855860843e-14,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"inclination_rad": {
|
||||
"decoded_raw_integer": 668564212,
|
||||
"decoded_scaled_value": 0.9780546728858021,
|
||||
"simulator_truth_value": 0.9780546728858,
|
||||
"absolute_error": 2.1094237467877974e-15,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"argument_of_perigee_rad": {
|
||||
"decoded_raw_integer": -1020394408,
|
||||
"decoded_scaled_value": -1.4927534274463103,
|
||||
"simulator_truth_value": -1.492753427446,
|
||||
"absolute_error": 3.1041835768519377e-13,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"inclination_rate_rad_s": {
|
||||
"decoded_raw_integer": 278,
|
||||
"decoded_scaled_value": 9.928985010651132e-11,
|
||||
"simulator_truth_value": 9.928985010651e-11,
|
||||
"absolute_error": 1.3183191012563879e-24,
|
||||
"expected_quantization_step": 3.571577341960839e-13,
|
||||
"pass": true
|
||||
},
|
||||
"omega_dot_rad_s": {
|
||||
"decoded_raw_integer": -16266,
|
||||
"decoded_scaled_value": -5.809527704433501e-09,
|
||||
"simulator_truth_value": -5.809527704434e-09,
|
||||
"absolute_error": 4.996170899820287e-22,
|
||||
"expected_quantization_step": 3.571577341960839e-13,
|
||||
"pass": true
|
||||
},
|
||||
"delta_n_rad_s": {
|
||||
"decoded_raw_integer": 9200,
|
||||
"decoded_scaled_value": 3.2858511546039716e-09,
|
||||
"simulator_truth_value": 3.285851154604e-09,
|
||||
"absolute_error": 2.8537731133079455e-23,
|
||||
"expected_quantization_step": 3.571577341960839e-13,
|
||||
"pass": true
|
||||
},
|
||||
"cuc_rad": {
|
||||
"decoded_raw_integer": 2269,
|
||||
"decoded_scaled_value": 4.2263418436050415e-06,
|
||||
"simulator_truth_value": 4.226341843605e-06,
|
||||
"absolute_error": 4.1504614415460717e-20,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"cus_rad": {
|
||||
"decoded_raw_integer": 2357,
|
||||
"decoded_scaled_value": 4.390254616737366e-06,
|
||||
"simulator_truth_value": 4.390254616737e-06,
|
||||
"absolute_error": 3.6591823321385775e-19,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"crc_m": {
|
||||
"decoded_raw_integer": 8197,
|
||||
"decoded_scaled_value": 256.15625,
|
||||
"simulator_truth_value": 256.15625,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 0.03125,
|
||||
"pass": true
|
||||
},
|
||||
"crs_m": {
|
||||
"decoded_raw_integer": 2918,
|
||||
"decoded_scaled_value": 91.1875,
|
||||
"simulator_truth_value": 91.1875,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 0.03125,
|
||||
"pass": true
|
||||
},
|
||||
"cic_rad": {
|
||||
"decoded_raw_integer": 8,
|
||||
"decoded_scaled_value": 1.4901161193847656e-08,
|
||||
"simulator_truth_value": 1.490116119385e-08,
|
||||
"absolute_error": 2.3425754947501744e-21,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"cis_rad": {
|
||||
"decoded_raw_integer": -31,
|
||||
"decoded_scaled_value": -5.774199962615967e-08,
|
||||
"simulator_truth_value": -5.774199962616e-08,
|
||||
"absolute_error": 3.3087224502121107e-22,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"clock_bias_s": {
|
||||
"decoded_raw_integer": -19455572,
|
||||
"decoded_scaled_value": -0.001132463337853551,
|
||||
"simulator_truth_value": -0.001132463337854,
|
||||
"absolute_error": 4.490765398434959e-16,
|
||||
"expected_quantization_step": 5.820766091346741e-11,
|
||||
"pass": true
|
||||
},
|
||||
"clock_drift_s_per_s": {
|
||||
"decoded_raw_integer": -561,
|
||||
"decoded_scaled_value": -7.972289495228324e-12,
|
||||
"simulator_truth_value": -7.972289495228e-12,
|
||||
"absolute_error": 3.2473301391241907e-25,
|
||||
"expected_quantization_step": 1.4210854715202004e-14,
|
||||
"pass": true
|
||||
},
|
||||
"clock_drift_rate_s_per_s2": {
|
||||
"decoded_raw_integer": 0,
|
||||
"decoded_scaled_value": 0.0,
|
||||
"simulator_truth_value": 0.0,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 1.734723475976807e-18,
|
||||
"pass": true
|
||||
},
|
||||
"iod_nav": {
|
||||
"decoded_raw_integer": 29,
|
||||
"decoded_scaled_value": 29,
|
||||
"simulator_truth_value": 29,
|
||||
"absolute_error": 0,
|
||||
"expected_quantization_step": 1,
|
||||
"pass": true
|
||||
},
|
||||
"health": {
|
||||
"decoded_raw_integer": 0,
|
||||
"decoded_scaled_value": true,
|
||||
"simulator_truth_value": 0,
|
||||
"absolute_error": 0,
|
||||
"expected_quantization_step": 1,
|
||||
"pass": true
|
||||
}
|
||||
},
|
||||
"pass": true
|
||||
},
|
||||
"4": {
|
||||
"rinex_epoch": "2021 06 19 10 20 00",
|
||||
"fields": {
|
||||
"toe_s": {
|
||||
"decoded_raw_integer": 9260,
|
||||
"decoded_scaled_value": 555600.0,
|
||||
"simulator_truth_value": 555600.0,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 60.0,
|
||||
"pass": true
|
||||
},
|
||||
"toc_s": {
|
||||
"decoded_raw_integer": 9260,
|
||||
"decoded_scaled_value": 555600.0,
|
||||
"simulator_truth_value": 555600.0,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 60.0,
|
||||
"pass": true
|
||||
},
|
||||
"mean_anomaly_rad": {
|
||||
"decoded_raw_integer": 2014577905,
|
||||
"decoded_scaled_value": 2.9471624393166582,
|
||||
"simulator_truth_value": 2.947162439317,
|
||||
"absolute_error": 3.419486915845482e-13,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"eccentricity": {
|
||||
"decoded_raw_integer": 2815972,
|
||||
"decoded_scaled_value": 0.0003278222866356373,
|
||||
"simulator_truth_value": 0.0003278222866356,
|
||||
"absolute_error": 3.729655473350135e-17,
|
||||
"expected_quantization_step": 1.1641532182693481e-10,
|
||||
"pass": true
|
||||
},
|
||||
"sqrt_a": {
|
||||
"decoded_raw_integer": 2852451617,
|
||||
"decoded_scaled_value": 5440.619691848755,
|
||||
"simulator_truth_value": 5440.619691849,
|
||||
"absolute_error": 2.455635694786906e-10,
|
||||
"expected_quantization_step": 1.9073486328125e-06,
|
||||
"pass": true
|
||||
},
|
||||
"omega0_rad": {
|
||||
"decoded_raw_integer": -1310031890,
|
||||
"decoded_scaled_value": -1.916469336297527,
|
||||
"simulator_truth_value": -1.916469336298,
|
||||
"absolute_error": 4.731770530952417e-13,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"inclination_rad": {
|
||||
"decoded_raw_integer": 652573009,
|
||||
"decoded_scaled_value": 0.9546608529078708,
|
||||
"simulator_truth_value": 0.9546608529079,
|
||||
"absolute_error": 2.919886554764162e-14,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"argument_of_perigee_rad": {
|
||||
"decoded_raw_integer": -888300143,
|
||||
"decoded_scaled_value": -1.2995103390103033,
|
||||
"simulator_truth_value": -1.29951033901,
|
||||
"absolute_error": 3.0331293032759277e-13,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"inclination_rate_rad_s": {
|
||||
"decoded_raw_integer": -651,
|
||||
"decoded_scaled_value": -2.3250968496165061e-10,
|
||||
"simulator_truth_value": -2.325096849617e-10,
|
||||
"absolute_error": 4.939819220590112e-23,
|
||||
"expected_quantization_step": 3.571577341960839e-13,
|
||||
"pass": true
|
||||
},
|
||||
"omega_dot_rad_s": {
|
||||
"decoded_raw_integer": -16173,
|
||||
"decoded_scaled_value": -5.7763120351532645e-09,
|
||||
"simulator_truth_value": -5.776312035153e-09,
|
||||
"absolute_error": 2.6469779601696886e-22,
|
||||
"expected_quantization_step": 3.571577341960839e-13,
|
||||
"pass": true
|
||||
},
|
||||
"delta_n_rad_s": {
|
||||
"decoded_raw_integer": 9495,
|
||||
"decoded_scaled_value": 3.3912126861918165e-09,
|
||||
"simulator_truth_value": 3.391212686192e-09,
|
||||
"absolute_error": 1.8363409598677214e-22,
|
||||
"expected_quantization_step": 3.571577341960839e-13,
|
||||
"pass": true
|
||||
},
|
||||
"cuc_rad": {
|
||||
"decoded_raw_integer": -1908,
|
||||
"decoded_scaled_value": -3.553926944732666e-06,
|
||||
"simulator_truth_value": -3.553926944733e-06,
|
||||
"absolute_error": 3.341544976918215e-19,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"cus_rad": {
|
||||
"decoded_raw_integer": 4287,
|
||||
"decoded_scaled_value": 7.985159754753113e-06,
|
||||
"simulator_truth_value": 7.985159754753e-06,
|
||||
"absolute_error": 1.1350241493207625e-19,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"crc_m": {
|
||||
"decoded_raw_integer": 5176,
|
||||
"decoded_scaled_value": 161.75,
|
||||
"simulator_truth_value": 161.75,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 0.03125,
|
||||
"pass": true
|
||||
},
|
||||
"crs_m": {
|
||||
"decoded_raw_integer": -2345,
|
||||
"decoded_scaled_value": -73.28125,
|
||||
"simulator_truth_value": -73.28125,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 0.03125,
|
||||
"pass": true
|
||||
},
|
||||
"cic_rad": {
|
||||
"decoded_raw_integer": 11,
|
||||
"decoded_scaled_value": 2.0489096641540527e-08,
|
||||
"simulator_truth_value": 2.048909664154e-08,
|
||||
"absolute_error": 5.260868695837256e-22,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"cis_rad": {
|
||||
"decoded_raw_integer": 29,
|
||||
"decoded_scaled_value": 5.4016709327697754e-08,
|
||||
"simulator_truth_value": 5.40167093277e-08,
|
||||
"absolute_error": 2.243313821243811e-21,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"clock_bias_s": {
|
||||
"decoded_raw_integer": -13668906,
|
||||
"decoded_scaled_value": -0.0007956350455060601,
|
||||
"simulator_truth_value": -0.0007956350455061,
|
||||
"absolute_error": 3.9898639947466563e-17,
|
||||
"expected_quantization_step": 5.820766091346741e-11,
|
||||
"pass": true
|
||||
},
|
||||
"clock_drift_s_per_s": {
|
||||
"decoded_raw_integer": -566,
|
||||
"decoded_scaled_value": -8.043343768804334e-12,
|
||||
"simulator_truth_value": -8.043343768804e-12,
|
||||
"absolute_error": 3.3442653671577486e-25,
|
||||
"expected_quantization_step": 1.4210854715202004e-14,
|
||||
"pass": true
|
||||
},
|
||||
"clock_drift_rate_s_per_s2": {
|
||||
"decoded_raw_integer": 0,
|
||||
"decoded_scaled_value": 0.0,
|
||||
"simulator_truth_value": 0.0,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 1.734723475976807e-18,
|
||||
"pass": true
|
||||
},
|
||||
"iod_nav": {
|
||||
"decoded_raw_integer": 30,
|
||||
"decoded_scaled_value": 30,
|
||||
"simulator_truth_value": 30,
|
||||
"absolute_error": 0,
|
||||
"expected_quantization_step": 1,
|
||||
"pass": true
|
||||
},
|
||||
"health": {
|
||||
"decoded_raw_integer": 0,
|
||||
"decoded_scaled_value": true,
|
||||
"simulator_truth_value": 0,
|
||||
"absolute_error": 0,
|
||||
"expected_quantization_step": 1,
|
||||
"pass": true
|
||||
}
|
||||
},
|
||||
"pass": true
|
||||
},
|
||||
"21": {
|
||||
"rinex_epoch": "2021 06 19 10 10 00",
|
||||
"fields": {
|
||||
"toe_s": {
|
||||
"decoded_raw_integer": 9250,
|
||||
"decoded_scaled_value": 555000.0,
|
||||
"simulator_truth_value": 555000.0,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 60.0,
|
||||
"pass": true
|
||||
},
|
||||
"toc_s": {
|
||||
"decoded_raw_integer": 9250,
|
||||
"decoded_scaled_value": 555000.0,
|
||||
"simulator_truth_value": 555000.0,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 60.0,
|
||||
"pass": true
|
||||
},
|
||||
"mean_anomaly_rad": {
|
||||
"decoded_raw_integer": -1911018410,
|
||||
"decoded_scaled_value": -2.7956633818013814,
|
||||
"simulator_truth_value": -2.795663381801,
|
||||
"absolute_error": 3.814726312612038e-13,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"eccentricity": {
|
||||
"decoded_raw_integer": 333012,
|
||||
"decoded_scaled_value": 3.8767699152231216e-05,
|
||||
"simulator_truth_value": 3.876769915223e-05,
|
||||
"absolute_error": 1.2197274440461925e-18,
|
||||
"expected_quantization_step": 1.1641532182693481e-10,
|
||||
"pass": true
|
||||
},
|
||||
"sqrt_a": {
|
||||
"decoded_raw_integer": 2852447998,
|
||||
"decoded_scaled_value": 5440.612789154053,
|
||||
"simulator_truth_value": 5440.612789154,
|
||||
"absolute_error": 5.275069270282984e-11,
|
||||
"expected_quantization_step": 1.9073486328125e-06,
|
||||
"pass": true
|
||||
},
|
||||
"omega0_rad": {
|
||||
"decoded_raw_integer": 122320949,
|
||||
"decoded_scaled_value": 0.1789455277652162,
|
||||
"simulator_truth_value": 0.1789455277652,
|
||||
"absolute_error": 1.6181500583911657e-14,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"inclination_rad": {
|
||||
"decoded_raw_integer": 668272202,
|
||||
"decoded_scaled_value": 0.9776274861774753,
|
||||
"simulator_truth_value": 0.9776274861775,
|
||||
"absolute_error": 2.4646951146678475e-14,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"argument_of_perigee_rad": {
|
||||
"decoded_raw_integer": -1683591646,
|
||||
"decoded_scaled_value": -2.4629566570365555,
|
||||
"simulator_truth_value": -2.462956657037,
|
||||
"absolute_error": 4.445332990599127e-13,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"inclination_rate_rad_s": {
|
||||
"decoded_raw_integer": 390,
|
||||
"decoded_scaled_value": 1.392915163364727e-10,
|
||||
"simulator_truth_value": 1.392915163365e-10,
|
||||
"absolute_error": 2.7296960214249913e-23,
|
||||
"expected_quantization_step": 3.571577341960839e-13,
|
||||
"pass": true
|
||||
},
|
||||
"omega_dot_rad_s": {
|
||||
"decoded_raw_integer": -16427,
|
||||
"decoded_scaled_value": -5.86703009963907e-09,
|
||||
"simulator_truth_value": -5.867030099639e-09,
|
||||
"absolute_error": 6.948317145445432e-23,
|
||||
"expected_quantization_step": 3.571577341960839e-13,
|
||||
"pass": true
|
||||
},
|
||||
"delta_n_rad_s": {
|
||||
"decoded_raw_integer": 9206,
|
||||
"decoded_scaled_value": 3.2879941010091484e-09,
|
||||
"simulator_truth_value": 3.287994101009e-09,
|
||||
"absolute_error": 1.4847891995326847e-22,
|
||||
"expected_quantization_step": 3.571577341960839e-13,
|
||||
"pass": true
|
||||
},
|
||||
"cuc_rad": {
|
||||
"decoded_raw_integer": 2375,
|
||||
"decoded_scaled_value": 4.423782229423523e-06,
|
||||
"simulator_truth_value": 4.423782229424e-06,
|
||||
"absolute_error": 4.768795493041711e-19,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"cus_rad": {
|
||||
"decoded_raw_integer": 2474,
|
||||
"decoded_scaled_value": 4.608184099197388e-06,
|
||||
"simulator_truth_value": 4.608184099197e-06,
|
||||
"absolute_error": 3.8794108984246956e-19,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"crc_m": {
|
||||
"decoded_raw_integer": 7939,
|
||||
"decoded_scaled_value": 248.09375,
|
||||
"simulator_truth_value": 248.09375,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 0.03125,
|
||||
"pass": true
|
||||
},
|
||||
"crs_m": {
|
||||
"decoded_raw_integer": 3018,
|
||||
"decoded_scaled_value": 94.3125,
|
||||
"simulator_truth_value": 94.3125,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 0.03125,
|
||||
"pass": true
|
||||
},
|
||||
"cic_rad": {
|
||||
"decoded_raw_integer": 71,
|
||||
"decoded_scaled_value": 1.3224780559539795e-07,
|
||||
"simulator_truth_value": 1.322478055954e-07,
|
||||
"absolute_error": 2.0381730293306602e-21,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"cis_rad": {
|
||||
"decoded_raw_integer": 15,
|
||||
"decoded_scaled_value": 2.7939677238464355e-08,
|
||||
"simulator_truth_value": 2.793967723846e-08,
|
||||
"absolute_error": 4.354278744479138e-21,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"clock_bias_s": {
|
||||
"decoded_raw_integer": -11536773,
|
||||
"decoded_scaled_value": -0.0006715285708196461,
|
||||
"simulator_truth_value": -0.0006715285708196,
|
||||
"absolute_error": 4.607859233063394e-17,
|
||||
"expected_quantization_step": 5.820766091346741e-11,
|
||||
"pass": true
|
||||
},
|
||||
"clock_drift_s_per_s": {
|
||||
"decoded_raw_integer": -147,
|
||||
"decoded_scaled_value": -2.0889956431346945e-12,
|
||||
"simulator_truth_value": -2.088995643135e-12,
|
||||
"absolute_error": 3.053459683057075e-25,
|
||||
"expected_quantization_step": 1.4210854715202004e-14,
|
||||
"pass": true
|
||||
},
|
||||
"clock_drift_rate_s_per_s2": {
|
||||
"decoded_raw_integer": 0,
|
||||
"decoded_scaled_value": 0.0,
|
||||
"simulator_truth_value": 0.0,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 1.734723475976807e-18,
|
||||
"pass": true
|
||||
},
|
||||
"iod_nav": {
|
||||
"decoded_raw_integer": 29,
|
||||
"decoded_scaled_value": 29,
|
||||
"simulator_truth_value": 29,
|
||||
"absolute_error": 0,
|
||||
"expected_quantization_step": 1,
|
||||
"pass": true
|
||||
},
|
||||
"health": {
|
||||
"decoded_raw_integer": 0,
|
||||
"decoded_scaled_value": true,
|
||||
"simulator_truth_value": 0,
|
||||
"absolute_error": 0,
|
||||
"expected_quantization_step": 1,
|
||||
"pass": true
|
||||
}
|
||||
},
|
||||
"pass": true
|
||||
},
|
||||
"27": {
|
||||
"rinex_epoch": "2021 06 19 10 10 00",
|
||||
"fields": {
|
||||
"toe_s": {
|
||||
"decoded_raw_integer": 9250,
|
||||
"decoded_scaled_value": 555000.0,
|
||||
"simulator_truth_value": 555000.0,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 60.0,
|
||||
"pass": true
|
||||
},
|
||||
"toc_s": {
|
||||
"decoded_raw_integer": 9250,
|
||||
"decoded_scaled_value": 555000.0,
|
||||
"simulator_truth_value": 555000.0,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 60.0,
|
||||
"pass": true
|
||||
},
|
||||
"mean_anomaly_rad": {
|
||||
"decoded_raw_integer": 1962316831,
|
||||
"decoded_scaled_value": 2.8707087693201396,
|
||||
"simulator_truth_value": 2.87070876932,
|
||||
"absolute_error": 1.3944401189291966e-13,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"eccentricity": {
|
||||
"decoded_raw_integer": 1367381,
|
||||
"decoded_scaled_value": 0.00015918409917503595,
|
||||
"simulator_truth_value": 0.000159184099175,
|
||||
"absolute_error": 3.594130201789447e-17,
|
||||
"expected_quantization_step": 1.1641532182693481e-10,
|
||||
"pass": true
|
||||
},
|
||||
"sqrt_a": {
|
||||
"decoded_raw_integer": 2852446803,
|
||||
"decoded_scaled_value": 5440.6105098724365,
|
||||
"simulator_truth_value": 5440.610509872,
|
||||
"absolute_error": 4.3655745685100555e-10,
|
||||
"expected_quantization_step": 1.9073486328125e-06,
|
||||
"pass": true
|
||||
},
|
||||
"omega0_rad": {
|
||||
"decoded_raw_integer": 122319142,
|
||||
"decoded_scaled_value": 0.17894288427224694,
|
||||
"simulator_truth_value": 0.1789428842722,
|
||||
"absolute_error": 4.693467836602849e-14,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"inclination_rad": {
|
||||
"decoded_raw_integer": 668253077,
|
||||
"decoded_scaled_value": 0.9775995078692093,
|
||||
"simulator_truth_value": 0.9775995078692,
|
||||
"absolute_error": 9.325873406851315e-15,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"argument_of_perigee_rad": {
|
||||
"decoded_raw_integer": -720614090,
|
||||
"decoded_scaled_value": -1.0541993804356522,
|
||||
"simulator_truth_value": -1.054199380436,
|
||||
"absolute_error": 3.4772185131259903e-13,
|
||||
"expected_quantization_step": 1.4629180792671596e-09,
|
||||
"pass": true
|
||||
},
|
||||
"inclination_rate_rad_s": {
|
||||
"decoded_raw_integer": 639,
|
||||
"decoded_scaled_value": 2.282237921512976e-10,
|
||||
"simulator_truth_value": 2.282237921513e-10,
|
||||
"absolute_error": 2.4039936552322367e-24,
|
||||
"expected_quantization_step": 3.571577341960839e-13,
|
||||
"pass": true
|
||||
},
|
||||
"omega_dot_rad_s": {
|
||||
"decoded_raw_integer": -16281,
|
||||
"decoded_scaled_value": -5.8148850704464415e-09,
|
||||
"simulator_truth_value": -5.814885070446e-09,
|
||||
"absolute_error": 4.417144471033168e-22,
|
||||
"expected_quantization_step": 3.571577341960839e-13,
|
||||
"pass": true
|
||||
},
|
||||
"delta_n_rad_s": {
|
||||
"decoded_raw_integer": 9286,
|
||||
"decoded_scaled_value": 3.316566719744835e-09,
|
||||
"simulator_truth_value": 3.316566719745e-09,
|
||||
"absolute_error": 1.6502253220432902e-22,
|
||||
"expected_quantization_step": 3.571577341960839e-13,
|
||||
"pass": true
|
||||
},
|
||||
"cuc_rad": {
|
||||
"decoded_raw_integer": 2485,
|
||||
"decoded_scaled_value": 4.628673195838928e-06,
|
||||
"simulator_truth_value": 4.628673195839e-06,
|
||||
"absolute_error": 7.199780051661553e-20,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"cus_rad": {
|
||||
"decoded_raw_integer": 2415,
|
||||
"decoded_scaled_value": 4.498288035392761e-06,
|
||||
"simulator_truth_value": 4.498288035393e-06,
|
||||
"absolute_error": 2.388632911257127e-19,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"crc_m": {
|
||||
"decoded_raw_integer": 8032,
|
||||
"decoded_scaled_value": 251.0,
|
||||
"simulator_truth_value": 251.0,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 0.03125,
|
||||
"pass": true
|
||||
},
|
||||
"crs_m": {
|
||||
"decoded_raw_integer": 3123,
|
||||
"decoded_scaled_value": 97.59375,
|
||||
"simulator_truth_value": 97.59375,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 0.03125,
|
||||
"pass": true
|
||||
},
|
||||
"cic_rad": {
|
||||
"decoded_raw_integer": -27,
|
||||
"decoded_scaled_value": -5.029141902923584e-08,
|
||||
"simulator_truth_value": -5.029141902924e-08,
|
||||
"absolute_error": 4.162372842366835e-21,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"cis_rad": {
|
||||
"decoded_raw_integer": 66,
|
||||
"decoded_scaled_value": 1.2293457984924316e-07,
|
||||
"simulator_truth_value": 1.229345798492e-07,
|
||||
"absolute_error": 4.317221053036762e-20,
|
||||
"expected_quantization_step": 1.862645149230957e-09,
|
||||
"pass": true
|
||||
},
|
||||
"clock_bias_s": {
|
||||
"decoded_raw_integer": -988889,
|
||||
"decoded_scaled_value": -5.756091559305787e-05,
|
||||
"simulator_truth_value": -5.756091559306e-05,
|
||||
"absolute_error": 2.1277467635028025e-18,
|
||||
"expected_quantization_step": 5.820766091346741e-11,
|
||||
"pass": true
|
||||
},
|
||||
"clock_drift_s_per_s": {
|
||||
"decoded_raw_integer": -581,
|
||||
"decoded_scaled_value": -8.256506589532364e-12,
|
||||
"simulator_truth_value": -8.256506589532e-12,
|
||||
"absolute_error": 3.6350710512584224e-25,
|
||||
"expected_quantization_step": 1.4210854715202004e-14,
|
||||
"pass": true
|
||||
},
|
||||
"clock_drift_rate_s_per_s2": {
|
||||
"decoded_raw_integer": 0,
|
||||
"decoded_scaled_value": 0.0,
|
||||
"simulator_truth_value": 0.0,
|
||||
"absolute_error": 0.0,
|
||||
"expected_quantization_step": 1.734723475976807e-18,
|
||||
"pass": true
|
||||
},
|
||||
"iod_nav": {
|
||||
"decoded_raw_integer": 29,
|
||||
"decoded_scaled_value": 29,
|
||||
"simulator_truth_value": 29,
|
||||
"absolute_error": 0,
|
||||
"expected_quantization_step": 1,
|
||||
"pass": true
|
||||
},
|
||||
"health": {
|
||||
"decoded_raw_integer": 0,
|
||||
"decoded_scaled_value": true,
|
||||
"simulator_truth_value": 0,
|
||||
"absolute_error": 0,
|
||||
"expected_quantization_step": 1,
|
||||
"pass": true
|
||||
}
|
||||
},
|
||||
"pass": true
|
||||
}
|
||||
},
|
||||
"galileo_time": {
|
||||
"decoded_week_number": 1138,
|
||||
"simulator_truth_week_number": 1138,
|
||||
"week_absolute_error": 0,
|
||||
"decoded_time_of_week_s": 554765,
|
||||
"simulator_truth_time_of_week_s": 554765,
|
||||
"time_of_week_absolute_error_s": 0,
|
||||
"expected_quantization_step_s": 1,
|
||||
"leap_seconds_from_rinex": 18,
|
||||
"pass": true
|
||||
},
|
||||
"overall_pass": true
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
# I/NAV decoded-field truth comparison
|
||||
|
||||
Truth was applied only after standalone RF-to-page decoding and ephemeris assembly.
|
||||
|
||||
| PRN | RINEX epoch | Fields | Result |
|
||||
| --: | --- | --: | ---: |
|
||||
| 1 | 2021 06 19 10 10 00 | 22 | PASS |
|
||||
| 4 | 2021 06 19 10 20 00 | 22 | PASS |
|
||||
| 21 | 2021 06 19 10 10 00 | 22 | PASS |
|
||||
| 27 | 2021 06 19 10 10 00 | 22 | PASS |
|
||||
|
||||
## Galileo system time
|
||||
|
||||
Decoded GST week/TOW: 1138/554765 s; independently expected 1138/554765 s. Result: **PASS**.
|
||||
@@ -0,0 +1,35 @@
|
||||
# Navigation readiness review
|
||||
|
||||
## Gate result
|
||||
|
||||
The standalone receiver path decoded SignalSim RF samples without consuming
|
||||
simulator ephemeris, satellite states, transmit times, receiver truth, or RINEX
|
||||
fields. The RINEX source was opened only by a separate post-decode comparison.
|
||||
|
||||
The reproducible `navigation_multisat` vector contains 131,758,308 complex IQ8
|
||||
samples (32.2 s at 4.092 MHz), SHA-256
|
||||
`b38393b32eec2df53f9813ea7ff8f13e5e0fc72fa5cb7fb910a2b8f907a56a6e`.
|
||||
|
||||
| Criterion | Evidence | Result |
|
||||
| --- | --- | ---: |
|
||||
| E1B prompts and raw symbols from tracked RF | Five `prompt_epochs.npz`, `soft_symbols.npy`, and `hard_symbols.bin` artifact sets | PASS |
|
||||
| Stable symbol and page synchronization | Repeated 250-symbol sync confirmation; 146 synchronized page parts | PASS |
|
||||
| Deinterleaving | Official Annex D.2 coded vector plus RF pages | PASS |
|
||||
| Soft-decision FEC | Independent Annex D.2 vector; all 70 received pages FEC-valid | PASS |
|
||||
| CRC | Independent CRC-24Q check vector; 70 pass, 0 fail | PASS |
|
||||
| Critical words | Types 1–6 decoded and typed | PASS |
|
||||
| Complete ephemeris | PRNs 1, 4, 21, and 27; atomic matching IODnav sets | PASS |
|
||||
| Satellite clock | Word 4 clock polynomial for all four complete satellites | PASS |
|
||||
| Galileo time | GST week 1138, TOW 554765 s from tracked page data | PASS |
|
||||
| Health and validity | Four complete satellites report usable E1B health and DVS | PASS |
|
||||
| Independent truth comparison | Every ephemeris/clock field within 0.5 broadcast LSB; GST within its 1 s resolution | PASS |
|
||||
| Reproducible artifacts | Prompt, symbol, page, FEC, CRC, word, ephemeris and summary evidence per PRN | PASS |
|
||||
| Decoder truth isolation | Collection report records `decoder_truth_inputs: []` | PASS |
|
||||
|
||||
PRN 19 deliberately demonstrates the incomplete-data behavior: it received
|
||||
word types 2–6 but not word 1 during the observation, so no ephemeris was
|
||||
fabricated or committed. The other four satellites satisfy the readiness gate.
|
||||
|
||||
PVT has not been implemented or started in this milestone.
|
||||
|
||||
NAVIGATION DATA READY FOR PVT
|
||||
@@ -0,0 +1,211 @@
|
||||
{
|
||||
"decoder_truth_inputs": [],
|
||||
"icd": "Galileo OS SIS ICD Issue 2.2, November 2025",
|
||||
"signalsim_commit": "80b262113e77c4482ca9f5cbfef9bcada402ed28",
|
||||
"sample_file": "/home/onur/Desktop/galileo/verification/vectors/signalsim/navigation_multisat/navigation_multisat_iq8.bin",
|
||||
"sample_sha256": "b38393b32eec2df53f9813ea7ff8f13e5e0fc72fa5cb7fb910a2b8f907a56a6e",
|
||||
"sample_count": 131758308,
|
||||
"sampling_frequency_hz": 4092000.0,
|
||||
"intermediate_frequency_hz": 1023000.0,
|
||||
"satellites": {
|
||||
"1": {
|
||||
"prn": 1,
|
||||
"acquisition_detected": true,
|
||||
"acquisition_time_s": 0.1004119270000956,
|
||||
"raw_doppler_hz": 1750.0,
|
||||
"expected_doppler_hz": 1828.0,
|
||||
"start_sample_timestamp": 90995,
|
||||
"tracking_epoch_count": 16088,
|
||||
"tracking_time_s": 13.650105177999649,
|
||||
"tracking_final_state": "PLL_TRACK",
|
||||
"tracking_reacquisition_requests": 10,
|
||||
"tracking_lock_timestamp": 107363,
|
||||
"prompt_epoch_count": 8044,
|
||||
"first_synchronized_symbol_timestamp": 4428515,
|
||||
"first_page_sync_timestamp": 4428515,
|
||||
"first_crc_valid_page_timestamp": 4428515,
|
||||
"page_parts": 31,
|
||||
"pages": 15,
|
||||
"crc_passes": 15,
|
||||
"crc_failures": 0,
|
||||
"fec_failures": 0,
|
||||
"received_word_types": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"missing_ephemeris_word_types": [],
|
||||
"complete_ephemeris": true,
|
||||
"ephemeris_iod_nav": 29,
|
||||
"first_complete_ephemeris_timestamp": 61716515,
|
||||
"clock_parameters": true,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"decoding_time_s": 1.260811995001859
|
||||
},
|
||||
"4": {
|
||||
"prn": 4,
|
||||
"acquisition_detected": true,
|
||||
"acquisition_time_s": 0.08580062900000485,
|
||||
"raw_doppler_hz": 2250.0,
|
||||
"expected_doppler_hz": 2171.0,
|
||||
"start_sample_timestamp": 86819,
|
||||
"tracking_epoch_count": 16088,
|
||||
"tracking_time_s": 13.877967087995785,
|
||||
"tracking_final_state": "PLL_TRACK",
|
||||
"tracking_reacquisition_requests": 61,
|
||||
"tracking_lock_timestamp": 103187,
|
||||
"prompt_epoch_count": 8044,
|
||||
"first_synchronized_symbol_timestamp": 12624707,
|
||||
"first_page_sync_timestamp": 12624707,
|
||||
"first_crc_valid_page_timestamp": 12624707,
|
||||
"page_parts": 29,
|
||||
"pages": 14,
|
||||
"crc_passes": 14,
|
||||
"crc_failures": 0,
|
||||
"fec_failures": 0,
|
||||
"received_word_types": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"missing_ephemeris_word_types": [],
|
||||
"complete_ephemeris": true,
|
||||
"ephemeris_iod_nav": 30,
|
||||
"first_complete_ephemeris_timestamp": 61728707,
|
||||
"clock_parameters": true,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"decoding_time_s": 1.3411525530027575
|
||||
},
|
||||
"19": {
|
||||
"prn": 19,
|
||||
"acquisition_detected": true,
|
||||
"acquisition_time_s": 0.0836479790013982,
|
||||
"raw_doppler_hz": -250.0,
|
||||
"expected_doppler_hz": -367.0,
|
||||
"start_sample_timestamp": 87566,
|
||||
"tracking_epoch_count": 16088,
|
||||
"tracking_time_s": 13.9836710640011,
|
||||
"tracking_final_state": "PLL_TRACK",
|
||||
"tracking_reacquisition_requests": 406,
|
||||
"tracking_lock_timestamp": 103934,
|
||||
"prompt_epoch_count": 8044,
|
||||
"first_synchronized_symbol_timestamp": 16684718,
|
||||
"first_page_sync_timestamp": 16684718,
|
||||
"first_crc_valid_page_timestamp": 20776718,
|
||||
"page_parts": 28,
|
||||
"pages": 13,
|
||||
"crc_passes": 13,
|
||||
"crc_failures": 0,
|
||||
"fec_failures": 0,
|
||||
"received_word_types": [
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"missing_ephemeris_word_types": [
|
||||
1
|
||||
],
|
||||
"complete_ephemeris": false,
|
||||
"ephemeris_iod_nav": null,
|
||||
"first_complete_ephemeris_timestamp": null,
|
||||
"clock_parameters": true,
|
||||
"health_valid": false,
|
||||
"data_valid": false,
|
||||
"decoding_time_s": 1.2081766550036264
|
||||
},
|
||||
"21": {
|
||||
"prn": 21,
|
||||
"acquisition_detected": true,
|
||||
"acquisition_time_s": 0.08741291100159287,
|
||||
"raw_doppler_hz": -750.0,
|
||||
"expected_doppler_hz": -712.0,
|
||||
"start_sample_timestamp": 93628,
|
||||
"tracking_epoch_count": 16088,
|
||||
"tracking_time_s": 13.982213923998643,
|
||||
"tracking_final_state": "PLL_TRACK",
|
||||
"tracking_reacquisition_requests": 259,
|
||||
"tracking_lock_timestamp": 101812,
|
||||
"prompt_epoch_count": 8044,
|
||||
"first_synchronized_symbol_timestamp": 12598780,
|
||||
"first_page_sync_timestamp": 12598780,
|
||||
"first_crc_valid_page_timestamp": 12598780,
|
||||
"page_parts": 29,
|
||||
"pages": 14,
|
||||
"crc_passes": 14,
|
||||
"crc_failures": 0,
|
||||
"fec_failures": 0,
|
||||
"received_word_types": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"missing_ephemeris_word_types": [],
|
||||
"complete_ephemeris": true,
|
||||
"ephemeris_iod_nav": 29,
|
||||
"first_complete_ephemeris_timestamp": 61702780,
|
||||
"clock_parameters": true,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"decoding_time_s": 1.231179278001946
|
||||
},
|
||||
"27": {
|
||||
"prn": 27,
|
||||
"acquisition_detected": true,
|
||||
"acquisition_time_s": 0.08157938700605882,
|
||||
"raw_doppler_hz": -2750.0,
|
||||
"expected_doppler_hz": -2637.0,
|
||||
"start_sample_timestamp": 88014,
|
||||
"tracking_epoch_count": 16088,
|
||||
"tracking_time_s": 13.978430488001322,
|
||||
"tracking_final_state": "PLL_TRACK",
|
||||
"tracking_reacquisition_requests": 0,
|
||||
"tracking_lock_timestamp": 96198,
|
||||
"prompt_epoch_count": 8044,
|
||||
"first_synchronized_symbol_timestamp": 12642270,
|
||||
"first_page_sync_timestamp": 12642270,
|
||||
"first_crc_valid_page_timestamp": 12642270,
|
||||
"page_parts": 29,
|
||||
"pages": 14,
|
||||
"crc_passes": 14,
|
||||
"crc_failures": 0,
|
||||
"fec_failures": 0,
|
||||
"received_word_types": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"missing_ephemeris_word_types": [],
|
||||
"complete_ephemeris": true,
|
||||
"ephemeris_iod_nav": 29,
|
||||
"first_complete_ephemeris_timestamp": 61746270,
|
||||
"clock_parameters": true,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"decoding_time_s": 1.2002744679994066
|
||||
}
|
||||
},
|
||||
"galileo_time": {
|
||||
"week_number": 1138,
|
||||
"time_of_week_s": 554765,
|
||||
"page_start_sample_timestamp": 69930270,
|
||||
"source_word_type": 6,
|
||||
"valid": true
|
||||
},
|
||||
"navigation_ready": true
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
# Galileo I/NAV collection report
|
||||
|
||||
The standalone decoder consumed tracked E1B prompts only; simulator ephemeris and time truth were not inputs.
|
||||
|
||||
| PRN | Tracking | Symbol sync | Page sync | CRC pages | Complete ephemeris | Clock | Time | Ready |
|
||||
| --: | -------: | ----------: | --------: | --------: | -----------------: | ----: | ---: | ----: |
|
||||
| 1 | PLL_TRACK | True | 31 | 15 | True | True | True | True |
|
||||
| 4 | PLL_TRACK | True | 29 | 14 | True | True | True | True |
|
||||
| 19 | PLL_TRACK | True | 28 | 13 | False | True | True | False |
|
||||
| 21 | PLL_TRACK | True | 29 | 14 | True | True | True | True |
|
||||
| 27 | PLL_TRACK | True | 29 | 14 | True | True | True | True |
|
||||
@@ -25,6 +25,10 @@ from galileo_rx.signals.signal_generator import ChannelModelConfig, SatelliteSig
|
||||
from galileo_rx.tracking.tracking_channel import TrackingChannel
|
||||
from galileo_rx.types import AcquisitionResult
|
||||
from galileo_rx.verification.signalsim_validation import locate_signalsim, validate_signalsim
|
||||
from galileo_rx.verification.inav_truth import compare_navigation_truth
|
||||
from galileo_rx.navigation.collection import collect_navigation
|
||||
from galileo_rx.navigation.decoder_diagnostics import load_prompt_epochs, save_symbols, write_json_lines
|
||||
from galileo_rx.navigation.inav_pipeline import InavNavigationPipeline
|
||||
|
||||
LOGGER = logging.getLogger("galileo_rx")
|
||||
|
||||
@@ -130,6 +134,69 @@ def command_validate_signalsim(args: argparse.Namespace) -> None:
|
||||
raise SystemExit(1)
|
||||
|
||||
|
||||
def command_collect_navigation(args: argparse.Namespace) -> None:
|
||||
report, passed = collect_navigation(
|
||||
args.config,
|
||||
args.output_dir,
|
||||
signalsim_path=args.signalsim_path,
|
||||
selected_prns=args.prn,
|
||||
)
|
||||
print(json.dumps({"navigation_ready": passed, "report": str(Path(args.output_dir).resolve() / "inav_collection_report.json")}, indent=2))
|
||||
if args.require_ready and not passed:
|
||||
raise SystemExit(1)
|
||||
|
||||
|
||||
def command_prompts_to_symbols(args: argparse.Namespace) -> None:
|
||||
prompts = load_prompt_epochs(args.input, args.prn)
|
||||
pipeline = InavNavigationPipeline(args.prn, minimum_symbol_confidence=args.minimum_confidence)
|
||||
symbols = pipeline.symbol_sync.process_many(prompts)
|
||||
save_symbols(args.output_dir, symbols)
|
||||
print(json.dumps({"prompt_epochs": len(prompts), "symbols": len(symbols), "output_dir": str(Path(args.output_dir).resolve())}, indent=2))
|
||||
|
||||
|
||||
def command_decode_inav(args: argparse.Namespace) -> None:
|
||||
prompts = load_prompt_epochs(args.input, args.prn)
|
||||
pipeline = InavNavigationPipeline(args.prn, minimum_symbol_confidence=args.minimum_confidence)
|
||||
result = pipeline.process(prompts)
|
||||
output = Path(args.output_dir)
|
||||
output.mkdir(parents=True, exist_ok=True)
|
||||
save_symbols(output, result.symbols)
|
||||
write_json_lines(output / "synchronized_pages.jsonl", result.page_parts)
|
||||
write_json_lines(output / "fec_results.jsonl", result.pages)
|
||||
write_json_lines(output / "parsed_words.jsonl", result.words)
|
||||
ephemeris = pipeline.store.get_ephemeris(args.prn)
|
||||
if ephemeris is not None:
|
||||
(output / "ephemeris.json").write_text(json.dumps(asdict(ephemeris), indent=2) + "\n", encoding="utf-8")
|
||||
summary = {
|
||||
"pages": len(result.pages),
|
||||
"crc_valid_pages": sum(page.crc_valid for page in result.pages),
|
||||
"word_types": sorted({word.word_type for word in result.words}),
|
||||
"complete_ephemeris": ephemeris is not None,
|
||||
}
|
||||
(output / "decoder_summary.json").write_text(json.dumps(summary, indent=2) + "\n", encoding="utf-8")
|
||||
print(json.dumps(summary, indent=2))
|
||||
|
||||
|
||||
def command_inspect_navigation(args: argparse.Namespace) -> None:
|
||||
path = Path(args.input)
|
||||
if path.is_dir():
|
||||
path = path / "decoder_summary.json"
|
||||
print(json.dumps(json.loads(path.read_text(encoding="utf-8")), indent=2))
|
||||
|
||||
|
||||
def command_compare_inav_truth(args: argparse.Namespace) -> None:
|
||||
_, passed = compare_navigation_truth(
|
||||
args.artifact_root,
|
||||
args.rinex,
|
||||
args.output_dir,
|
||||
collection_report_path=args.collection_report,
|
||||
signalsim_config_path=args.signalsim_config,
|
||||
)
|
||||
print(json.dumps({"truth_comparison_pass": passed, "report": str(Path(args.output_dir).resolve() / "inav_truth_comparison.json")}, indent=2))
|
||||
if not passed:
|
||||
raise SystemExit(1)
|
||||
|
||||
|
||||
def build_parser() -> argparse.ArgumentParser:
|
||||
parser = argparse.ArgumentParser(prog="galileo-rx")
|
||||
parser.add_argument("--log-level", default="INFO")
|
||||
@@ -175,6 +242,48 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
validate.add_argument("--output-dir", default="reports/signalsim_validation")
|
||||
validate.add_argument("--mode", choices=["quick", "full"])
|
||||
validate.set_defaults(handler=command_validate_signalsim)
|
||||
collect = commands.add_parser("collect-navigation")
|
||||
collect.add_argument("--config", default="configs/navigation_collection.yaml")
|
||||
collect.add_argument("--signalsim-path")
|
||||
collect.add_argument("--output-dir", default="reports/navigation_run")
|
||||
collect.add_argument("--prn", type=int, action="append")
|
||||
collect.add_argument("--require-ready", action="store_true")
|
||||
collect.set_defaults(handler=command_collect_navigation)
|
||||
track_prompts = commands.add_parser("track-to-prompts")
|
||||
track_prompts.add_argument("--config", default="configs/navigation_collection.yaml")
|
||||
track_prompts.add_argument("--signalsim-path")
|
||||
track_prompts.add_argument("--output-dir", default="reports/navigation_run")
|
||||
track_prompts.add_argument("--prn", type=int, action="append", required=True)
|
||||
track_prompts.add_argument("--require-ready", action="store_false", dest="require_ready")
|
||||
track_prompts.set_defaults(handler=command_collect_navigation, require_ready=False)
|
||||
prompts = commands.add_parser("prompts-to-symbols")
|
||||
prompts.add_argument("--input", required=True)
|
||||
prompts.add_argument("--prn", required=True, type=int)
|
||||
prompts.add_argument("--output-dir", required=True)
|
||||
prompts.add_argument("--minimum-confidence", type=float, default=0.1)
|
||||
prompts.set_defaults(handler=command_prompts_to_symbols)
|
||||
decode = commands.add_parser("decode-inav")
|
||||
decode.add_argument("--input", required=True)
|
||||
decode.add_argument("--prn", required=True, type=int)
|
||||
decode.add_argument("--output-dir", required=True)
|
||||
decode.add_argument("--minimum-confidence", type=float, default=0.1)
|
||||
decode.set_defaults(handler=command_decode_inav)
|
||||
assemble = commands.add_parser("assemble-ephemeris")
|
||||
assemble.add_argument("--input", required=True)
|
||||
assemble.add_argument("--prn", required=True, type=int)
|
||||
assemble.add_argument("--output-dir", required=True)
|
||||
assemble.add_argument("--minimum-confidence", type=float, default=0.1)
|
||||
assemble.set_defaults(handler=command_decode_inav)
|
||||
inspect = commands.add_parser("inspect-navigation")
|
||||
inspect.add_argument("--input", required=True)
|
||||
inspect.set_defaults(handler=command_inspect_navigation)
|
||||
truth = commands.add_parser("compare-inav-truth")
|
||||
truth.add_argument("--artifact-root", required=True)
|
||||
truth.add_argument("--rinex", required=True)
|
||||
truth.add_argument("--output-dir", default="reports")
|
||||
truth.add_argument("--collection-report")
|
||||
truth.add_argument("--signalsim-config")
|
||||
truth.set_defaults(handler=command_compare_inav_truth)
|
||||
return parser
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
"""Galileo E1B symbol recovery and I/NAV decoding stages."""
|
||||
|
||||
from .e1b_prompt_stream import E1BPromptEpoch, E1BPromptStream
|
||||
from .e1b_symbol_sync import E1BSymbolSynchronizer, NavigationSymbol
|
||||
from .inav_page_decoder import InavPage, InavPageDecoder
|
||||
from .navigation_store import NavigationStore
|
||||
|
||||
__all__ = [
|
||||
"E1BPromptEpoch",
|
||||
"E1BPromptStream",
|
||||
"E1BSymbolSynchronizer",
|
||||
"NavigationSymbol",
|
||||
"InavPage",
|
||||
"InavPageDecoder",
|
||||
"NavigationStore",
|
||||
]
|
||||
@@ -0,0 +1,213 @@
|
||||
"""SignalSim RF-to-I/NAV collection runner and evidence generation."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import asdict
|
||||
from hashlib import sha256
|
||||
import json
|
||||
import math
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import time
|
||||
from typing import Any
|
||||
|
||||
import numpy as np
|
||||
import yaml
|
||||
|
||||
from galileo_rx.acquisition.acquisition_manager import AcquisitionManager
|
||||
from galileo_rx.config import AcquisitionConfig, TrackingConfig
|
||||
from galileo_rx.io.signalsim_reader import SignalSimReader, SignalSimSampleSpec
|
||||
from galileo_rx.signal_profiles import galileo_e1_profile
|
||||
from galileo_rx.signals.signalsim_codes import SignalSimCodeProvider
|
||||
from galileo_rx.tracking.tracking_channel import TrackingChannel
|
||||
|
||||
from .decoder_diagnostics import save_prompt_epochs, save_symbols, write_json_lines
|
||||
from .e1b_prompt_stream import E1BPromptStream
|
||||
from .inav_pipeline import InavNavigationPipeline
|
||||
from .navigation_store import NavigationStore
|
||||
|
||||
|
||||
def _file_hash(path: Path) -> str:
|
||||
digest = sha256()
|
||||
with path.open("rb") as stream:
|
||||
for block in iter(lambda: stream.read(1024 * 1024), b""):
|
||||
digest.update(block)
|
||||
return digest.hexdigest()
|
||||
|
||||
|
||||
def _json_default(value: Any) -> Any:
|
||||
if isinstance(value, np.generic):
|
||||
return value.item()
|
||||
if isinstance(value, np.ndarray):
|
||||
return value.tolist()
|
||||
if isinstance(value, set):
|
||||
return sorted(value)
|
||||
return str(value)
|
||||
|
||||
|
||||
def collect_navigation(
|
||||
config_path: str | Path,
|
||||
output_dir: str | Path,
|
||||
*,
|
||||
signalsim_path: str | Path | None = None,
|
||||
selected_prns: list[int] | None = None,
|
||||
) -> tuple[dict[str, Any], bool]:
|
||||
"""Decode navigation using samples/prompts only; truth is not accepted here."""
|
||||
config_file = Path(config_path).resolve()
|
||||
root = config_file.parent.parent
|
||||
cfg = yaml.safe_load(config_file.read_text(encoding="utf-8"))
|
||||
source = Path(signalsim_path or root / cfg["signalsim"]["path"]).resolve()
|
||||
samples_path = root / cfg["signalsim"]["samples"]
|
||||
if not samples_path.is_file():
|
||||
subprocess.run(
|
||||
[
|
||||
str(root / "tools" / "generate_signalsim_vectors.py"),
|
||||
"--signalsim-path", str(source), "--vector", cfg["signalsim"]["vector"],
|
||||
"--project-root", str(root),
|
||||
],
|
||||
check=True,
|
||||
)
|
||||
out = Path(output_dir).resolve()
|
||||
out.mkdir(parents=True, exist_ok=True)
|
||||
fs = float(cfg["rf"]["sampling_frequency_hz"])
|
||||
if_hz = float(cfg["rf"]["intermediate_frequency_hz"])
|
||||
prns = selected_prns or [int(item) for item in cfg["satellites"]["prns"]]
|
||||
expected_doppler = {int(key): float(value) for key, value in cfg["satellites"]["expected_doppler_hz"].items()}
|
||||
samples = SignalSimReader(samples_path, SignalSimSampleSpec(cfg["signalsim"]["sample_format"]), memory_map=True).read()
|
||||
profile = galileo_e1_profile()
|
||||
provider = SignalSimCodeProvider(source)
|
||||
acquisition_cfg = AcquisitionConfig(**cfg["acquisition"], parallelism="doppler_vectorized")
|
||||
acquisition_manager = AcquisitionManager(profile, provider, fs, acquisition_cfg)
|
||||
acquisition_sample_count = acquisition_manager.engine.coherent_samples * acquisition_cfg.noncoherent_accumulations
|
||||
primary_samples = int(round(fs * profile.component("E1B").primary_code_period_s))
|
||||
store = NavigationStore()
|
||||
satellites: dict[int, dict[str, Any]] = {}
|
||||
|
||||
for prn in prns:
|
||||
started = time.perf_counter()
|
||||
acquisition, _ = acquisition_manager.acquire_one(
|
||||
samples[:acquisition_sample_count], "E1B", prn, if_hz
|
||||
)
|
||||
acquired_s = time.perf_counter() - started
|
||||
start_sample = int(round(
|
||||
acquisition.code_phase_samples
|
||||
+ math.ceil((acquisition_sample_count - acquisition.code_phase_samples) / primary_samples) * primary_samples
|
||||
))
|
||||
tracking_values = cfg["tracking"]
|
||||
tracking_config = TrackingConfig(
|
||||
integration_ms=float(tracking_values["integration_ms"]),
|
||||
pull_in_duration_ms=float(tracking_values["pull_in_duration_ms"]),
|
||||
pll_noise_bandwidth_hz=float(tracking_values["pll_noise_bandwidth_hz"]),
|
||||
fll_noise_bandwidth_hz=float(tracking_values["fll_noise_bandwidth_hz"]),
|
||||
dll_noise_bandwidth_hz=float(tracking_values["dll_noise_bandwidth_hz"]),
|
||||
secondary_code_mode="none",
|
||||
loss_of_lock_epochs=40,
|
||||
)
|
||||
tracking_started = time.perf_counter()
|
||||
channel = TrackingChannel(profile, provider, fs, tracking_config, acquisition, start_sample)
|
||||
measurements = channel.process(samples[start_sample:])
|
||||
tracking_elapsed_s = time.perf_counter() - tracking_started
|
||||
prompt_stream = E1BPromptStream(prn, fs)
|
||||
prompts = prompt_stream.extend(measurements)
|
||||
nav_cfg = cfg["navigation"]
|
||||
pipeline = InavNavigationPipeline(
|
||||
prn,
|
||||
store=store,
|
||||
minimum_symbol_confidence=float(tracking_values["minimum_confidence"]),
|
||||
maximum_sync_errors=int(nav_cfg["maximum_sync_errors"]),
|
||||
page_sync_confirmations=int(nav_cfg["page_sync_confirmations"]),
|
||||
viterbi_traceback_depth=int(nav_cfg["viterbi_traceback_depth"]),
|
||||
)
|
||||
decoding_started = time.perf_counter()
|
||||
decoded = pipeline.process(prompts)
|
||||
decoding_elapsed_s = time.perf_counter() - decoding_started
|
||||
|
||||
artifact_dir = root / "verification" / "navigation" / "signalsim_navigation_multisat" / f"prn_{prn:02d}"
|
||||
save_prompt_epochs(artifact_dir / "prompt_epochs.npz", prompts)
|
||||
save_symbols(artifact_dir, decoded.symbols)
|
||||
write_json_lines(artifact_dir / "synchronized_pages.jsonl", decoded.page_parts)
|
||||
write_json_lines(artifact_dir / "fec_results.jsonl", decoded.pages)
|
||||
valid_pages = [page for page in decoded.pages if page.crc_valid]
|
||||
valid_bits = np.asarray([bit for page in valid_pages for bit in page.word_bits], dtype=np.uint8)
|
||||
np.packbits(valid_bits, bitorder="big").tofile(artifact_dir / "crc_valid_pages.bin")
|
||||
write_json_lines(artifact_dir / "parsed_words.jsonl", decoded.words)
|
||||
ephemeris = store.get_ephemeris(prn)
|
||||
if ephemeris is not None:
|
||||
(artifact_dir / "ephemeris.json").write_text(
|
||||
json.dumps(asdict(ephemeris), indent=2, default=_json_default) + "\n", encoding="utf-8"
|
||||
)
|
||||
status = store.get_decoder_status(prn)
|
||||
first_part = decoded.page_parts[0].receive_sample_timestamp if decoded.page_parts else None
|
||||
first_crc = next((page.receive_sample_timestamp for page in decoded.pages if page.crc_valid), None)
|
||||
summary = {
|
||||
"prn": prn,
|
||||
"acquisition_detected": acquisition.detected,
|
||||
"acquisition_time_s": acquired_s,
|
||||
"raw_doppler_hz": acquisition.raw_doppler_hz,
|
||||
"expected_doppler_hz": expected_doppler.get(prn),
|
||||
"start_sample_timestamp": start_sample,
|
||||
"tracking_epoch_count": len(measurements),
|
||||
"tracking_time_s": tracking_elapsed_s,
|
||||
"tracking_final_state": measurements[-1].state.value if measurements else None,
|
||||
"tracking_reacquisition_requests": sum(item.reacquisition_requested for item in measurements),
|
||||
"tracking_lock_timestamp": next((item.end_sample_timestamp for item in measurements if item.carrier_lock and item.code_lock), None),
|
||||
"prompt_epoch_count": len(prompts),
|
||||
"first_synchronized_symbol_timestamp": first_part,
|
||||
"first_page_sync_timestamp": first_part,
|
||||
"first_crc_valid_page_timestamp": first_crc,
|
||||
"page_parts": len(decoded.page_parts),
|
||||
"pages": len(decoded.pages),
|
||||
"crc_passes": status.crc_passes,
|
||||
"crc_failures": status.crc_failures,
|
||||
"fec_failures": status.fec_failures,
|
||||
"received_word_types": sorted(status.word_types),
|
||||
"missing_ephemeris_word_types": sorted(store.get_missing_ephemeris_words(prn)),
|
||||
"complete_ephemeris": ephemeris is not None,
|
||||
"ephemeris_iod_nav": ephemeris.iod_nav if ephemeris else None,
|
||||
"first_complete_ephemeris_timestamp": ephemeris.completed_timestamp if ephemeris else None,
|
||||
"clock_parameters": store.get_clock_parameters(prn) is not None,
|
||||
"health_valid": ephemeris.health_valid if ephemeris else False,
|
||||
"data_valid": ephemeris.data_valid if ephemeris else False,
|
||||
"decoding_time_s": decoding_elapsed_s,
|
||||
}
|
||||
(artifact_dir / "decoder_summary.json").write_text(
|
||||
json.dumps(summary, indent=2, default=_json_default) + "\n", encoding="utf-8"
|
||||
)
|
||||
satellites[prn] = summary
|
||||
|
||||
ready = store.navigation_ready(
|
||||
minimum_satellites=int(cfg["navigation"]["minimum_satellites"]),
|
||||
require_time=bool(cfg["navigation"]["require_time"]),
|
||||
require_healthy=bool(cfg["navigation"]["require_healthy"]),
|
||||
)
|
||||
report = {
|
||||
"decoder_truth_inputs": [],
|
||||
"icd": cfg["navigation"]["icd"],
|
||||
"signalsim_commit": subprocess.check_output(["git", "-C", str(source), "rev-parse", "HEAD"], text=True).strip(),
|
||||
"sample_file": str(samples_path),
|
||||
"sample_sha256": _file_hash(samples_path),
|
||||
"sample_count": int(samples.size),
|
||||
"sampling_frequency_hz": fs,
|
||||
"intermediate_frequency_hz": if_hz,
|
||||
"satellites": satellites,
|
||||
"galileo_time": asdict(store.get_time_solution()) if store.get_time_solution() else None,
|
||||
"navigation_ready": ready,
|
||||
}
|
||||
(out / "inav_collection_report.json").write_text(
|
||||
json.dumps(report, indent=2, default=_json_default) + "\n", encoding="utf-8"
|
||||
)
|
||||
rows = [
|
||||
"# Galileo I/NAV collection report", "",
|
||||
"The standalone decoder consumed tracked E1B prompts only; simulator ephemeris and time truth were not inputs.", "",
|
||||
"| PRN | Tracking | Symbol sync | Page sync | CRC pages | Complete ephemeris | Clock | Time | Ready |",
|
||||
"| --: | -------: | ----------: | --------: | --------: | -----------------: | ----: | ---: | ----: |",
|
||||
]
|
||||
for prn, item in satellites.items():
|
||||
sat_ready = item["complete_ephemeris"] and item["clock_parameters"] and item["health_valid"] and item["data_valid"] and report["galileo_time"] is not None
|
||||
rows.append(
|
||||
f"| {prn} | {item['tracking_final_state']} | {item['first_synchronized_symbol_timestamp'] is not None} | "
|
||||
f"{item['page_parts']} | {item['crc_passes']} | {item['complete_ephemeris']} | "
|
||||
f"{item['clock_parameters']} | {report['galileo_time'] is not None} | {sat_ready} |"
|
||||
)
|
||||
(out / "inav_collection_report.md").write_text("\n".join(rows) + "\n", encoding="utf-8")
|
||||
return report, ready
|
||||
@@ -0,0 +1,104 @@
|
||||
"""Serialization helpers for reproducible navigation-decoder evidence."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import asdict, is_dataclass
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Any, Iterable
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .e1b_prompt_stream import E1BPromptEpoch
|
||||
from .e1b_symbol_sync import NavigationSymbol
|
||||
|
||||
|
||||
def _json_default(value: Any) -> Any:
|
||||
if is_dataclass(value):
|
||||
return asdict(value)
|
||||
if isinstance(value, np.generic):
|
||||
return value.item()
|
||||
if isinstance(value, np.ndarray):
|
||||
return value.tolist()
|
||||
if isinstance(value, set):
|
||||
return sorted(value)
|
||||
raise TypeError(f"cannot serialize {type(value).__name__}")
|
||||
|
||||
|
||||
def write_json_lines(path: str | Path, records: Iterable[Any]) -> None:
|
||||
destination = Path(path)
|
||||
destination.parent.mkdir(parents=True, exist_ok=True)
|
||||
with destination.open("w", encoding="utf-8") as stream:
|
||||
for record in records:
|
||||
stream.write(json.dumps(record, default=_json_default, sort_keys=True) + "\n")
|
||||
|
||||
|
||||
def save_prompt_epochs(path: str | Path, epochs: list[E1BPromptEpoch]) -> None:
|
||||
destination = Path(path)
|
||||
destination.parent.mkdir(parents=True, exist_ok=True)
|
||||
np.savez_compressed(
|
||||
destination,
|
||||
start_sample_timestamp=np.asarray([item.start_sample_timestamp for item in epochs], dtype=np.int64),
|
||||
end_sample_timestamp=np.asarray([item.end_sample_timestamp for item in epochs], dtype=np.int64),
|
||||
prompt_i=np.asarray([item.prompt_i for item in epochs], dtype=np.float64),
|
||||
prompt_q=np.asarray([item.prompt_q for item in epochs], dtype=np.float64),
|
||||
carrier_phase_cycles=np.asarray([item.carrier_phase_cycles for item in epochs], dtype=np.float64),
|
||||
carrier_frequency_hz=np.asarray([item.carrier_frequency_hz for item in epochs], dtype=np.float64),
|
||||
code_phase_chips=np.asarray([item.code_phase_chips for item in epochs], dtype=np.float64),
|
||||
cn0_db_hz=np.asarray([
|
||||
np.nan if item.cn0_db_hz is None else item.cn0_db_hz for item in epochs
|
||||
], dtype=np.float64),
|
||||
carrier_lock=np.asarray([item.carrier_lock for item in epochs], dtype=np.bool_),
|
||||
code_lock=np.asarray([item.code_lock for item in epochs], dtype=np.bool_),
|
||||
cycle_slip=np.asarray([item.cycle_slip for item in epochs], dtype=np.bool_),
|
||||
sample_discontinuity=np.asarray([item.sample_discontinuity for item in epochs], dtype=np.bool_),
|
||||
valid=np.asarray([item.valid for item in epochs], dtype=np.bool_),
|
||||
)
|
||||
|
||||
|
||||
def load_prompt_epochs(path: str | Path, prn: int) -> list[E1BPromptEpoch]:
|
||||
with np.load(Path(path), allow_pickle=False) as values:
|
||||
count = int(values["prompt_i"].size)
|
||||
required = {
|
||||
"start_sample_timestamp", "end_sample_timestamp", "prompt_i", "prompt_q",
|
||||
"carrier_phase_cycles", "carrier_frequency_hz", "code_phase_chips", "valid",
|
||||
}
|
||||
if not required <= set(values.files):
|
||||
raise ValueError(f"prompt artifact is missing arrays: {sorted(required - set(values.files))}")
|
||||
# Artifacts written before the navigation milestone did not preserve
|
||||
# these quality flags. Retain backward readability, but never infer a
|
||||
# C/N0 value that was not recorded.
|
||||
has_quality = {
|
||||
"cn0_db_hz", "carrier_lock", "code_lock", "cycle_slip", "sample_discontinuity",
|
||||
} <= set(values.files)
|
||||
return [
|
||||
E1BPromptEpoch(
|
||||
prn=int(prn),
|
||||
start_sample_timestamp=int(values["start_sample_timestamp"][index]),
|
||||
end_sample_timestamp=int(values["end_sample_timestamp"][index]),
|
||||
prompt_i=float(np.float64(values["prompt_i"][index])),
|
||||
prompt_q=float(np.float64(values["prompt_q"][index])),
|
||||
carrier_phase_cycles=float(np.float64(values["carrier_phase_cycles"][index])),
|
||||
carrier_frequency_hz=float(np.float64(values["carrier_frequency_hz"][index])),
|
||||
code_phase_chips=float(np.float64(values["code_phase_chips"][index])),
|
||||
cn0_db_hz=(
|
||||
None if not has_quality or np.isnan(values["cn0_db_hz"][index])
|
||||
else float(np.float64(values["cn0_db_hz"][index]))
|
||||
),
|
||||
carrier_lock=bool(values["carrier_lock"][index]) if has_quality else True,
|
||||
code_lock=bool(values["code_lock"][index]) if has_quality else True,
|
||||
cycle_slip=bool(values["cycle_slip"][index]) if has_quality else False,
|
||||
sample_discontinuity=bool(values["sample_discontinuity"][index]) if has_quality else False,
|
||||
valid=bool(values["valid"][index]),
|
||||
)
|
||||
for index in range(count)
|
||||
]
|
||||
|
||||
|
||||
def save_symbols(directory: str | Path, symbols: list[NavigationSymbol]) -> None:
|
||||
target = Path(directory)
|
||||
target.mkdir(parents=True, exist_ok=True)
|
||||
soft = np.asarray([item.soft_value for item in symbols], dtype=np.float64)
|
||||
hard = np.asarray([item.hard_value for item in symbols], dtype=np.uint8)
|
||||
np.save(target / "soft_symbols.npy", soft)
|
||||
np.packbits(hard, bitorder="big").tofile(target / "hard_symbols.bin")
|
||||
@@ -0,0 +1,98 @@
|
||||
"""Lossless 4 ms E1B prompt-epoch records for navigation decoding."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
import numpy as np
|
||||
|
||||
from galileo_rx.types import TrackingMeasurement
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class E1BPromptEpoch:
|
||||
prn: int
|
||||
start_sample_timestamp: int
|
||||
end_sample_timestamp: int
|
||||
prompt_i: float
|
||||
prompt_q: float
|
||||
carrier_phase_cycles: float
|
||||
carrier_frequency_hz: float
|
||||
code_phase_chips: float
|
||||
cn0_db_hz: float | None
|
||||
carrier_lock: bool
|
||||
code_lock: bool
|
||||
cycle_slip: bool
|
||||
sample_discontinuity: bool
|
||||
valid: bool
|
||||
|
||||
|
||||
class E1BPromptStream:
|
||||
"""Combine contiguous tracking dumps into primary-code (4 ms) epochs.
|
||||
|
||||
The tracker may run at 2 ms during pull-in. Complex dumps are retained and
|
||||
coherently combined only when their timestamps form one complete 4 ms E1B
|
||||
primary-code interval. A gap produces an invalid discontinuity record rather
|
||||
than silently joining unrelated samples.
|
||||
"""
|
||||
|
||||
def __init__(self, prn: int, sampling_frequency_hz: float, primary_period_s: float = 0.004) -> None:
|
||||
if prn <= 0 or sampling_frequency_hz <= 0.0 or primary_period_s <= 0.0:
|
||||
raise ValueError("PRN, sampling frequency, and primary period must be positive")
|
||||
self.prn = int(prn)
|
||||
self.sampling_frequency_hz = np.float64(sampling_frequency_hz)
|
||||
self.primary_samples = int(round(float(self.sampling_frequency_hz) * primary_period_s))
|
||||
if not np.isclose(self.primary_samples, self.sampling_frequency_hz * primary_period_s, atol=1e-9):
|
||||
raise ValueError("E1B primary period must contain an integer sample count")
|
||||
self._pending: list[TrackingMeasurement] = []
|
||||
self.epochs: list[E1BPromptEpoch] = []
|
||||
|
||||
def reset(self) -> None:
|
||||
self._pending.clear()
|
||||
|
||||
def append(self, measurement: TrackingMeasurement) -> E1BPromptEpoch | None:
|
||||
if measurement.end_sample_timestamp <= measurement.start_sample_timestamp:
|
||||
raise ValueError("tracking measurement has a non-positive timestamp span")
|
||||
if self._pending and measurement.start_sample_timestamp != self._pending[-1].end_sample_timestamp:
|
||||
self._pending.clear()
|
||||
measurement.sample_discontinuity = True
|
||||
self._pending.append(measurement)
|
||||
span = self._pending[-1].end_sample_timestamp - self._pending[0].start_sample_timestamp
|
||||
if span < self.primary_samples:
|
||||
return None
|
||||
if span > self.primary_samples:
|
||||
self._pending.clear()
|
||||
raise ValueError("tracking integration boundaries do not tile one 4 ms E1B epoch")
|
||||
items = self._pending
|
||||
self._pending = []
|
||||
prompt = np.sum(
|
||||
np.asarray([complex(item.prompt_i, item.prompt_q) for item in items], dtype=np.complex128),
|
||||
dtype=np.complex128,
|
||||
)
|
||||
last = items[-1]
|
||||
epoch = E1BPromptEpoch(
|
||||
prn=self.prn,
|
||||
start_sample_timestamp=items[0].start_sample_timestamp,
|
||||
end_sample_timestamp=last.end_sample_timestamp,
|
||||
prompt_i=float(np.float64(prompt.real)),
|
||||
prompt_q=float(np.float64(prompt.imag)),
|
||||
carrier_phase_cycles=float(np.float64(last.carrier_phase_cycles)),
|
||||
carrier_frequency_hz=float(np.float64(last.carrier_frequency_hz)),
|
||||
code_phase_chips=float(np.float64(last.code_phase_chips)),
|
||||
cn0_db_hz=last.cn0_db_hz,
|
||||
carrier_lock=all(item.carrier_lock for item in items),
|
||||
code_lock=all(item.code_lock for item in items),
|
||||
cycle_slip=any(item.cycle_slip for item in items),
|
||||
sample_discontinuity=any(item.sample_discontinuity for item in items),
|
||||
valid=all(item.valid for item in items),
|
||||
)
|
||||
self.epochs.append(epoch)
|
||||
return epoch
|
||||
|
||||
def extend(self, measurements: list[TrackingMeasurement]) -> list[E1BPromptEpoch]:
|
||||
output: list[E1BPromptEpoch] = []
|
||||
for measurement in measurements:
|
||||
epoch = self.append(measurement)
|
||||
if epoch is not None:
|
||||
output.append(epoch)
|
||||
return output
|
||||
@@ -0,0 +1,86 @@
|
||||
"""Carrier-ambiguity-preserving E1B navigation-symbol recovery."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .e1b_prompt_stream import E1BPromptEpoch
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class NavigationSymbol:
|
||||
prn: int
|
||||
symbol_index: int
|
||||
start_sample_timestamp: int
|
||||
end_sample_timestamp: int
|
||||
soft_value: float
|
||||
hard_value: int
|
||||
confidence: float
|
||||
inverted: bool
|
||||
valid: bool
|
||||
|
||||
|
||||
class E1BSymbolSynchronizer:
|
||||
"""Project complex prompts onto a BPSK axis without resolving its sign.
|
||||
|
||||
``soft_value > 0`` is evidence for the synchronizer's provisional bit 1.
|
||||
The 180-degree carrier ambiguity remains explicit and is resolved later from
|
||||
repeated official page synchronization patterns. It is never hidden here.
|
||||
"""
|
||||
|
||||
def __init__(self, minimum_axis_epochs: int = 8, minimum_confidence: float = 0.25) -> None:
|
||||
if minimum_axis_epochs < 2 or not 0.0 <= minimum_confidence <= 1.0:
|
||||
raise ValueError("invalid E1B symbol synchronizer settings")
|
||||
self.minimum_axis_epochs = int(minimum_axis_epochs)
|
||||
self.minimum_confidence = np.float64(minimum_confidence)
|
||||
self.symbol_index = 0
|
||||
self.axis_accumulator = np.complex128(0.0j)
|
||||
self.axis_epochs = 0
|
||||
self.loss_count = 0
|
||||
self.symbols: list[NavigationSymbol] = []
|
||||
|
||||
def reset(self) -> None:
|
||||
self.axis_accumulator = np.complex128(0.0j)
|
||||
self.axis_epochs = 0
|
||||
self.loss_count += 1
|
||||
|
||||
def process(self, epoch: E1BPromptEpoch) -> NavigationSymbol:
|
||||
discontinuity = epoch.cycle_slip or epoch.sample_discontinuity
|
||||
if discontinuity:
|
||||
self.reset()
|
||||
prompt = np.complex128(complex(epoch.prompt_i, epoch.prompt_q))
|
||||
if epoch.valid and epoch.carrier_lock and epoch.code_lock and abs(prompt) > 0.0:
|
||||
# Squaring removes BPSK data modulation while retaining twice the
|
||||
# carrier-axis phase. complex128 is mandatory in the reference path.
|
||||
self.axis_accumulator += prompt * prompt
|
||||
self.axis_epochs += 1
|
||||
axis_rad = np.float64(0.5 * np.angle(self.axis_accumulator)) if self.axis_epochs else np.float64(0.0)
|
||||
projected = np.float64((prompt * np.exp(-1j * axis_rad)).real)
|
||||
confidence = np.float64(abs(projected) / max(float(abs(prompt)), np.finfo(np.float64).tiny))
|
||||
valid = bool(
|
||||
epoch.valid
|
||||
and epoch.carrier_lock
|
||||
and epoch.code_lock
|
||||
and not discontinuity
|
||||
and self.axis_epochs >= self.minimum_axis_epochs
|
||||
and confidence >= self.minimum_confidence
|
||||
)
|
||||
symbol = NavigationSymbol(
|
||||
prn=epoch.prn,
|
||||
symbol_index=self.symbol_index,
|
||||
start_sample_timestamp=epoch.start_sample_timestamp,
|
||||
end_sample_timestamp=epoch.end_sample_timestamp,
|
||||
soft_value=float(projected),
|
||||
hard_value=int(projected >= 0.0),
|
||||
confidence=float(confidence),
|
||||
inverted=False,
|
||||
valid=valid,
|
||||
)
|
||||
self.symbol_index += 1
|
||||
self.symbols.append(symbol)
|
||||
return symbol
|
||||
|
||||
def process_many(self, epochs: list[E1BPromptEpoch]) -> list[NavigationSymbol]:
|
||||
return [self.process(epoch) for epoch in epochs]
|
||||
@@ -0,0 +1,55 @@
|
||||
"""Galileo System Time recovery from CRC-valid I/NAV words."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime, timedelta, timezone
|
||||
|
||||
from .inav_word_parser import GstUtcWord6, IonosphereHealthTimeWord5, ParsedInavWord
|
||||
|
||||
|
||||
GST_EPOCH_UTC = datetime(1999, 8, 22, tzinfo=timezone.utc) - timedelta(seconds=13)
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class GalileoSystemTime:
|
||||
week_number: int
|
||||
time_of_week_s: int
|
||||
page_start_sample_timestamp: int
|
||||
source_word_type: int
|
||||
valid: bool
|
||||
|
||||
@property
|
||||
def total_seconds(self) -> int:
|
||||
return self.week_number * 604800 + self.time_of_week_s
|
||||
|
||||
|
||||
class GalileoTimeRecovery:
|
||||
def __init__(self) -> None:
|
||||
self.current: GalileoSystemTime | None = None
|
||||
self.utc_parameters: GstUtcWord6 | None = None
|
||||
|
||||
def update(self, word: ParsedInavWord) -> GalileoSystemTime | None:
|
||||
if not word.crc_valid:
|
||||
return None
|
||||
if isinstance(word.payload, IonosphereHealthTimeWord5):
|
||||
self.current = GalileoSystemTime(
|
||||
word.payload.week_number,
|
||||
word.payload.time_of_week_s,
|
||||
word.receive_sample_timestamp,
|
||||
word.word_type,
|
||||
0 <= word.payload.time_of_week_s < 604800,
|
||||
)
|
||||
return self.current
|
||||
if isinstance(word.payload, GstUtcWord6):
|
||||
self.utc_parameters = word.payload
|
||||
if self.current is not None:
|
||||
self.current = GalileoSystemTime(
|
||||
self.current.week_number,
|
||||
word.payload.time_of_week_s,
|
||||
word.receive_sample_timestamp,
|
||||
word.word_type,
|
||||
0 <= word.payload.time_of_week_s < 604800,
|
||||
)
|
||||
return self.current
|
||||
return None
|
||||
@@ -0,0 +1,40 @@
|
||||
"""Bit-exact Galileo CRC-24Q (OS SIS ICD 2.2, Section 5.1.9.4)."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import numpy as np
|
||||
import numpy.typing as npt
|
||||
|
||||
|
||||
CRC24Q_POLYNOMIAL = 0x1864CFB
|
||||
CRC24Q_MASK = 0xFFFFFF
|
||||
|
||||
|
||||
def crc24q(bits: npt.ArrayLike) -> int:
|
||||
values = np.asarray(bits, dtype=np.int8).reshape(-1)
|
||||
if not np.all((values == 0) | (values == 1)):
|
||||
raise ValueError("CRC input must contain only bits 0 and 1")
|
||||
remainder = 0
|
||||
polynomial_without_msb = CRC24Q_POLYNOMIAL & CRC24Q_MASK
|
||||
for bit in values:
|
||||
feedback = ((remainder >> 23) & 1) ^ int(bit)
|
||||
remainder = (remainder << 1) & CRC24Q_MASK
|
||||
if feedback:
|
||||
remainder ^= polynomial_without_msb
|
||||
return remainder
|
||||
|
||||
|
||||
def bits_to_uint(bits: npt.ArrayLike) -> int:
|
||||
value = 0
|
||||
for bit in np.asarray(bits, dtype=np.int8).reshape(-1):
|
||||
if int(bit) not in (0, 1):
|
||||
raise ValueError("input must contain only bits")
|
||||
value = (value << 1) | int(bit)
|
||||
return value
|
||||
|
||||
|
||||
def validate_crc24q(protected_bits: npt.ArrayLike, received_crc_bits: npt.ArrayLike) -> bool:
|
||||
crc_bits = np.asarray(received_crc_bits, dtype=np.int8).reshape(-1)
|
||||
if crc_bits.size != 24:
|
||||
raise ValueError("Galileo CRC field must contain 24 bits")
|
||||
return crc24q(protected_bits) == bits_to_uint(crc_bits)
|
||||
@@ -0,0 +1,31 @@
|
||||
"""Galileo I/NAV 30-column by 8-row block deinterleaver."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import numpy as np
|
||||
import numpy.typing as npt
|
||||
|
||||
|
||||
INAV_CODED_SYMBOLS = 240
|
||||
INAV_INTERLEAVER_COLUMNS = 30
|
||||
INAV_INTERLEAVER_ROWS = 8
|
||||
|
||||
|
||||
def deinterleave_inav(values: npt.ArrayLike) -> npt.NDArray:
|
||||
"""Undo ICD Table 27 write-by-column/read-by-row ordering."""
|
||||
array = np.asarray(values)
|
||||
if array.ndim != 1 or array.size != INAV_CODED_SYMBOLS:
|
||||
raise ValueError("an I/NAV page part must contain exactly 240 coded symbols")
|
||||
return np.ascontiguousarray(
|
||||
array.reshape(INAV_INTERLEAVER_ROWS, INAV_INTERLEAVER_COLUMNS).T.reshape(-1)
|
||||
)
|
||||
|
||||
|
||||
def interleave_inav_reference(values: npt.ArrayLike) -> npt.NDArray:
|
||||
"""Reference inverse used for diagnostics, not decoder validation vectors."""
|
||||
array = np.asarray(values)
|
||||
if array.ndim != 1 or array.size != INAV_CODED_SYMBOLS:
|
||||
raise ValueError("an I/NAV encoded page part must contain exactly 240 symbols")
|
||||
return np.ascontiguousarray(
|
||||
array.reshape(INAV_INTERLEAVER_COLUMNS, INAV_INTERLEAVER_ROWS).T.reshape(-1)
|
||||
)
|
||||
@@ -0,0 +1,140 @@
|
||||
"""Atomic, IOD-consistent assembly of Galileo ephemeris and clock words."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
from .inav_word_parser import (
|
||||
EphemerisClockWord4,
|
||||
EphemerisWord1,
|
||||
EphemerisWord2,
|
||||
EphemerisWord3,
|
||||
IonosphereHealthTimeWord5,
|
||||
ParsedInavWord,
|
||||
)
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class GalileoEphemeris:
|
||||
prn: int
|
||||
iod_nav: int
|
||||
toe_s: float
|
||||
toc_s: float
|
||||
sqrt_a: float
|
||||
eccentricity: float
|
||||
inclination_rad: float
|
||||
omega0_rad: float
|
||||
argument_of_perigee_rad: float
|
||||
mean_anomaly_rad: float
|
||||
delta_n_rad_s: float
|
||||
inclination_rate_rad_s: float
|
||||
omega_dot_rad_s: float
|
||||
cuc_rad: float
|
||||
cus_rad: float
|
||||
crc_m: float
|
||||
crs_m: float
|
||||
cic_rad: float
|
||||
cis_rad: float
|
||||
clock_bias_s: float
|
||||
clock_drift_s_per_s: float
|
||||
clock_drift_rate_s_per_s2: float
|
||||
sisa_index: int
|
||||
health_valid: bool
|
||||
data_valid: bool
|
||||
first_received_timestamp: int
|
||||
completed_timestamp: int
|
||||
|
||||
|
||||
@dataclass(slots=True)
|
||||
class _PartialSet:
|
||||
words: dict[int, ParsedInavWord] = field(default_factory=dict)
|
||||
first_received_timestamp: int = 0
|
||||
last_received_timestamp: int = 0
|
||||
|
||||
|
||||
class InavEphemerisAssembler:
|
||||
required_word_types = frozenset({1, 2, 3, 4})
|
||||
|
||||
def __init__(self, prn: int, *, max_partial_age_samples: int | None = None) -> None:
|
||||
self.prn = int(prn)
|
||||
if max_partial_age_samples is not None and max_partial_age_samples <= 0:
|
||||
raise ValueError("max_partial_age_samples must be positive")
|
||||
self.max_partial_age_samples = max_partial_age_samples
|
||||
self._partials: dict[int, _PartialSet] = {}
|
||||
self.latest_health: IonosphereHealthTimeWord5 | None = None
|
||||
self.current: GalileoEphemeris | None = None
|
||||
self.previous: GalileoEphemeris | None = None
|
||||
self.rejected_mixed_sets = 0
|
||||
self.stale_partial_sets = 0
|
||||
|
||||
def update(self, word: ParsedInavWord) -> GalileoEphemeris | None:
|
||||
if word.prn != self.prn or not word.crc_valid:
|
||||
raise ValueError("assembler accepts only CRC-valid words for its PRN")
|
||||
if word.word_type == 5 and isinstance(word.payload, IonosphereHealthTimeWord5):
|
||||
self.latest_health = word.payload
|
||||
return None
|
||||
if word.word_type not in self.required_word_types or word.iod_nav is None:
|
||||
return None
|
||||
if self.max_partial_age_samples is not None:
|
||||
stale = [
|
||||
iod for iod, item in self._partials.items()
|
||||
if word.receive_sample_timestamp - item.last_received_timestamp
|
||||
> self.max_partial_age_samples
|
||||
]
|
||||
for iod in stale:
|
||||
del self._partials[iod]
|
||||
self.stale_partial_sets += 1
|
||||
partial = self._partials.setdefault(
|
||||
word.iod_nav,
|
||||
_PartialSet(first_received_timestamp=word.receive_sample_timestamp),
|
||||
)
|
||||
partial.words[word.word_type] = word
|
||||
partial.last_received_timestamp = word.receive_sample_timestamp
|
||||
if not self.required_word_types <= partial.words.keys():
|
||||
return None
|
||||
complete = self._assemble(word.iod_nav, partial)
|
||||
if self.current is None or self.current.iod_nav != complete.iod_nav:
|
||||
self.previous = self.current
|
||||
self.current = complete
|
||||
else:
|
||||
self.current = complete
|
||||
# A committed set is immutable evidence, not an in-progress set. A
|
||||
# replacement begins in a fresh partial bucket and cannot disturb it.
|
||||
self._partials = {}
|
||||
return complete
|
||||
|
||||
def _assemble(self, iod_nav: int, partial: _PartialSet) -> GalileoEphemeris:
|
||||
w1 = partial.words[1].payload
|
||||
w2 = partial.words[2].payload
|
||||
w3 = partial.words[3].payload
|
||||
w4 = partial.words[4].payload
|
||||
if not isinstance(w1, EphemerisWord1) or not isinstance(w2, EphemerisWord2):
|
||||
raise TypeError("word 1/2 payload type mismatch")
|
||||
if not isinstance(w3, EphemerisWord3) or not isinstance(w4, EphemerisClockWord4):
|
||||
raise TypeError("word 3/4 payload type mismatch")
|
||||
if w4.svid not in (0, self.prn):
|
||||
raise ValueError(f"word 4 SVID {w4.svid} does not match tracking PRN {self.prn}")
|
||||
health = self.latest_health
|
||||
return GalileoEphemeris(
|
||||
prn=self.prn, iod_nav=iod_nav, toe_s=w1.toe_s, toc_s=w4.toc_s,
|
||||
sqrt_a=w1.sqrt_a, eccentricity=w1.eccentricity,
|
||||
inclination_rad=w2.inclination_rad, omega0_rad=w2.omega0_rad,
|
||||
argument_of_perigee_rad=w2.argument_of_perigee_rad, mean_anomaly_rad=w1.mean_anomaly_rad,
|
||||
delta_n_rad_s=w3.delta_n_rad_s, inclination_rate_rad_s=w2.inclination_rate_rad_s,
|
||||
omega_dot_rad_s=w3.omega_dot_rad_s, cuc_rad=w3.cuc_rad, cus_rad=w3.cus_rad,
|
||||
crc_m=w3.crc_m, crs_m=w3.crs_m, cic_rad=w4.cic_rad, cis_rad=w4.cis_rad,
|
||||
clock_bias_s=w4.clock_bias_s, clock_drift_s_per_s=w4.clock_drift_s_per_s,
|
||||
clock_drift_rate_s_per_s2=w4.clock_drift_rate_s_per_s2, sisa_index=w3.sisa_index,
|
||||
health_valid=health is not None and health.e1b_health == 0,
|
||||
data_valid=health is not None and health.e1b_data_validity_status == 0,
|
||||
first_received_timestamp=partial.first_received_timestamp,
|
||||
completed_timestamp=partial.last_received_timestamp,
|
||||
)
|
||||
|
||||
def missing_word_types(self) -> set[int]:
|
||||
if self.current is not None:
|
||||
return set()
|
||||
if not self._partials:
|
||||
return set(self.required_word_types)
|
||||
newest = max(self._partials.values(), key=lambda item: item.last_received_timestamp)
|
||||
return set(self.required_word_types - newest.words.keys())
|
||||
@@ -0,0 +1,135 @@
|
||||
"""Soft/hard Viterbi decoder for Galileo rate-1/2, K=7 convolutional FEC."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from typing import Literal
|
||||
|
||||
import numpy as np
|
||||
import numpy.typing as npt
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class FecDecodeResult:
|
||||
decoded_bits: list[int]
|
||||
path_metric: float
|
||||
corrected_error_metric: float
|
||||
valid: bool
|
||||
|
||||
|
||||
def _reverse_seven_bits(value: int) -> int:
|
||||
return int(f"{value:07b}"[::-1], 2)
|
||||
|
||||
|
||||
class InavViterbiDecoder:
|
||||
"""ICD 2.2 Table 26 decoder with deterministic predecessor tie-breaking."""
|
||||
|
||||
constraint_length = 7
|
||||
generator_polynomials_octal = (0o171, 0o133)
|
||||
|
||||
def __init__(self, traceback_depth: int = 35) -> None:
|
||||
if traceback_depth < 1:
|
||||
raise ValueError("traceback_depth must be positive")
|
||||
self.traceback_depth = int(traceback_depth)
|
||||
self._polynomials = tuple(_reverse_seven_bits(item) for item in self.generator_polynomials_octal)
|
||||
self._next = np.empty((64, 2), dtype=np.int16)
|
||||
self._outputs = np.empty((64, 2, 2), dtype=np.int8)
|
||||
for state in range(64):
|
||||
for bit in (0, 1):
|
||||
register = ((state << 1) | bit) & 0x7F
|
||||
self._next[state, bit] = register & 0x3F
|
||||
self._outputs[state, bit, 0] = (register & self._polynomials[0]).bit_count() & 1
|
||||
# Figure 13 explicitly inverts the second encoder branch.
|
||||
self._outputs[state, bit, 1] = ((register & self._polynomials[1]).bit_count() & 1) ^ 1
|
||||
|
||||
def decode(
|
||||
self,
|
||||
received: npt.ArrayLike,
|
||||
*,
|
||||
mode: Literal["soft", "hard"] = "soft",
|
||||
initial_state: int = 0,
|
||||
terminal_state: int | None = 0,
|
||||
) -> FecDecodeResult:
|
||||
values = np.asarray(received)
|
||||
if values.ndim != 1 or values.size == 0 or values.size % 2:
|
||||
raise ValueError("Viterbi input must be a nonempty even-length symbol vector")
|
||||
if initial_state not in range(64) or terminal_state is not None and terminal_state not in range(64):
|
||||
raise ValueError("Viterbi states must be in 0..63")
|
||||
if mode == "hard":
|
||||
hard = values.astype(np.int8, copy=False)
|
||||
if not np.all((hard == 0) | (hard == 1)):
|
||||
raise ValueError("hard Viterbi symbols must be 0 or 1")
|
||||
observations = hard.reshape(-1, 2)
|
||||
elif mode == "soft":
|
||||
observations = values.astype(np.float64, copy=False).reshape(-1, 2)
|
||||
if not np.all(np.isfinite(observations)):
|
||||
raise ValueError("soft Viterbi symbols must be finite")
|
||||
else:
|
||||
raise ValueError("Viterbi mode must be 'soft' or 'hard'")
|
||||
|
||||
steps = observations.shape[0]
|
||||
infinity = np.float64(np.inf)
|
||||
metrics = np.full(64, infinity, dtype=np.float64)
|
||||
metrics[initial_state] = 0.0
|
||||
predecessors = np.full((steps, 64), -1, dtype=np.int16)
|
||||
decisions = np.full((steps, 64), -1, dtype=np.int8)
|
||||
for index, observation in enumerate(observations):
|
||||
updated = np.full(64, infinity, dtype=np.float64)
|
||||
for state in range(64):
|
||||
if not np.isfinite(metrics[state]):
|
||||
continue
|
||||
for bit in (0, 1):
|
||||
target = int(self._next[state, bit])
|
||||
expected = self._outputs[state, bit]
|
||||
if mode == "hard":
|
||||
branch = np.float64(np.count_nonzero(observation != expected))
|
||||
else:
|
||||
expected_sign = np.where(expected == 1, 1.0, -1.0)
|
||||
branch = np.float64(-np.dot(observation, expected_sign))
|
||||
candidate = metrics[state] + branch
|
||||
# Strict comparison preserves the first (lowest state, then
|
||||
# input 0) predecessor for deterministic ties.
|
||||
if candidate < updated[target]:
|
||||
updated[target] = candidate
|
||||
predecessors[index, target] = state
|
||||
decisions[index, target] = bit
|
||||
metrics = updated
|
||||
|
||||
final_state = int(np.argmin(metrics)) if terminal_state is None else terminal_state
|
||||
if not np.isfinite(metrics[final_state]):
|
||||
return FecDecodeResult([], float("inf"), float("inf"), False)
|
||||
decoded = np.empty(steps, dtype=np.int8)
|
||||
state = final_state
|
||||
for index in range(steps - 1, -1, -1):
|
||||
decoded[index] = decisions[index, state]
|
||||
state = int(predecessors[index, state])
|
||||
if state < 0 and index:
|
||||
return FecDecodeResult([], float(metrics[final_state]), float("inf"), False)
|
||||
encoded = self.encode(decoded, initial_state=initial_state)
|
||||
received_hard = (
|
||||
values.astype(np.int8, copy=False)
|
||||
if mode == "hard"
|
||||
else np.where(values.astype(np.float64) >= 0.0, 1, 0).astype(np.int8)
|
||||
)
|
||||
corrected = float(np.count_nonzero(encoded != received_hard))
|
||||
tail_valid = decoded.size >= 6 and bool(np.all(decoded[-6:] == 0))
|
||||
state_valid = terminal_state is None or final_state == terminal_state
|
||||
return FecDecodeResult(
|
||||
decoded_bits=decoded.astype(int).tolist(),
|
||||
path_metric=float(metrics[final_state]),
|
||||
corrected_error_metric=corrected,
|
||||
valid=bool(tail_valid and state_valid),
|
||||
)
|
||||
|
||||
def encode(self, bits: npt.ArrayLike, *, initial_state: int = 0) -> npt.NDArray[np.int8]:
|
||||
"""Diagnostic encoder; decoder tests use the independent ICD Annex D vector."""
|
||||
source = np.asarray(bits, dtype=np.int8).reshape(-1)
|
||||
if not np.all((source == 0) | (source == 1)):
|
||||
raise ValueError("encoder bits must be 0 or 1")
|
||||
state = initial_state
|
||||
output = np.empty(source.size * 2, dtype=np.int8)
|
||||
for index, bit_value in enumerate(source):
|
||||
bit = int(bit_value)
|
||||
output[2 * index : 2 * index + 2] = self._outputs[state, bit]
|
||||
state = int(self._next[state, bit])
|
||||
return output
|
||||
@@ -0,0 +1,127 @@
|
||||
"""I/NAV page-part FEC decoding, nominal-page pairing, and CRC validation."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .inav_crc import validate_crc24q
|
||||
from .inav_deinterleaver import deinterleave_inav
|
||||
from .inav_fec import FecDecodeResult, InavViterbiDecoder
|
||||
from .inav_page_sync import INAV_SYNC_BITS, SynchronizedPagePart
|
||||
|
||||
|
||||
ERROR_SYNC = 1 << 0
|
||||
ERROR_FEC = 1 << 1
|
||||
ERROR_PAGE_LAYOUT = 1 << 2
|
||||
ERROR_CRC = 1 << 3
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class DecodedPagePart:
|
||||
source: SynchronizedPagePart
|
||||
decoded_bits: list[int]
|
||||
fec_result: FecDecodeResult
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class InavPage:
|
||||
prn: int
|
||||
page_sequence: int
|
||||
receive_sample_timestamp: int
|
||||
raw_symbols: list[int]
|
||||
decoded_bits: list[int]
|
||||
word_type: int | None
|
||||
sync_valid: bool
|
||||
fec_valid: bool
|
||||
crc_valid: bool
|
||||
polarity_inverted: bool
|
||||
decoder_metric: float
|
||||
error_flags: int
|
||||
word_bits: list[int] = field(default_factory=list)
|
||||
end_sample_timestamp: int = 0
|
||||
|
||||
|
||||
class InavPageDecoder:
|
||||
def __init__(self, *, soft_decision: bool = True, traceback_depth: int = 35) -> None:
|
||||
self.soft_decision = bool(soft_decision)
|
||||
self.viterbi = InavViterbiDecoder(traceback_depth)
|
||||
self._pending_even: DecodedPagePart | None = None
|
||||
self._page_sequence = 0
|
||||
|
||||
def decode_part(self, part: SynchronizedPagePart) -> DecodedPagePart:
|
||||
if part.hard_symbols.size != 250 or part.soft_symbols.size != 250:
|
||||
raise ValueError("a synchronized I/NAV page part must contain 250 symbols")
|
||||
if np.count_nonzero(part.hard_symbols[:10] != INAV_SYNC_BITS) > part.sync_errors:
|
||||
raise ValueError("page-part synchronization evidence is internally inconsistent")
|
||||
if self.soft_decision:
|
||||
coded = deinterleave_inav(part.soft_symbols[10:])
|
||||
result = self.viterbi.decode(coded, mode="soft", initial_state=0, terminal_state=0)
|
||||
else:
|
||||
coded = deinterleave_inav(part.hard_symbols[10:])
|
||||
result = self.viterbi.decode(coded, mode="hard", initial_state=0, terminal_state=0)
|
||||
return DecodedPagePart(part, result.decoded_bits, result)
|
||||
|
||||
def push(self, part: SynchronizedPagePart) -> InavPage | None:
|
||||
decoded = self.decode_part(part)
|
||||
bits = decoded.decoded_bits
|
||||
even_odd = bits[0] if len(bits) == 120 else None
|
||||
if even_odd == 0:
|
||||
self._pending_even = decoded
|
||||
return None
|
||||
if even_odd != 1 or self._pending_even is None:
|
||||
return None
|
||||
even = self._pending_even
|
||||
self._pending_even = None
|
||||
return self._pair(even, decoded)
|
||||
|
||||
def _pair(self, even: DecodedPagePart, odd: DecodedPagePart) -> InavPage:
|
||||
even_bits = np.asarray(even.decoded_bits, dtype=np.int8)
|
||||
odd_bits = np.asarray(odd.decoded_bits, dtype=np.int8)
|
||||
sync_valid = bool(even.source.sync_valid and odd.source.sync_valid)
|
||||
fec_valid = bool(even.fec_result.valid and odd.fec_result.valid)
|
||||
layout_valid = bool(
|
||||
even_bits.size == 120
|
||||
and odd_bits.size == 120
|
||||
and np.array_equal(even_bits[:2], [0, 0])
|
||||
and np.array_equal(odd_bits[:2], [1, 0])
|
||||
)
|
||||
word = np.concatenate((even_bits[2:114], odd_bits[2:18])) if layout_valid else np.empty(0, dtype=np.int8)
|
||||
protected = np.concatenate((even_bits[:114], odd_bits[:82])) if layout_valid else np.empty(0, dtype=np.int8)
|
||||
crc_valid = bool(layout_valid and validate_crc24q(protected, odd_bits[82:106]))
|
||||
error_flags = 0
|
||||
if not sync_valid:
|
||||
error_flags |= ERROR_SYNC
|
||||
if not fec_valid:
|
||||
error_flags |= ERROR_FEC
|
||||
if not layout_valid:
|
||||
error_flags |= ERROR_PAGE_LAYOUT
|
||||
if not crc_valid:
|
||||
error_flags |= ERROR_CRC
|
||||
page = InavPage(
|
||||
prn=even.source.prn,
|
||||
page_sequence=self._page_sequence,
|
||||
receive_sample_timestamp=even.source.receive_sample_timestamp,
|
||||
raw_symbols=np.concatenate((even.source.hard_symbols, odd.source.hard_symbols)).astype(int).tolist(),
|
||||
decoded_bits=np.concatenate((even_bits, odd_bits)).astype(int).tolist(),
|
||||
word_type=int(sum(int(bit) << (5 - index) for index, bit in enumerate(word[:6]))) if word.size >= 6 else None,
|
||||
sync_valid=sync_valid,
|
||||
fec_valid=fec_valid,
|
||||
crc_valid=crc_valid,
|
||||
polarity_inverted=even.source.polarity_inverted,
|
||||
decoder_metric=float(even.fec_result.path_metric + odd.fec_result.path_metric),
|
||||
error_flags=error_flags,
|
||||
word_bits=word.astype(int).tolist(),
|
||||
end_sample_timestamp=odd.source.end_sample_timestamp,
|
||||
)
|
||||
self._page_sequence += 1
|
||||
return page
|
||||
|
||||
def process_many(self, parts: list[SynchronizedPagePart]) -> list[InavPage]:
|
||||
pages: list[InavPage] = []
|
||||
for part in parts:
|
||||
page = self.push(part)
|
||||
if page is not None:
|
||||
pages.append(page)
|
||||
return pages
|
||||
@@ -0,0 +1,141 @@
|
||||
"""Robust Galileo I/NAV one-second page-part synchronization."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
import numpy as np
|
||||
import numpy.typing as npt
|
||||
|
||||
from .e1b_symbol_sync import NavigationSymbol
|
||||
|
||||
|
||||
INAV_SYNC_BITS = np.asarray([0, 1, 0, 1, 1, 0, 0, 0, 0, 0], dtype=np.int8)
|
||||
INAV_PAGE_PART_SYMBOLS = 250
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class SynchronizedPagePart:
|
||||
prn: int
|
||||
page_part_sequence: int
|
||||
receive_sample_timestamp: int
|
||||
end_sample_timestamp: int
|
||||
hard_symbols: npt.NDArray[np.int8]
|
||||
soft_symbols: npt.NDArray[np.float64]
|
||||
polarity_inverted: bool
|
||||
sync_errors: int
|
||||
sync_valid: bool
|
||||
|
||||
|
||||
class InavPageSynchronizer:
|
||||
"""Require repeated 250-symbol-spaced sync patterns before declaring lock."""
|
||||
|
||||
def __init__(self, maximum_sync_errors: int = 0, required_confirmations: int = 2) -> None:
|
||||
if maximum_sync_errors < 0 or maximum_sync_errors > INAV_SYNC_BITS.size:
|
||||
raise ValueError("invalid sync error allowance")
|
||||
if required_confirmations < 2:
|
||||
raise ValueError("at least two sync patterns are required")
|
||||
self.maximum_sync_errors = int(maximum_sync_errors)
|
||||
self.required_confirmations = int(required_confirmations)
|
||||
self._symbols: list[NavigationSymbol] = []
|
||||
self._locked_offset: int | None = None
|
||||
self._polarity_inverted = False
|
||||
self._next_emit_offset: int | None = None
|
||||
self._sequence = 0
|
||||
self._next_search_offset = 0
|
||||
self.consecutive_failures = 0
|
||||
self.total_failures = 0
|
||||
self.sync_confidence = np.float64(0.0)
|
||||
|
||||
@property
|
||||
def locked(self) -> bool:
|
||||
return self._locked_offset is not None
|
||||
|
||||
def reset(self) -> None:
|
||||
self._locked_offset = None
|
||||
self._next_emit_offset = None
|
||||
self.consecutive_failures = 0
|
||||
self.sync_confidence = np.float64(0.0)
|
||||
# Never rescan the complete history after a failed candidate. Keep only
|
||||
# enough overlap to find a sync word crossing the current buffer tail.
|
||||
self._next_search_offset = max(0, len(self._symbols) - INAV_PAGE_PART_SYMBOLS)
|
||||
|
||||
def _errors(self, offset: int, inverted: bool) -> int:
|
||||
raw = np.asarray([item.hard_value for item in self._symbols[offset : offset + 10]], dtype=np.int8)
|
||||
expected = 1 - INAV_SYNC_BITS if inverted else INAV_SYNC_BITS
|
||||
return int(np.count_nonzero(raw != expected))
|
||||
|
||||
def _try_acquire(self) -> None:
|
||||
confirmation_span = (self.required_confirmations - 1) * INAV_PAGE_PART_SYMBOLS + INAV_SYNC_BITS.size
|
||||
maximum_start = len(self._symbols) - confirmation_span
|
||||
for offset in range(self._next_search_offset, maximum_start + 1):
|
||||
self._next_search_offset = offset + 1
|
||||
if not all(
|
||||
all(item.valid for item in self._symbols[offset + step * INAV_PAGE_PART_SYMBOLS : offset + step * INAV_PAGE_PART_SYMBOLS + 10])
|
||||
for step in range(self.required_confirmations)
|
||||
):
|
||||
continue
|
||||
for inverted in (False, True):
|
||||
errors = [
|
||||
self._errors(offset + step * INAV_PAGE_PART_SYMBOLS, inverted)
|
||||
for step in range(self.required_confirmations)
|
||||
]
|
||||
if max(errors) <= self.maximum_sync_errors:
|
||||
self._locked_offset = offset
|
||||
self._next_emit_offset = offset
|
||||
self._polarity_inverted = inverted
|
||||
self.sync_confidence = np.float64(
|
||||
1.0 - sum(errors) / (self.required_confirmations * INAV_SYNC_BITS.size)
|
||||
)
|
||||
return
|
||||
|
||||
def _emit_ready(self) -> list[SynchronizedPagePart]:
|
||||
output: list[SynchronizedPagePart] = []
|
||||
while self._next_emit_offset is not None:
|
||||
offset = self._next_emit_offset
|
||||
if len(self._symbols) < offset + INAV_PAGE_PART_SYMBOLS:
|
||||
break
|
||||
errors = self._errors(offset, self._polarity_inverted)
|
||||
if errors > self.maximum_sync_errors:
|
||||
self.consecutive_failures += 1
|
||||
self.total_failures += 1
|
||||
self.reset()
|
||||
break
|
||||
segment = self._symbols[offset : offset + INAV_PAGE_PART_SYMBOLS]
|
||||
raw_hard = np.asarray([item.hard_value for item in segment], dtype=np.int8)
|
||||
raw_soft = np.asarray([item.soft_value for item in segment], dtype=np.float64)
|
||||
if self._polarity_inverted:
|
||||
raw_hard = 1 - raw_hard
|
||||
raw_soft = -raw_soft
|
||||
output.append(
|
||||
SynchronizedPagePart(
|
||||
prn=segment[0].prn,
|
||||
page_part_sequence=self._sequence,
|
||||
receive_sample_timestamp=segment[0].start_sample_timestamp,
|
||||
end_sample_timestamp=segment[-1].end_sample_timestamp,
|
||||
hard_symbols=raw_hard,
|
||||
soft_symbols=raw_soft,
|
||||
polarity_inverted=self._polarity_inverted,
|
||||
sync_errors=errors,
|
||||
sync_valid=True,
|
||||
)
|
||||
)
|
||||
self._sequence += 1
|
||||
self._next_emit_offset += INAV_PAGE_PART_SYMBOLS
|
||||
return output
|
||||
|
||||
def push(self, symbol: NavigationSymbol) -> list[SynchronizedPagePart]:
|
||||
if symbol.inverted:
|
||||
raise ValueError("symbol polarity must remain unresolved before page synchronization")
|
||||
if symbol.valid and self._symbols and symbol.start_sample_timestamp != self._symbols[-1].end_sample_timestamp:
|
||||
self.reset()
|
||||
self._symbols.append(symbol)
|
||||
if not self.locked:
|
||||
self._try_acquire()
|
||||
return self._emit_ready() if self.locked else []
|
||||
|
||||
def process_many(self, symbols: list[NavigationSymbol]) -> list[SynchronizedPagePart]:
|
||||
output: list[SynchronizedPagePart] = []
|
||||
for symbol in symbols:
|
||||
output.extend(self.push(symbol))
|
||||
return output
|
||||
@@ -0,0 +1,67 @@
|
||||
"""Composable prompt-to-navigation pipeline with no simulator-truth input."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
from .e1b_prompt_stream import E1BPromptEpoch
|
||||
from .e1b_symbol_sync import E1BSymbolSynchronizer, NavigationSymbol
|
||||
from .inav_page_decoder import InavPage, InavPageDecoder
|
||||
from .inav_page_sync import InavPageSynchronizer, SynchronizedPagePart
|
||||
from .inav_word_parser import InavWordParser, ParsedInavWord
|
||||
from .navigation_store import NavigationStore
|
||||
|
||||
|
||||
@dataclass(slots=True)
|
||||
class NavigationPipelineResult:
|
||||
symbols: list[NavigationSymbol]
|
||||
page_parts: list[SynchronizedPagePart]
|
||||
pages: list[InavPage]
|
||||
words: list[ParsedInavWord]
|
||||
|
||||
|
||||
class InavNavigationPipeline:
|
||||
def __init__(
|
||||
self,
|
||||
prn: int,
|
||||
*,
|
||||
store: NavigationStore | None = None,
|
||||
minimum_symbol_confidence: float = 0.1,
|
||||
maximum_sync_errors: int = 0,
|
||||
page_sync_confirmations: int = 2,
|
||||
viterbi_traceback_depth: int = 35,
|
||||
) -> None:
|
||||
self.prn = int(prn)
|
||||
self.symbol_sync = E1BSymbolSynchronizer(8, minimum_symbol_confidence)
|
||||
self.page_sync = InavPageSynchronizer(maximum_sync_errors, page_sync_confirmations)
|
||||
self.page_decoder = InavPageDecoder(soft_decision=True, traceback_depth=viterbi_traceback_depth)
|
||||
self.word_parser = InavWordParser()
|
||||
self.store = store or NavigationStore()
|
||||
|
||||
def process(self, epochs: list[E1BPromptEpoch]) -> NavigationPipelineResult:
|
||||
for epoch in epochs:
|
||||
if epoch.prn != self.prn:
|
||||
raise ValueError("pipeline received a prompt from a different PRN")
|
||||
self.store.update_prompt(epoch)
|
||||
symbols = self.symbol_sync.process_many(epochs)
|
||||
parts = self.page_sync.process_many(symbols)
|
||||
self.store.update_synchronizers(
|
||||
self.prn,
|
||||
symbol_count=len(symbols),
|
||||
symbol_locked=self.symbol_sync.axis_epochs >= self.symbol_sync.minimum_axis_epochs,
|
||||
symbol_loss_count=self.symbol_sync.loss_count,
|
||||
page_part_count=len(parts),
|
||||
page_locked=self.page_sync.locked,
|
||||
page_confidence=float(self.page_sync.sync_confidence),
|
||||
page_failures=self.page_sync.total_failures,
|
||||
)
|
||||
pages = self.page_decoder.process_many(parts)
|
||||
words: list[ParsedInavWord] = []
|
||||
for page in pages:
|
||||
self.store.update_page(page)
|
||||
if not page.crc_valid or page.word_type not in range(1, 7):
|
||||
continue
|
||||
word = self.word_parser.parse(page)
|
||||
self.store.update_word(word)
|
||||
words.append(word)
|
||||
return NavigationPipelineResult(symbols, parts, pages, words)
|
||||
@@ -0,0 +1,233 @@
|
||||
"""Typed Galileo I/NAV word parsers based on OS SIS ICD 2.2 Tables 42-47."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from math import pi
|
||||
from typing import TypeAlias
|
||||
|
||||
import numpy as np
|
||||
|
||||
from .inav_page_decoder import InavPage
|
||||
|
||||
|
||||
def _uint(bits: np.ndarray, start: int, width: int) -> int:
|
||||
value = 0
|
||||
for bit in bits[start : start + width]:
|
||||
value = (value << 1) | int(bit)
|
||||
return value
|
||||
|
||||
|
||||
def _sint(bits: np.ndarray, start: int, width: int) -> int:
|
||||
value = _uint(bits, start, width)
|
||||
return value - (1 << width) if value & (1 << (width - 1)) else value
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class EphemerisWord1:
|
||||
iod_nav: int
|
||||
toe_raw: int
|
||||
toe_s: float
|
||||
mean_anomaly_raw: int
|
||||
mean_anomaly_rad: float
|
||||
eccentricity_raw: int
|
||||
eccentricity: float
|
||||
sqrt_a_raw: int
|
||||
sqrt_a: float
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class EphemerisWord2:
|
||||
iod_nav: int
|
||||
omega0_raw: int
|
||||
omega0_rad: float
|
||||
inclination_raw: int
|
||||
inclination_rad: float
|
||||
argument_of_perigee_raw: int
|
||||
argument_of_perigee_rad: float
|
||||
inclination_rate_raw: int
|
||||
inclination_rate_rad_s: float
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class EphemerisWord3:
|
||||
iod_nav: int
|
||||
omega_dot_raw: int
|
||||
omega_dot_rad_s: float
|
||||
delta_n_raw: int
|
||||
delta_n_rad_s: float
|
||||
cuc_raw: int
|
||||
cuc_rad: float
|
||||
cus_raw: int
|
||||
cus_rad: float
|
||||
crc_raw: int
|
||||
crc_m: float
|
||||
crs_raw: int
|
||||
crs_m: float
|
||||
sisa_index: int
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class EphemerisClockWord4:
|
||||
iod_nav: int
|
||||
svid: int
|
||||
cic_raw: int
|
||||
cic_rad: float
|
||||
cis_raw: int
|
||||
cis_rad: float
|
||||
toc_raw: int
|
||||
toc_s: float
|
||||
clock_bias_raw: int
|
||||
clock_bias_s: float
|
||||
clock_drift_raw: int
|
||||
clock_drift_s_per_s: float
|
||||
clock_drift_rate_raw: int
|
||||
clock_drift_rate_s_per_s2: float
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class IonosphereHealthTimeWord5:
|
||||
ai0_raw: int
|
||||
ai0_sfu: float
|
||||
ai1_raw: int
|
||||
ai1_sfu_per_degree: float
|
||||
ai2_raw: int
|
||||
ai2_sfu_per_degree2: float
|
||||
disturbance_flags: tuple[bool, bool, bool, bool, bool]
|
||||
bgd_e1_e5a_raw: int
|
||||
bgd_e1_e5a_s: float
|
||||
bgd_e1_e5b_raw: int
|
||||
bgd_e1_e5b_s: float
|
||||
e5b_health: int
|
||||
e1b_health: int
|
||||
e5b_data_validity_status: int
|
||||
e1b_data_validity_status: int
|
||||
week_number: int
|
||||
time_of_week_s: int
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class GstUtcWord6:
|
||||
a0_raw: int
|
||||
a0_s: float
|
||||
a1_raw: int
|
||||
a1_s_per_s: float
|
||||
delta_tls_s: int
|
||||
reference_time_s: int
|
||||
reference_week_mod256: int
|
||||
leap_week_mod256: int
|
||||
leap_day: int
|
||||
future_delta_tls_s: int
|
||||
time_of_week_s: int
|
||||
|
||||
|
||||
CriticalInavPayload: TypeAlias = (
|
||||
EphemerisWord1
|
||||
| EphemerisWord2
|
||||
| EphemerisWord3
|
||||
| EphemerisClockWord4
|
||||
| IonosphereHealthTimeWord5
|
||||
| GstUtcWord6
|
||||
)
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class ParsedInavWord:
|
||||
prn: int
|
||||
word_type: int
|
||||
receive_sample_timestamp: int
|
||||
iod_nav: int | None
|
||||
payload: CriticalInavPayload
|
||||
raw_bits: list[int]
|
||||
crc_valid: bool
|
||||
health_valid: bool
|
||||
|
||||
|
||||
class InavWordParser:
|
||||
"""Parse the critical word types needed before a future PVT stage."""
|
||||
|
||||
def parse(self, page: InavPage) -> ParsedInavWord:
|
||||
if not page.crc_valid:
|
||||
raise ValueError("CRC-invalid pages cannot update parsed navigation data")
|
||||
bits = np.asarray(page.word_bits, dtype=np.int8)
|
||||
if bits.size != 128 or not np.all((bits == 0) | (bits == 1)):
|
||||
raise ValueError("I/NAV nominal word must contain 128 bits")
|
||||
word_type = _uint(bits, 0, 6)
|
||||
payload: CriticalInavPayload
|
||||
iod_nav: int | None = None
|
||||
health_valid = True
|
||||
if word_type == 1:
|
||||
iod_nav = _uint(bits, 6, 10)
|
||||
m0 = _sint(bits, 30, 32)
|
||||
payload = EphemerisWord1(
|
||||
iod_nav, _uint(bits, 16, 14), float(np.float64(_uint(bits, 16, 14) * 60.0)),
|
||||
m0, float(np.float64(m0 * 2.0**-31 * pi)),
|
||||
_uint(bits, 62, 32), float(np.float64(_uint(bits, 62, 32) * 2.0**-33)),
|
||||
_uint(bits, 94, 32), float(np.float64(_uint(bits, 94, 32) * 2.0**-19)),
|
||||
)
|
||||
elif word_type == 2:
|
||||
iod_nav = _uint(bits, 6, 10)
|
||||
omega0, inclination, perigee, rate = (
|
||||
_sint(bits, 16, 32), _sint(bits, 48, 32), _sint(bits, 80, 32), _sint(bits, 112, 14)
|
||||
)
|
||||
payload = EphemerisWord2(
|
||||
iod_nav, omega0, float(np.float64(omega0 * 2.0**-31 * pi)),
|
||||
inclination, float(np.float64(inclination * 2.0**-31 * pi)),
|
||||
perigee, float(np.float64(perigee * 2.0**-31 * pi)),
|
||||
rate, float(np.float64(rate * 2.0**-43 * pi)),
|
||||
)
|
||||
elif word_type == 3:
|
||||
iod_nav = _uint(bits, 6, 10)
|
||||
odot, dn = _sint(bits, 16, 24), _sint(bits, 40, 16)
|
||||
cuc, cus, crc_value, crs = (
|
||||
_sint(bits, 56, 16), _sint(bits, 72, 16), _sint(bits, 88, 16), _sint(bits, 104, 16)
|
||||
)
|
||||
payload = EphemerisWord3(
|
||||
iod_nav, odot, float(np.float64(odot * 2.0**-43 * pi)),
|
||||
dn, float(np.float64(dn * 2.0**-43 * pi)),
|
||||
cuc, float(np.float64(cuc * 2.0**-29)), cus, float(np.float64(cus * 2.0**-29)),
|
||||
crc_value, float(np.float64(crc_value * 2.0**-5)), crs, float(np.float64(crs * 2.0**-5)),
|
||||
_uint(bits, 120, 8),
|
||||
)
|
||||
elif word_type == 4:
|
||||
iod_nav = _uint(bits, 6, 10)
|
||||
cic, cis = _sint(bits, 22, 16), _sint(bits, 38, 16)
|
||||
af0, af1, af2 = _sint(bits, 68, 31), _sint(bits, 99, 21), _sint(bits, 120, 6)
|
||||
payload = EphemerisClockWord4(
|
||||
iod_nav, _uint(bits, 16, 6), cic, float(np.float64(cic * 2.0**-29)),
|
||||
cis, float(np.float64(cis * 2.0**-29)), _uint(bits, 54, 14),
|
||||
float(np.float64(_uint(bits, 54, 14) * 60.0)), af0, float(np.float64(af0 * 2.0**-34)),
|
||||
af1, float(np.float64(af1 * 2.0**-46)), af2, float(np.float64(af2 * 2.0**-59)),
|
||||
)
|
||||
elif word_type == 5:
|
||||
ai0, ai1, ai2 = _uint(bits, 6, 11), _sint(bits, 17, 11), _sint(bits, 28, 14)
|
||||
bgd_a, bgd_b = _sint(bits, 47, 10), _sint(bits, 57, 10)
|
||||
e1b_health, e1b_dvs = _uint(bits, 69, 2), _uint(bits, 72, 1)
|
||||
health_valid = e1b_health == 0 and e1b_dvs == 0
|
||||
payload = IonosphereHealthTimeWord5(
|
||||
ai0, float(np.float64(ai0 * 2.0**-2)), ai1, float(np.float64(ai1 * 2.0**-8)),
|
||||
ai2, float(np.float64(ai2 * 2.0**-15)),
|
||||
tuple(bool(_uint(bits, 42 + index, 1)) for index in range(5)),
|
||||
bgd_a, float(np.float64(bgd_a * 2.0**-32)), bgd_b, float(np.float64(bgd_b * 2.0**-32)),
|
||||
_uint(bits, 67, 2), e1b_health, _uint(bits, 71, 1), e1b_dvs,
|
||||
_uint(bits, 73, 12), _uint(bits, 85, 20),
|
||||
)
|
||||
elif word_type == 6:
|
||||
a0, a1 = _sint(bits, 6, 32), _sint(bits, 38, 24)
|
||||
payload = GstUtcWord6(
|
||||
a0, float(np.float64(a0 * 2.0**-30)), a1, float(np.float64(a1 * 2.0**-50)),
|
||||
_sint(bits, 62, 8), _uint(bits, 70, 8) * 3600, _uint(bits, 78, 8),
|
||||
_uint(bits, 86, 8), _uint(bits, 94, 3), _sint(bits, 97, 8), _uint(bits, 105, 20),
|
||||
)
|
||||
else:
|
||||
raise NotImplementedError(f"I/NAV word type {word_type} is not a critical pre-PVT word")
|
||||
return ParsedInavWord(
|
||||
prn=page.prn,
|
||||
word_type=word_type,
|
||||
receive_sample_timestamp=page.receive_sample_timestamp,
|
||||
iod_nav=iod_nav,
|
||||
payload=payload,
|
||||
raw_bits=bits.astype(int).tolist(),
|
||||
crc_valid=True,
|
||||
health_valid=health_valid,
|
||||
)
|
||||
@@ -0,0 +1,135 @@
|
||||
"""Per-PRN navigation decoder state and pre-PVT readiness queries."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
from .e1b_prompt_stream import E1BPromptEpoch
|
||||
from .galileo_time import GalileoSystemTime, GalileoTimeRecovery
|
||||
from .inav_ephemeris_assembler import GalileoEphemeris, InavEphemerisAssembler
|
||||
from .inav_page_decoder import InavPage
|
||||
from .inav_word_parser import EphemerisClockWord4, ParsedInavWord
|
||||
|
||||
|
||||
@dataclass(slots=True)
|
||||
class DecoderStatus:
|
||||
prompt_epochs: int = 0
|
||||
symbols: int = 0
|
||||
synchronized_page_parts: int = 0
|
||||
pages: int = 0
|
||||
crc_passes: int = 0
|
||||
crc_failures: int = 0
|
||||
fec_failures: int = 0
|
||||
cycle_slips: int = 0
|
||||
sample_discontinuities: int = 0
|
||||
word_types: set[int] = field(default_factory=set)
|
||||
symbol_sync_locked: bool = False
|
||||
symbol_sync_losses: int = 0
|
||||
page_sync_locked: bool = False
|
||||
page_sync_confidence: float = 0.0
|
||||
page_sync_failures: int = 0
|
||||
|
||||
|
||||
@dataclass(slots=True)
|
||||
class _SatelliteNavigation:
|
||||
assembler: InavEphemerisAssembler
|
||||
status: DecoderStatus = field(default_factory=DecoderStatus)
|
||||
last_prompt: E1BPromptEpoch | None = None
|
||||
last_valid_page: InavPage | None = None
|
||||
page_history: list[InavPage] = field(default_factory=list)
|
||||
word_history: list[ParsedInavWord] = field(default_factory=list)
|
||||
|
||||
|
||||
class NavigationStore:
|
||||
def __init__(self) -> None:
|
||||
self._satellites: dict[int, _SatelliteNavigation] = {}
|
||||
self.time_recovery = GalileoTimeRecovery()
|
||||
|
||||
def _state(self, prn: int) -> _SatelliteNavigation:
|
||||
if prn <= 0:
|
||||
raise ValueError("PRN must be positive")
|
||||
return self._satellites.setdefault(prn, _SatelliteNavigation(InavEphemerisAssembler(prn)))
|
||||
|
||||
def update_prompt(self, epoch: E1BPromptEpoch) -> None:
|
||||
state = self._state(epoch.prn)
|
||||
state.last_prompt = epoch
|
||||
state.status.prompt_epochs += 1
|
||||
state.status.cycle_slips += int(epoch.cycle_slip)
|
||||
state.status.sample_discontinuities += int(epoch.sample_discontinuity)
|
||||
|
||||
def update_page(self, page: InavPage) -> None:
|
||||
state = self._state(page.prn)
|
||||
state.page_history.append(page)
|
||||
state.status.pages += 1
|
||||
state.status.fec_failures += int(not page.fec_valid)
|
||||
if page.crc_valid:
|
||||
state.status.crc_passes += 1
|
||||
state.last_valid_page = page
|
||||
else:
|
||||
state.status.crc_failures += 1
|
||||
|
||||
def update_synchronizers(
|
||||
self,
|
||||
prn: int,
|
||||
*,
|
||||
symbol_count: int,
|
||||
symbol_locked: bool,
|
||||
symbol_loss_count: int,
|
||||
page_part_count: int,
|
||||
page_locked: bool,
|
||||
page_confidence: float,
|
||||
page_failures: int,
|
||||
) -> None:
|
||||
state = self._state(prn)
|
||||
state.status.symbols += int(symbol_count)
|
||||
state.status.synchronized_page_parts += int(page_part_count)
|
||||
state.status.symbol_sync_locked = bool(symbol_locked)
|
||||
state.status.symbol_sync_losses = int(symbol_loss_count)
|
||||
state.status.page_sync_locked = bool(page_locked)
|
||||
state.status.page_sync_confidence = float(page_confidence)
|
||||
state.status.page_sync_failures = int(page_failures)
|
||||
|
||||
def update_word(self, word: ParsedInavWord) -> GalileoEphemeris | None:
|
||||
state = self._state(word.prn)
|
||||
state.word_history.append(word)
|
||||
state.status.word_types.add(word.word_type)
|
||||
ephemeris = state.assembler.update(word)
|
||||
self.time_recovery.update(word)
|
||||
return ephemeris
|
||||
|
||||
def has_complete_ephemeris(self, prn: int) -> bool:
|
||||
return self._state(prn).assembler.current is not None
|
||||
|
||||
def get_ephemeris(self, prn: int) -> GalileoEphemeris | None:
|
||||
return self._state(prn).assembler.current
|
||||
|
||||
def get_clock_parameters(self, prn: int) -> EphemerisClockWord4 | None:
|
||||
for word in reversed(self._state(prn).word_history):
|
||||
if isinstance(word.payload, EphemerisClockWord4):
|
||||
return word.payload
|
||||
return None
|
||||
|
||||
def get_time_solution(self) -> GalileoSystemTime | None:
|
||||
return self.time_recovery.current
|
||||
|
||||
def get_decoder_status(self, prn: int) -> DecoderStatus:
|
||||
return self._state(prn).status
|
||||
|
||||
def get_missing_ephemeris_words(self, prn: int) -> set[int]:
|
||||
return self._state(prn).assembler.missing_word_types()
|
||||
|
||||
def navigation_ready(
|
||||
self,
|
||||
minimum_satellites: int = 4,
|
||||
require_time: bool = True,
|
||||
require_healthy: bool = True,
|
||||
) -> bool:
|
||||
usable = 0
|
||||
for state in self._satellites.values():
|
||||
ephemeris = state.assembler.current
|
||||
if ephemeris is None:
|
||||
continue
|
||||
if require_healthy and not (ephemeris.health_valid and ephemeris.data_valid):
|
||||
continue
|
||||
usable += 1
|
||||
return usable >= minimum_satellites and (not require_time or self.time_recovery.current is not None)
|
||||
@@ -19,8 +19,9 @@ class LockStatus:
|
||||
|
||||
|
||||
class LockDetector:
|
||||
def __init__(self, failure_limit: int = 10) -> None:
|
||||
def __init__(self, failure_limit: int = 10, *, data_sign_insensitive: bool = False) -> None:
|
||||
self.failure_limit = failure_limit
|
||||
self.data_sign_insensitive = data_sign_insensitive
|
||||
self.failures = 0
|
||||
self.previous_phase: float | None = None
|
||||
|
||||
@@ -29,11 +30,18 @@ class LockDetector:
|
||||
carrier_metric = float(abs(correlators.prompt.real) / max(abs(correlators.prompt), np.finfo(float).tiny))
|
||||
code_metric = float(prompt_power / max(0.5 * (abs(correlators.early) ** 2 + abs(correlators.late) ** 2), np.finfo(float).tiny))
|
||||
phase = float(np.angle(correlators.prompt))
|
||||
cycle_slip = self.previous_phase is not None and abs(float(np.angle(np.exp(1j * (phase - self.previous_phase))))) > 0.9 * np.pi
|
||||
phase_delta = float(np.angle(np.exp(1j * (phase - self.previous_phase)))) if self.previous_phase is not None else 0.0
|
||||
slip_threshold_rad = 0.9 * np.pi
|
||||
if self.data_sign_insensitive:
|
||||
# A legitimate BPSK navigation-symbol transition is a pi phase
|
||||
# reversal, not a carrier cycle slip. Doubling phase removes that
|
||||
# ambiguity before applying the slip detector.
|
||||
phase_delta = 0.5 * float(np.angle(np.exp(2j * phase_delta)))
|
||||
slip_threshold_rad = 0.45 * np.pi
|
||||
cycle_slip = self.previous_phase is not None and abs(phase_delta) > slip_threshold_rad
|
||||
self.previous_phase = phase
|
||||
locked = carrier_metric > 0.55 and code_metric > 0.5
|
||||
self.failures = 0 if locked else self.failures + 1
|
||||
vevl = max(abs(correlators.very_early), abs(correlators.very_late))
|
||||
side_peak = vevl > 1.25 * max(abs(correlators.prompt), np.finfo(float).tiny)
|
||||
return LockStatus(carrier_metric, code_metric, locked, cycle_slip, side_peak)
|
||||
|
||||
|
||||
@@ -65,7 +65,10 @@ class TrackingChannel:
|
||||
self.pll_filter = ThirdOrderLoopFilter(config.pll_noise_bandwidth_hz, config.damping_ratio) if config.pll_order == 3 else SecondOrderLoopFilter(config.pll_noise_bandwidth_hz, config.damping_ratio)
|
||||
self.dll_filter = SecondOrderLoopFilter(config.dll_noise_bandwidth_hz, config.damping_ratio)
|
||||
self.fll_filter = FirstOrderFllFilter(config.fll_noise_bandwidth_hz)
|
||||
self.lock_detector = LockDetector(config.loss_of_lock_epochs)
|
||||
self.lock_detector = LockDetector(
|
||||
config.loss_of_lock_epochs,
|
||||
data_sign_insensitive=self.component_spec.channel_type == "data",
|
||||
)
|
||||
self.cn0_estimator = Cn0Estimator(
|
||||
config.integration_ms * 1e-3,
|
||||
data_sign_insensitive=self.component_spec.channel_type == "data",
|
||||
@@ -87,6 +90,7 @@ class TrackingChannel:
|
||||
if secondary_code_phase_at_start is not None
|
||||
else int(np.floor(start_sample_index / (self.component_spec.primary_code_period_s * sampling_frequency_hz)))
|
||||
)
|
||||
self.next_sample_timestamp = int(start_sample_index)
|
||||
|
||||
def _secondary_sign(self) -> int:
|
||||
if self.component_spec.channel_type != "pilot" or self.config.secondary_code_mode == "none":
|
||||
@@ -141,6 +145,8 @@ class TrackingChannel:
|
||||
self.state = TrackingState.REACQUISITION
|
||||
elif cn0 is not None and cn0 < self.config.weak_signal_cn0_db_hz:
|
||||
self.state = TrackingState.WEAK_SIGNAL
|
||||
start_sample_timestamp = self.next_sample_timestamp
|
||||
end_sample_timestamp = start_sample_timestamp + self.integration_samples
|
||||
measurement = TrackingMeasurement(
|
||||
epoch=self.epoch,
|
||||
time_s=(self.epoch + 1) * dt_s,
|
||||
@@ -162,9 +168,17 @@ class TrackingChannel:
|
||||
cycle_slip=lock.cycle_slip,
|
||||
side_peak_suspected=lock.side_peak_suspected,
|
||||
reacquisition_requested=reacquire,
|
||||
start_sample_timestamp=start_sample_timestamp,
|
||||
end_sample_timestamp=end_sample_timestamp,
|
||||
carrier_phase_cycles=self.carrier_nco.phase_rad / (2.0 * np.pi),
|
||||
carrier_lock=lock.carrier_metric > 0.55,
|
||||
code_lock=lock.code_metric > 0.5,
|
||||
sample_discontinuity=False,
|
||||
valid=not reacquire,
|
||||
)
|
||||
self.previous_prompt = correlators.prompt
|
||||
self.measurements.append(measurement)
|
||||
self.next_sample_timestamp = end_sample_timestamp
|
||||
self.epoch += 1
|
||||
return measurement
|
||||
|
||||
|
||||
@@ -76,6 +76,13 @@ class TrackingMeasurement:
|
||||
cycle_slip: bool = False
|
||||
side_peak_suspected: bool = False
|
||||
reacquisition_requested: bool = False
|
||||
start_sample_timestamp: int = 0
|
||||
end_sample_timestamp: int = 0
|
||||
carrier_phase_cycles: float = 0.0
|
||||
carrier_lock: bool = False
|
||||
code_lock: bool = False
|
||||
sample_discontinuity: bool = False
|
||||
valid: bool = True
|
||||
|
||||
|
||||
@dataclass(slots=True)
|
||||
@@ -99,4 +106,3 @@ class GenerationTruth:
|
||||
start_sample: int
|
||||
sample_count: int
|
||||
satellites: list[SatelliteTruth]
|
||||
|
||||
|
||||
@@ -0,0 +1,234 @@
|
||||
"""Post-decode comparison with SignalSim's RINEX source (never decoder input)."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime, timezone
|
||||
import json
|
||||
from math import pi
|
||||
from pathlib import Path
|
||||
import re
|
||||
from typing import Any
|
||||
|
||||
|
||||
_FLOAT = re.compile(r"[ +-]\d\.\d+[DE][+-]\d+")
|
||||
|
||||
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class RinexGalileoEphemeris:
|
||||
prn: int
|
||||
epoch: str
|
||||
iod_nav: int
|
||||
toe_s: float
|
||||
toc_s: float
|
||||
mean_anomaly_rad: float
|
||||
delta_n_rad_s: float
|
||||
eccentricity: float
|
||||
sqrt_a: float
|
||||
omega0_rad: float
|
||||
inclination_rad: float
|
||||
argument_of_perigee_rad: float
|
||||
omega_dot_rad_s: float
|
||||
inclination_rate_rad_s: float
|
||||
cuc_rad: float
|
||||
cus_rad: float
|
||||
crc_m: float
|
||||
crs_m: float
|
||||
cic_rad: float
|
||||
cis_rad: float
|
||||
clock_bias_s: float
|
||||
clock_drift_s_per_s: float
|
||||
clock_drift_rate_s_per_s2: float
|
||||
health: int
|
||||
data_source: int
|
||||
|
||||
|
||||
def _numbers(line: str) -> list[float]:
|
||||
return [float(item.replace("D", "E")) for item in _FLOAT.findall(line)]
|
||||
|
||||
|
||||
def load_galileo_rinex(path: str | Path) -> list[RinexGalileoEphemeris]:
|
||||
lines = Path(path).read_text(encoding="ascii", errors="strict").splitlines()
|
||||
index = next(i for i, line in enumerate(lines) if "END OF HEADER" in line) + 1
|
||||
records: list[RinexGalileoEphemeris] = []
|
||||
while index < len(lines):
|
||||
header = lines[index]
|
||||
if not header.startswith("E") or index + 7 >= len(lines):
|
||||
index += 1
|
||||
continue
|
||||
clock = _numbers(header[22:])
|
||||
continuation = [_numbers(lines[index + offset]) for offset in range(1, 8)]
|
||||
index += 8
|
||||
if (
|
||||
len(clock) != 3
|
||||
or any(len(row) < 4 for row in continuation[:4])
|
||||
or len(continuation[4]) < 3
|
||||
or len(continuation[5]) < 4
|
||||
or not continuation[6]
|
||||
):
|
||||
continue
|
||||
line1, line2, line3, line4, line5, line6, _line7 = continuation
|
||||
records.append(
|
||||
RinexGalileoEphemeris(
|
||||
prn=int(header[1:3]), epoch=header[4:23].strip(), iod_nav=int(round(line1[0])),
|
||||
toe_s=line3[0], toc_s=line3[0], mean_anomaly_rad=line1[3], delta_n_rad_s=line1[2],
|
||||
eccentricity=line2[1], sqrt_a=line2[3], omega0_rad=line3[2], inclination_rad=line4[0],
|
||||
argument_of_perigee_rad=line4[2], omega_dot_rad_s=line4[3], inclination_rate_rad_s=line5[0],
|
||||
cuc_rad=line2[0], cus_rad=line2[2], crc_m=line4[1], crs_m=line1[1], cic_rad=line3[1], cis_rad=line3[3],
|
||||
clock_bias_s=clock[0], clock_drift_s_per_s=clock[1], clock_drift_rate_s_per_s2=clock[2],
|
||||
health=int(round(line6[1])), data_source=int(round(line5[1])),
|
||||
)
|
||||
)
|
||||
return records
|
||||
|
||||
|
||||
_STEPS = {
|
||||
"toe_s": 60.0, "toc_s": 60.0,
|
||||
"mean_anomaly_rad": pi * 2.0**-31, "eccentricity": 2.0**-33, "sqrt_a": 2.0**-19,
|
||||
"omega0_rad": pi * 2.0**-31, "inclination_rad": pi * 2.0**-31,
|
||||
"argument_of_perigee_rad": pi * 2.0**-31, "inclination_rate_rad_s": pi * 2.0**-43,
|
||||
"omega_dot_rad_s": pi * 2.0**-43, "delta_n_rad_s": pi * 2.0**-43,
|
||||
"cuc_rad": 2.0**-29, "cus_rad": 2.0**-29, "crc_m": 2.0**-5, "crs_m": 2.0**-5,
|
||||
"cic_rad": 2.0**-29, "cis_rad": 2.0**-29,
|
||||
"clock_bias_s": 2.0**-34, "clock_drift_s_per_s": 2.0**-46,
|
||||
"clock_drift_rate_s_per_s2": 2.0**-59,
|
||||
}
|
||||
|
||||
|
||||
def compare_navigation_truth(
|
||||
artifact_root: str | Path,
|
||||
rinex_path: str | Path,
|
||||
output_root: str | Path,
|
||||
*,
|
||||
collection_report_path: str | Path | None = None,
|
||||
signalsim_config_path: str | Path | None = None,
|
||||
) -> tuple[dict[str, Any], bool]:
|
||||
"""Compare only after artifact decoding has completed."""
|
||||
artifacts = Path(artifact_root)
|
||||
records = load_galileo_rinex(rinex_path)
|
||||
comparisons: dict[int, Any] = {}
|
||||
overall = True
|
||||
for ephemeris_path in sorted(artifacts.glob("prn_*/ephemeris.json")):
|
||||
decoded = json.loads(ephemeris_path.read_text(encoding="utf-8"))
|
||||
prn, iod, toe = int(decoded["prn"]), int(decoded["iod_nav"]), float(decoded["toe_s"])
|
||||
# SignalSim's FindEphemeris defaults to I/NAV source (data-source bit
|
||||
# 1 clear), minimum |toe-current time|, and the last record on ties.
|
||||
candidates = [
|
||||
item for item in records
|
||||
if item.prn == prn and item.iod_nav == iod and item.toe_s == toe and not (item.data_source & 0x2)
|
||||
]
|
||||
if not candidates:
|
||||
comparisons[prn] = {"pass": False, "error": "no matching I/NAV RINEX record"}
|
||||
overall = False
|
||||
continue
|
||||
truth = candidates[-1]
|
||||
fields: dict[str, Any] = {}
|
||||
for field, step in _STEPS.items():
|
||||
decoded_value = float(decoded[field])
|
||||
truth_value = float(getattr(truth, field))
|
||||
error = abs(decoded_value - truth_value)
|
||||
passed = error <= 0.500001 * step
|
||||
fields[field] = {
|
||||
"decoded_raw_integer": int(round(decoded_value / step)),
|
||||
"decoded_scaled_value": decoded_value,
|
||||
"simulator_truth_value": truth_value,
|
||||
"absolute_error": error,
|
||||
"expected_quantization_step": step,
|
||||
"pass": passed,
|
||||
}
|
||||
overall &= passed
|
||||
iod_pass = iod == truth.iod_nav
|
||||
fields["iod_nav"] = {
|
||||
"decoded_raw_integer": iod, "decoded_scaled_value": iod,
|
||||
"simulator_truth_value": truth.iod_nav, "absolute_error": abs(iod - truth.iod_nav),
|
||||
"expected_quantization_step": 1, "pass": iod_pass,
|
||||
}
|
||||
health_pass = bool(decoded["health_valid"] and decoded["data_valid"] and truth.health == 0)
|
||||
fields["health"] = {
|
||||
"decoded_raw_integer": 0 if decoded["health_valid"] else 1,
|
||||
"decoded_scaled_value": bool(decoded["health_valid"]),
|
||||
"simulator_truth_value": truth.health,
|
||||
"absolute_error": 0 if health_pass else 1,
|
||||
"expected_quantization_step": 1,
|
||||
"pass": health_pass,
|
||||
}
|
||||
sat_pass = all(item["pass"] for item in fields.values())
|
||||
overall &= sat_pass
|
||||
comparisons[prn] = {"rinex_epoch": truth.epoch, "fields": fields, "pass": sat_pass}
|
||||
time_comparison: dict[str, Any] | None = None
|
||||
if collection_report_path is not None and signalsim_config_path is not None:
|
||||
collection = json.loads(Path(collection_report_path).read_text(encoding="utf-8"))
|
||||
simulator_cfg = json.loads(Path(signalsim_config_path).read_text(encoding="utf-8"))
|
||||
decoded_time = collection.get("galileo_time")
|
||||
if decoded_time is not None:
|
||||
start = simulator_cfg["time"]
|
||||
start_utc = datetime(
|
||||
int(start["year"]), int(start["month"]), int(start["day"]),
|
||||
int(start["hour"]), int(start["minute"]), int(start["second"]),
|
||||
tzinfo=timezone.utc,
|
||||
)
|
||||
leap_seconds = _rinex_leap_seconds(rinex_path)
|
||||
gps_epoch = datetime(1980, 1, 6, tzinfo=timezone.utc)
|
||||
gps_total_s = (start_utc - gps_epoch).total_seconds() + leap_seconds
|
||||
gps_week = int(gps_total_s // 604800.0)
|
||||
page_offset_s = (
|
||||
int(decoded_time["page_start_sample_timestamp"])
|
||||
/ float(collection["sampling_frequency_hz"])
|
||||
)
|
||||
expected_week = gps_week - 1024
|
||||
expected_tow_s = int((gps_total_s % 604800.0) + page_offset_s)
|
||||
week_error = abs(int(decoded_time["week_number"]) - expected_week)
|
||||
tow_error_s = abs(int(decoded_time["time_of_week_s"]) - expected_tow_s)
|
||||
# The broadcast field is integral seconds; an unmodelled signal
|
||||
# propagation delay can move a boundary comparison by one second.
|
||||
time_pass = week_error == 0 and tow_error_s <= 1
|
||||
time_comparison = {
|
||||
"decoded_week_number": int(decoded_time["week_number"]),
|
||||
"simulator_truth_week_number": expected_week,
|
||||
"week_absolute_error": week_error,
|
||||
"decoded_time_of_week_s": int(decoded_time["time_of_week_s"]),
|
||||
"simulator_truth_time_of_week_s": expected_tow_s,
|
||||
"time_of_week_absolute_error_s": tow_error_s,
|
||||
"expected_quantization_step_s": 1,
|
||||
"leap_seconds_from_rinex": leap_seconds,
|
||||
"pass": time_pass,
|
||||
}
|
||||
overall &= time_pass
|
||||
report = {
|
||||
"comparison_stage": "post_decode_only",
|
||||
"truth_injected_into_decoder": False,
|
||||
"rinex_source": str(Path(rinex_path).resolve()),
|
||||
"satellites": comparisons,
|
||||
"galileo_time": time_comparison,
|
||||
"overall_pass": overall and len(comparisons) >= 4,
|
||||
}
|
||||
output = Path(output_root)
|
||||
output.mkdir(parents=True, exist_ok=True)
|
||||
(output / "inav_truth_comparison.json").write_text(json.dumps(report, indent=2) + "\n", encoding="utf-8")
|
||||
markdown = [
|
||||
"# I/NAV decoded-field truth comparison", "",
|
||||
"Truth was applied only after standalone RF-to-page decoding and ephemeris assembly.", "",
|
||||
"| PRN | RINEX epoch | Fields | Result |", "| --: | --- | --: | ---: |",
|
||||
]
|
||||
for prn, item in comparisons.items():
|
||||
markdown.append(f"| {prn} | {item.get('rinex_epoch', 'N/A')} | {len(item.get('fields', {}))} | {'PASS' if item['pass'] else 'FAIL'} |")
|
||||
if time_comparison is not None:
|
||||
markdown.extend([
|
||||
"", "## Galileo system time", "",
|
||||
f"Decoded GST week/TOW: {time_comparison['decoded_week_number']}/"
|
||||
f"{time_comparison['decoded_time_of_week_s']} s; independently expected "
|
||||
f"{time_comparison['simulator_truth_week_number']}/"
|
||||
f"{time_comparison['simulator_truth_time_of_week_s']} s. "
|
||||
f"Result: **{'PASS' if time_comparison['pass'] else 'FAIL'}**.",
|
||||
])
|
||||
(output / "inav_truth_comparison.md").write_text("\n".join(markdown) + "\n", encoding="utf-8")
|
||||
return report, bool(report["overall_pass"])
|
||||
|
||||
|
||||
def _rinex_leap_seconds(path: str | Path) -> int:
|
||||
for line in Path(path).read_text(encoding="ascii", errors="strict").splitlines():
|
||||
if "LEAP SECONDS" in line:
|
||||
return int(line[:6])
|
||||
if "END OF HEADER" in line:
|
||||
break
|
||||
raise ValueError("RINEX header has no LEAP SECONDS record")
|
||||
@@ -543,13 +543,16 @@ def validate_signalsim(source_path: str | Path, config_path: str | Path, output_
|
||||
"SignalSim E1 uses BOC(1,1), not full CBOC",
|
||||
"SignalSim has no native real-IF output",
|
||||
"SignalSim IQ2 writer omits the output-byte assignment at this commit",
|
||||
"Full I/NAV receiver-side FEC/page/CRC decoding is not implemented",
|
||||
"Quick validation stops at raw E1B symbols; use collect-navigation for full I/NAV decoding",
|
||||
"SignalSim does not emit exact sample-side code-delay or navigation-symbol truth",
|
||||
],
|
||||
}
|
||||
(out / "signalsim_validation_report.json").write_text(json.dumps(report, indent=2, default=str) + "\n", encoding="utf-8")
|
||||
(out / "signalsim_e1b_symbol_comparison.json").write_text(json.dumps(symbol_report, indent=2) + "\n", encoding="utf-8")
|
||||
reports_root = project_root / "reports"
|
||||
project_reports = (project_root / "reports").resolve()
|
||||
# Test callers normally select a temporary output directory. Keep every
|
||||
# generated artifact there instead of mutating checked-in baseline reports.
|
||||
reports_root = project_reports if out.is_relative_to(project_reports) else out
|
||||
reports_root.mkdir(parents=True, exist_ok=True)
|
||||
acquisition_report = {
|
||||
"simulator": report["simulator"],
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
"""Galileo receiver test package."""
|
||||
@@ -0,0 +1,22 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.mark.signalsim
|
||||
def test_four_satellites_are_navigation_ready_without_truth_inputs() -> None:
|
||||
path = Path("reports/navigation_run/inav_collection_report.json")
|
||||
if not path.is_file():
|
||||
pytest.skip("SignalSim multi-satellite navigation collection report is unavailable")
|
||||
report = json.loads(path.read_text(encoding="utf-8"))
|
||||
assert report["decoder_truth_inputs"] == []
|
||||
ready = [
|
||||
item for item in report["satellites"].values()
|
||||
if item["complete_ephemeris"] and item["clock_parameters"] and item["health_valid"] and item["data_valid"]
|
||||
]
|
||||
assert len(ready) >= 4
|
||||
assert report["galileo_time"]["valid"] is True
|
||||
assert report["navigation_ready"] is True
|
||||
@@ -0,0 +1,20 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.mark.signalsim
|
||||
def test_signalsim_decoded_ephemerides_match_rinex_truth_within_quantization() -> None:
|
||||
path = Path("reports/inav_truth_comparison.json")
|
||||
if not path.is_file():
|
||||
pytest.skip("post-decode SignalSim truth-comparison report is unavailable")
|
||||
report = json.loads(path.read_text(encoding="utf-8"))
|
||||
assert report["truth_injected_into_decoder"] is False
|
||||
assert report["overall_pass"] is True
|
||||
assert len(report["satellites"]) >= 4
|
||||
assert all(item["pass"] for item in report["satellites"].values())
|
||||
assert report["galileo_time"]["pass"] is True
|
||||
assert report["galileo_time"]["time_of_week_absolute_error_s"] <= 1
|
||||
@@ -0,0 +1,19 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from galileo_rx.navigation.decoder_diagnostics import load_prompt_epochs
|
||||
from galileo_rx.navigation.inav_pipeline import InavNavigationPipeline
|
||||
|
||||
|
||||
@pytest.mark.signalsim
|
||||
def test_signalsim_prompts_produce_crc_valid_inav_pages() -> None:
|
||||
path = Path("verification/navigation/signalsim_navigation_multisat/prn_01/prompt_epochs.npz")
|
||||
if not path.is_file():
|
||||
pytest.skip("SignalSim navigation prompt artifact is unavailable; run collect-navigation first")
|
||||
decoded = InavNavigationPipeline(1).process(load_prompt_epochs(path, 1))
|
||||
assert len(decoded.pages) == 15
|
||||
assert all(page.sync_valid and page.fec_valid and page.crc_valid for page in decoded.pages)
|
||||
assert {word.word_type for word in decoded.words} == {1, 2, 3, 4, 5, 6}
|
||||
@@ -0,0 +1,23 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
import pytest
|
||||
|
||||
from galileo_rx.navigation.decoder_diagnostics import load_prompt_epochs
|
||||
from galileo_rx.navigation.e1b_symbol_sync import E1BSymbolSynchronizer
|
||||
|
||||
|
||||
@pytest.mark.signalsim
|
||||
def test_signalsim_prompt_artifact_recovers_soft_and_hard_symbols() -> None:
|
||||
path = Path("verification/navigation/signalsim_navigation_multisat/prn_01/prompt_epochs.npz")
|
||||
if not path.is_file():
|
||||
pytest.skip("SignalSim navigation prompt artifact is unavailable; run collect-navigation first")
|
||||
prompts = load_prompt_epochs(path, 1)
|
||||
symbols = E1BSymbolSynchronizer(8, 0.1).process_many(prompts)
|
||||
soft = np.asarray([item.soft_value for item in symbols], dtype=np.float64)
|
||||
assert soft.dtype == np.float64
|
||||
assert len(symbols) == 8044
|
||||
assert np.count_nonzero([item.valid for item in symbols]) > 7500
|
||||
assert {item.hard_value for item in symbols} == {0, 1}
|
||||
@@ -0,0 +1 @@
|
||||
"""Navigation decoder tests."""
|
||||
@@ -0,0 +1,19 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import numpy as np
|
||||
|
||||
from galileo_rx.navigation.inav_crc import crc24q, validate_crc24q
|
||||
|
||||
|
||||
def test_crc24q_independent_check_value() -> None:
|
||||
bits = np.unpackbits(np.frombuffer(b"123456789", dtype=np.uint8), bitorder="big")
|
||||
assert crc24q(bits) == 0xCDE703
|
||||
|
||||
|
||||
def test_crc_rejects_one_bit_error() -> None:
|
||||
protected = np.asarray([0, 1, 1, 0, 1] * 39 + [1], dtype=np.int8)
|
||||
value = crc24q(protected)
|
||||
crc_bits = np.asarray([(value >> shift) & 1 for shift in range(23, -1, -1)], dtype=np.int8)
|
||||
assert validate_crc24q(protected, crc_bits)
|
||||
protected[17] ^= 1
|
||||
assert not validate_crc24q(protected, crc_bits)
|
||||
@@ -0,0 +1,25 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import numpy as np
|
||||
|
||||
from galileo_rx.navigation.inav_deinterleaver import deinterleave_inav
|
||||
|
||||
|
||||
# Independent numerical example from OS SIS ICD 2.2 Annex D.2.
|
||||
ENCODED = (
|
||||
"1000110000011010101010100111001100110001010110100110111101011001"
|
||||
"0111100010010101010101011000110011001110101001011001000010100110"
|
||||
"1000010000000010000000100001101110011001111010110101110000011000"
|
||||
"101110111111110111111101111001000101001100100010"
|
||||
)
|
||||
INTERLEAVED = (
|
||||
"1010000001011111100011001111000001011110101000000001100111100011"
|
||||
"1010100001010000010011110101011101111000100001101111101011100111"
|
||||
"1001100000011111111000100000100111110110000010011100011101100000"
|
||||
"100101110100100011000110110110010000011100111010"
|
||||
)
|
||||
|
||||
|
||||
def test_icd_annex_d2_deinterleaving_vector() -> None:
|
||||
output = deinterleave_inav(np.fromiter(map(int, INTERLEAVED), dtype=np.int8))
|
||||
assert "".join(map(str, output)) == ENCODED
|
||||
@@ -0,0 +1,60 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from galileo_rx.navigation.inav_ephemeris_assembler import InavEphemerisAssembler
|
||||
from galileo_rx.navigation.inav_word_parser import (
|
||||
EphemerisClockWord4, EphemerisWord1, EphemerisWord2, EphemerisWord3,
|
||||
IonosphereHealthTimeWord5, ParsedInavWord,
|
||||
)
|
||||
|
||||
|
||||
def _word(prn: int, kind: int, iod: int, timestamp: int) -> ParsedInavWord:
|
||||
if kind == 1:
|
||||
payload = EphemerisWord1(iod, 1, 60.0, 1, 0.1, 1, 0.01, 1, 5000.0)
|
||||
elif kind == 2:
|
||||
payload = EphemerisWord2(iod, 1, 0.2, 1, 0.3, 1, 0.4, 1, 0.01)
|
||||
elif kind == 3:
|
||||
payload = EphemerisWord3(iod, 1, 0.01, 1, 0.01, 1, 0.01, 1, 0.01, 1, 1.0, 1, 1.0, 10)
|
||||
else:
|
||||
payload = EphemerisClockWord4(iod, prn, 1, 0.01, 1, 0.01, 1, 60.0, 1, 0.1, 1, 0.01, 1, 0.001)
|
||||
return ParsedInavWord(prn, kind, timestamp, iod, payload, [], True, True)
|
||||
|
||||
|
||||
def _health(prn: int) -> ParsedInavWord:
|
||||
payload = IonosphereHealthTimeWord5(0, 0.0, 0, 0.0, 0, 0.0, (False,) * 5, 0, 0.0, 0, 0.0, 0, 0, 0, 0, 10, 20)
|
||||
return ParsedInavWord(prn, 5, 0, None, payload, [], True, True)
|
||||
|
||||
|
||||
def test_assembler_rejects_mixed_iod_and_commits_atomically() -> None:
|
||||
assembler = InavEphemerisAssembler(3)
|
||||
assembler.update(_health(3))
|
||||
for kind in (1, 2, 3):
|
||||
assert assembler.update(_word(3, kind, 5, kind)) is None
|
||||
assert assembler.update(_word(3, 4, 6, 4)) is None
|
||||
assert assembler.current is None
|
||||
complete = assembler.update(_word(3, 4, 5, 5))
|
||||
assert complete is not None and complete.iod_nav == 5
|
||||
assert complete.health_valid and complete.data_valid
|
||||
assert assembler.missing_word_types() == set()
|
||||
|
||||
|
||||
def test_previous_ephemeris_survives_incomplete_update() -> None:
|
||||
assembler = InavEphemerisAssembler(3)
|
||||
assembler.update(_health(3))
|
||||
for kind in (1, 2, 3, 4):
|
||||
assembler.update(_word(3, kind, 5, kind))
|
||||
current = assembler.current
|
||||
assembler.update(_word(3, 1, 6, 10))
|
||||
assert assembler.current is current
|
||||
|
||||
|
||||
def test_stale_partial_set_is_expired_without_replacing_valid_ephemeris() -> None:
|
||||
assembler = InavEphemerisAssembler(3, max_partial_age_samples=10)
|
||||
assembler.update(_health(3))
|
||||
for kind in (1, 2, 3, 4):
|
||||
assembler.update(_word(3, kind, 5, kind))
|
||||
current = assembler.current
|
||||
assembler.update(_word(3, 1, 6, 20))
|
||||
assembler.update(_word(3, 2, 7, 40))
|
||||
assert assembler.stale_partial_sets == 1
|
||||
assert assembler.current is current
|
||||
assert assembler.missing_word_types() == set()
|
||||
@@ -0,0 +1,17 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from galileo_rx.navigation.navigation_store import NavigationStore
|
||||
from tests.navigation.test_ephemeris_assembler import _health, _word
|
||||
|
||||
|
||||
def test_navigation_readiness_requires_four_complete_healthy_satellites() -> None:
|
||||
store = NavigationStore()
|
||||
for prn in range(1, 5):
|
||||
store.update_word(_health(prn))
|
||||
for kind in (1, 2, 3, 4):
|
||||
store.update_word(_word(prn, kind, prn, prn * 10 + kind))
|
||||
assert store.navigation_ready(minimum_satellites=4, require_time=True)
|
||||
assert store.navigation_ready(minimum_satellites=4, require_time=False)
|
||||
assert store.get_time_solution() is not None
|
||||
assert store.has_complete_ephemeris(4)
|
||||
assert store.get_clock_parameters(2) is not None
|
||||
@@ -0,0 +1,54 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import numpy as np
|
||||
|
||||
from galileo_rx.navigation.e1b_symbol_sync import NavigationSymbol
|
||||
from galileo_rx.navigation.inav_page_sync import INAV_SYNC_BITS, InavPageSynchronizer
|
||||
|
||||
|
||||
def _symbols(bits: np.ndarray, *, invert: bool = False, prefix: int = 17) -> list[NavigationSymbol]:
|
||||
raw = np.concatenate((np.zeros(prefix, dtype=np.int8), bits))
|
||||
if invert:
|
||||
raw = 1 - raw
|
||||
return [NavigationSymbol(1, i, i * 4, (i + 1) * 4, 1.0 if bit else -1.0, int(bit), 1.0, False, True) for i, bit in enumerate(raw)]
|
||||
|
||||
|
||||
def test_page_sync_rejects_wrong_boundary_and_requires_repetition() -> None:
|
||||
rng = np.random.default_rng(4)
|
||||
part = np.concatenate((INAV_SYNC_BITS, rng.integers(0, 2, 240, dtype=np.int8)))
|
||||
stream = _symbols(np.tile(part, 3))
|
||||
sync = InavPageSynchronizer(required_confirmations=2)
|
||||
first = sync.process_many(stream[:267])
|
||||
assert first == []
|
||||
output = sync.process_many(stream[267:])
|
||||
assert len(output) == 3
|
||||
assert all(item.sync_valid for item in output)
|
||||
|
||||
|
||||
def test_page_sync_records_global_inversion() -> None:
|
||||
body = np.zeros(240, dtype=np.int8)
|
||||
parts = InavPageSynchronizer().process_many(_symbols(np.tile(np.concatenate((INAV_SYNC_BITS, body)), 3), invert=True))
|
||||
assert len(parts) == 3
|
||||
assert all(item.polarity_inverted for item in parts)
|
||||
assert np.array_equal(parts[0].hard_symbols[:10], INAV_SYNC_BITS)
|
||||
|
||||
|
||||
def test_page_sync_loses_and_reacquires_after_corrupted_sync() -> None:
|
||||
body = np.zeros(240, dtype=np.int8)
|
||||
part = np.concatenate((INAV_SYNC_BITS, body))
|
||||
bits = np.tile(part, 6)
|
||||
bits[3 * 250] ^= 1
|
||||
output = InavPageSynchronizer().process_many(_symbols(bits, prefix=0))
|
||||
assert len(output) == 5
|
||||
assert [item.receive_sample_timestamp // (250 * 4) for item in output] == [0, 1, 2, 4, 5]
|
||||
|
||||
|
||||
def test_page_sync_does_not_lock_through_symbol_erasure() -> None:
|
||||
body = np.zeros(240, dtype=np.int8)
|
||||
symbols = _symbols(np.tile(np.concatenate((INAV_SYNC_BITS, body)), 3), prefix=0)
|
||||
erased = symbols[250]
|
||||
symbols[250] = NavigationSymbol(
|
||||
erased.prn, erased.symbol_index, erased.start_sample_timestamp,
|
||||
erased.end_sample_timestamp, 0.0, 0, 0.0, False, False,
|
||||
)
|
||||
assert InavPageSynchronizer().process_many(symbols) == []
|
||||
@@ -0,0 +1,35 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import numpy as np
|
||||
|
||||
from galileo_rx.navigation.e1b_prompt_stream import E1BPromptEpoch
|
||||
from galileo_rx.navigation.e1b_symbol_sync import E1BSymbolSynchronizer
|
||||
|
||||
|
||||
def _epoch(index: int, sign: int, *, slip: bool = False) -> E1BPromptEpoch:
|
||||
start = index * 16
|
||||
prompt = sign * np.exp(1j * 0.37)
|
||||
return E1BPromptEpoch(
|
||||
1, start, start + 16, float(prompt.real), float(prompt.imag), 0.0, 1000.0, 0.0,
|
||||
50.0, True, True, slip, False, True,
|
||||
)
|
||||
|
||||
|
||||
def test_symbol_sync_preserves_global_polarity_ambiguity() -> None:
|
||||
truth = np.asarray([1, -1] * 12, dtype=np.int8)
|
||||
synchronizer = E1BSymbolSynchronizer(minimum_axis_epochs=4, minimum_confidence=0.9)
|
||||
symbols = synchronizer.process_many([_epoch(i, int(-value)) for i, value in enumerate(truth)])
|
||||
hard = np.asarray([item.hard_value for item in symbols[4:]], dtype=np.int8)
|
||||
# Either polarity is valid here; page synchronization resolves it later.
|
||||
expected_bits = (truth[4:] > 0).astype(np.int8)
|
||||
assert np.array_equal(hard, expected_bits) or np.array_equal(hard, 1 - expected_bits)
|
||||
assert all(not item.inverted for item in symbols)
|
||||
|
||||
|
||||
def test_cycle_slip_invalidates_and_restarts_axis_lock() -> None:
|
||||
sync = E1BSymbolSynchronizer(minimum_axis_epochs=3, minimum_confidence=0.1)
|
||||
symbols = [sync.process(_epoch(i, 1, slip=i == 5)) for i in range(10)]
|
||||
assert symbols[5].valid is False
|
||||
assert symbols[6].valid is False
|
||||
assert symbols[7].valid is True
|
||||
assert sync.loss_count == 1
|
||||
@@ -0,0 +1,13 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from galileo_rx.navigation.galileo_time import GalileoTimeRecovery
|
||||
from galileo_rx.navigation.inav_word_parser import IonosphereHealthTimeWord5, ParsedInavWord
|
||||
|
||||
|
||||
def test_gst_week_and_tow_recovery_from_word5() -> None:
|
||||
payload = IonosphereHealthTimeWord5(0, 0.0, 0, 0.0, 0, 0.0, (False,) * 5, 0, 0.0, 0, 0.0, 0, 0, 0, 0, 1138, 554763)
|
||||
result = GalileoTimeRecovery().update(ParsedInavWord(1, 5, 1234, None, payload, [], True, True))
|
||||
assert result is not None
|
||||
assert result.week_number == 1138
|
||||
assert result.time_of_week_s == 554763
|
||||
assert result.page_start_sample_timestamp == 1234
|
||||
@@ -0,0 +1,33 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import numpy as np
|
||||
|
||||
from galileo_rx.navigation.inav_fec import InavViterbiDecoder
|
||||
from tests.navigation.test_deinterleaver import ENCODED
|
||||
|
||||
|
||||
SOURCE = (
|
||||
"1111111111110000110011001010101000000000000011110011001101010101"
|
||||
"11100011111011001101111110001010000111000001001101000000"
|
||||
)
|
||||
|
||||
|
||||
def test_hard_and_soft_viterbi_against_independent_icd_vector() -> None:
|
||||
coded = np.fromiter(map(int, ENCODED), dtype=np.int8)
|
||||
decoder = InavViterbiDecoder(traceback_depth=35)
|
||||
hard = decoder.decode(coded, mode="hard")
|
||||
soft = decoder.decode(np.where(coded, 4.0, -4.0), mode="soft")
|
||||
assert hard.valid and soft.valid
|
||||
assert "".join(map(str, hard.decoded_bits)) == SOURCE
|
||||
assert hard.decoded_bits == soft.decoded_bits
|
||||
|
||||
|
||||
def test_soft_viterbi_corrects_individual_and_burst_errors() -> None:
|
||||
coded = np.fromiter(map(int, ENCODED), dtype=np.int8)
|
||||
soft = np.where(coded, 5.0, -5.0)
|
||||
soft[[20, 81, 177]] *= -1.0
|
||||
soft[120:124] *= -1.0
|
||||
result = InavViterbiDecoder().decode(soft, mode="soft")
|
||||
assert result.valid
|
||||
assert "".join(map(str, result.decoded_bits)) == SOURCE
|
||||
assert result.corrected_error_metric == 7.0
|
||||
@@ -0,0 +1,25 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from galileo_rx.navigation.inav_page_decoder import InavPage
|
||||
from galileo_rx.navigation.inav_word_parser import EphemerisClockWord4, InavWordParser
|
||||
|
||||
|
||||
def _put(bits: list[int], start: int, width: int, value: int) -> None:
|
||||
if value < 0:
|
||||
value += 1 << width
|
||||
for index in range(width):
|
||||
bits[start + index] = (value >> (width - 1 - index)) & 1
|
||||
|
||||
|
||||
def test_word4_signed_scaling_and_units() -> None:
|
||||
bits = [0] * 128
|
||||
for start, width, value in [(0, 6, 4), (6, 10, 77), (16, 6, 12), (22, 16, -3), (38, 16, 5), (54, 14, 9000), (68, 31, -100), (99, 21, 200), (120, 6, -2)]:
|
||||
_put(bits, start, width, value)
|
||||
page = InavPage(12, 0, 100, [], [], 4, True, True, True, False, 0.0, 0, bits, 200)
|
||||
parsed = InavWordParser().parse(page)
|
||||
assert parsed.iod_nav == 77
|
||||
assert isinstance(parsed.payload, EphemerisClockWord4)
|
||||
assert parsed.payload.svid == 12
|
||||
assert parsed.payload.cic_raw == -3
|
||||
assert parsed.payload.toc_s == 540000.0
|
||||
assert parsed.payload.clock_bias_s == -100 * 2.0**-34
|
||||
@@ -0,0 +1,18 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import numpy as np
|
||||
|
||||
from galileo_rx.tracking.lock_detector import LockDetector
|
||||
from galileo_rx.types import CorrelatorOutputs
|
||||
|
||||
|
||||
def _correlators(phase_rad: float) -> CorrelatorOutputs:
|
||||
prompt = complex(np.exp(1j * phase_rad))
|
||||
return CorrelatorOutputs(0.2 * prompt, 0.5 * prompt, prompt, 0.5 * prompt, 0.2 * prompt)
|
||||
|
||||
|
||||
def test_data_lock_detector_ignores_bpsk_transition_but_detects_quadrature_jump() -> None:
|
||||
detector = LockDetector(data_sign_insensitive=True)
|
||||
detector.update(_correlators(0.0))
|
||||
assert detector.update(_correlators(np.pi)).cycle_slip is False
|
||||
assert detector.update(_correlators(np.pi + 0.49 * np.pi)).cycle_slip is True
|
||||
@@ -26,7 +26,14 @@ def main() -> int:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--signalsim-path", required=True, type=Path)
|
||||
parser.add_argument("--executable", type=Path)
|
||||
vector_names = ["high_cn0_single_prn", "nominal_cn0_single_prn", "negative_doppler", "multiple_prns"]
|
||||
vector_names = [
|
||||
"high_cn0_single_prn",
|
||||
"nominal_cn0_single_prn",
|
||||
"negative_doppler",
|
||||
"multiple_prns",
|
||||
"navigation_single_prn",
|
||||
"navigation_multisat",
|
||||
]
|
||||
parser.add_argument("--vector", choices=[*vector_names, "all"], default="high_cn0_single_prn")
|
||||
parser.add_argument("--project-root", type=Path, default=Path(__file__).resolve().parents[1])
|
||||
args = parser.parse_args()
|
||||
@@ -46,6 +53,8 @@ def main() -> int:
|
||||
"nominal_cn0_single_prn": {"duration_s": 0.6, "cn0_db_hz": 50.0, "visible_prns": [1], "expected_doppler_hz": {1: 1828.0}},
|
||||
"negative_doppler": {"duration_s": 2.2, "cn0_db_hz": 55.0, "visible_prns": [27], "expected_doppler_hz": {27: -2637.0}},
|
||||
"multiple_prns": {"duration_s": 0.12, "cn0_db_hz": 55.0, "visible_prns": [1, 4, 19, 21, 27], "expected_doppler_hz": {1: 1828.0, 4: 2171.0, 19: -367.0, 21: -712.0, 27: -2637.0}},
|
||||
"navigation_single_prn": {"duration_s": 4.2, "cn0_db_hz": 55.0, "visible_prns": [1], "expected_doppler_hz": {1: 1828.0}, "sample_frequency_mhz": 4.092, "center_frequency_mhz": 1574.397},
|
||||
"navigation_multisat": {"duration_s": 32.2, "cn0_db_hz": 55.0, "visible_prns": [1, 4, 19, 21, 27], "expected_doppler_hz": {1: 1828.0, 4: 2171.0, 19: -367.0, 21: -712.0, 27: -2637.0}, "sample_frequency_mhz": 4.092, "center_frequency_mhz": 1574.397},
|
||||
}
|
||||
selected = vector_names if args.vector == "all" else [args.vector]
|
||||
for vector_name in selected:
|
||||
@@ -57,6 +66,8 @@ def main() -> int:
|
||||
config["ephemeris"]["name"] = str(rinex)
|
||||
config["trajectory"]["trajectoryList"][0]["time"] = parameters["duration_s"]
|
||||
config["power"]["initPower"]["value"] = parameters["cn0_db_hz"]
|
||||
config["output"]["sampleFreq"] = parameters.get("sample_frequency_mhz", 8.184)
|
||||
config["output"]["centerFreq"] = parameters.get("center_frequency_mhz", 1573.374)
|
||||
visible = set(parameters["visible_prns"])
|
||||
config["output"]["config"]["maskOut"] = [{"system": "Galileo", "svid": [prn for prn in range(1, 37) if prn not in visible]}]
|
||||
output_name = f"{vector_name}_iq8.bin"
|
||||
@@ -76,8 +87,10 @@ def main() -> int:
|
||||
"size_bytes": output.stat().st_size,
|
||||
"sha256": sha256(output),
|
||||
"complex_sample_count": output.stat().st_size // 2,
|
||||
"sampling_frequency_hz": 8_184_000.0,
|
||||
"intermediate_frequency_hz": 2_046_000.0,
|
||||
"sampling_frequency_hz": round(float(config["output"]["sampleFreq"]) * 1e6, 6),
|
||||
"intermediate_frequency_hz": round(
|
||||
(1575.42 - float(config["output"]["centerFreq"])) * 1e6, 6
|
||||
),
|
||||
"sample_format": "IQ8_interleaved_signed_I_then_Q",
|
||||
"duration_s": parameters["duration_s"],
|
||||
"prns": parameters["visible_prns"],
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"prn": 1,
|
||||
"acquisition_detected": true,
|
||||
"acquisition_time_s": 0.1004119270000956,
|
||||
"raw_doppler_hz": 1750.0,
|
||||
"expected_doppler_hz": 1828.0,
|
||||
"start_sample_timestamp": 90995,
|
||||
"tracking_epoch_count": 16088,
|
||||
"tracking_time_s": 13.650105177999649,
|
||||
"tracking_final_state": "PLL_TRACK",
|
||||
"tracking_reacquisition_requests": 10,
|
||||
"tracking_lock_timestamp": 107363,
|
||||
"prompt_epoch_count": 8044,
|
||||
"first_synchronized_symbol_timestamp": 4428515,
|
||||
"first_page_sync_timestamp": 4428515,
|
||||
"first_crc_valid_page_timestamp": 4428515,
|
||||
"page_parts": 31,
|
||||
"pages": 15,
|
||||
"crc_passes": 15,
|
||||
"crc_failures": 0,
|
||||
"fec_failures": 0,
|
||||
"received_word_types": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"missing_ephemeris_word_types": [],
|
||||
"complete_ephemeris": true,
|
||||
"ephemeris_iod_nav": 29,
|
||||
"first_complete_ephemeris_timestamp": 61716515,
|
||||
"clock_parameters": true,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"decoding_time_s": 1.260811995001859
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"prn": 1,
|
||||
"iod_nav": 29,
|
||||
"toe_s": 555000.0,
|
||||
"toc_s": 555000.0,
|
||||
"sqrt_a": 5440.600309371948,
|
||||
"eccentricity": 7.992994505912066e-05,
|
||||
"inclination_rad": 0.9780546728858021,
|
||||
"omega0_rad": 0.1817990533460104,
|
||||
"argument_of_perigee_rad": -1.4927534274463103,
|
||||
"mean_anomaly_rad": 1.763453196161098,
|
||||
"delta_n_rad_s": 3.2858511546039716e-09,
|
||||
"inclination_rate_rad_s": 9.928985010651132e-11,
|
||||
"omega_dot_rad_s": -5.809527704433501e-09,
|
||||
"cuc_rad": 4.2263418436050415e-06,
|
||||
"cus_rad": 4.390254616737366e-06,
|
||||
"crc_m": 256.15625,
|
||||
"crs_m": 91.1875,
|
||||
"cic_rad": 1.4901161193847656e-08,
|
||||
"cis_rad": -5.774199962615967e-08,
|
||||
"clock_bias_s": -0.001132463337853551,
|
||||
"clock_drift_s_per_s": -7.972289495228324e-12,
|
||||
"clock_drift_rate_s_per_s2": 0.0,
|
||||
"sisa_index": 107,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"first_received_timestamp": 12612515,
|
||||
"completed_timestamp": 61716515
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -33334264.5299206, "end_sample_timestamp": 12612515, "error_flags": 0, "fec_valid": true, "page_sequence": 0, "polarity_inverted": true, "prn": 1, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1], "receive_sample_timestamp": 4428515, "sync_valid": true, "word_bits": [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "word_type": 63}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -36704756.3783288, "end_sample_timestamp": 20796515, "error_flags": 0, "fec_valid": true, "page_sequence": 1, "polarity_inverted": true, "prn": 1, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1], "receive_sample_timestamp": 12612515, "sync_valid": true, "word_bits": [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0], "word_type": 1}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37226263.61441742, "end_sample_timestamp": 28980515, "error_flags": 0, "fec_valid": true, "page_sequence": 2, "polarity_inverted": true, "prn": 1, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1], "receive_sample_timestamp": 20796515, "sync_valid": true, "word_bits": [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1], "word_type": 3}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37532565.223480105, "end_sample_timestamp": 37164515, "error_flags": 0, "fec_valid": true, "page_sequence": 3, "polarity_inverted": true, "prn": 1, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1], "receive_sample_timestamp": 28980515, "sync_valid": true, "word_bits": [0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "word_type": 5}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37449495.281248644, "end_sample_timestamp": 45348515, "error_flags": 0, "fec_valid": true, "page_sequence": 4, "polarity_inverted": true, "prn": 1, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1], "receive_sample_timestamp": 37164515, "sync_valid": true, "word_bits": [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1], "word_type": 0}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37617408.423962474, "end_sample_timestamp": 53532515, "error_flags": 0, "fec_valid": true, "page_sequence": 5, "polarity_inverted": true, "prn": 1, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1], "receive_sample_timestamp": 45348515, "sync_valid": true, "word_bits": [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], "word_type": 16}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37602995.06606142, "end_sample_timestamp": 61716515, "error_flags": 0, "fec_valid": true, "page_sequence": 6, "polarity_inverted": true, "prn": 1, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1], "receive_sample_timestamp": 53532515, "sync_valid": true, "word_bits": [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0], "word_type": 2}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37803840.340444334, "end_sample_timestamp": 69900515, "error_flags": 0, "fec_valid": true, "page_sequence": 7, "polarity_inverted": true, "prn": 1, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1], "receive_sample_timestamp": 61716515, "sync_valid": true, "word_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], "word_type": 4}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37410545.015174136, "end_sample_timestamp": 78084515, "error_flags": 0, "fec_valid": true, "page_sequence": 8, "polarity_inverted": true, "prn": 1, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1], "receive_sample_timestamp": 69900515, "sync_valid": true, "word_bits": [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0], "word_type": 6}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -36933945.27193832, "end_sample_timestamp": 86268515, "error_flags": 0, "fec_valid": true, "page_sequence": 9, "polarity_inverted": true, "prn": 1, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1], "receive_sample_timestamp": 78084515, "sync_valid": true, "word_bits": [0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0], "word_type": 7}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37340939.68048406, "end_sample_timestamp": 94452515, "error_flags": 0, "fec_valid": true, "page_sequence": 10, "polarity_inverted": true, "prn": 1, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1], "receive_sample_timestamp": 86268515, "sync_valid": true, "word_bits": [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], "word_type": 8}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37552896.74678558, "end_sample_timestamp": 102636515, "error_flags": 0, "fec_valid": true, "page_sequence": 11, "polarity_inverted": true, "prn": 1, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], "receive_sample_timestamp": 94452515, "sync_valid": true, "word_bits": [0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0], "word_type": 17}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37567533.36444171, "end_sample_timestamp": 110820515, "error_flags": 0, "fec_valid": true, "page_sequence": 12, "polarity_inverted": true, "prn": 1, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1], "receive_sample_timestamp": 102636515, "sync_valid": true, "word_bits": [0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0], "word_type": 19}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37240888.30351402, "end_sample_timestamp": 119004515, "error_flags": 0, "fec_valid": true, "page_sequence": 13, "polarity_inverted": true, "prn": 1, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1], "receive_sample_timestamp": 110820515, "sync_valid": true, "word_bits": [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], "word_type": 16}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37331820.63550909, "end_sample_timestamp": 127188515, "error_flags": 0, "fec_valid": true, "page_sequence": 14, "polarity_inverted": true, "prn": 1, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1], "receive_sample_timestamp": 119004515, "sync_valid": true, "word_bits": [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1], "word_type": 0}
|
||||
Binary file not shown.
@@ -0,0 +1,6 @@
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 29, "payload": {"eccentricity": 7.992994505912066e-05, "eccentricity_raw": 686593, "iod_nav": 29, "mean_anomaly_rad": 1.763453196161098, "mean_anomaly_raw": 1205435370, "sqrt_a": 5440.600309371948, "sqrt_a_raw": 2852441455, "toe_raw": 9250, "toe_s": 555000.0}, "prn": 1, "raw_bits": [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0], "receive_sample_timestamp": 12612515, "word_type": 1}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 29, "payload": {"crc_m": 256.15625, "crc_raw": 8197, "crs_m": 91.1875, "crs_raw": 2918, "cuc_rad": 4.2263418436050415e-06, "cuc_raw": 2269, "cus_rad": 4.390254616737366e-06, "cus_raw": 2357, "delta_n_rad_s": 3.2858511546039716e-09, "delta_n_raw": 9200, "iod_nav": 29, "omega_dot_rad_s": -5.809527704433501e-09, "omega_dot_raw": -16266, "sisa_index": 107}, "prn": 1, "raw_bits": [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1], "receive_sample_timestamp": 20796515, "word_type": 3}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": null, "payload": {"ai0_raw": 0, "ai0_sfu": 0.0, "ai1_raw": 0, "ai1_sfu_per_degree": 0.0, "ai2_raw": 0, "ai2_sfu_per_degree2": 0.0, "bgd_e1_e5a_raw": 2, "bgd_e1_e5a_s": 4.656612873077393e-10, "bgd_e1_e5b_raw": 2, "bgd_e1_e5b_s": 4.656612873077393e-10, "disturbance_flags": [false, false, false, false, false], "e1b_data_validity_status": 0, "e1b_health": 0, "e5b_data_validity_status": 0, "e5b_health": 0, "time_of_week_s": 554755, "week_number": 1138}, "prn": 1, "raw_bits": [0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "receive_sample_timestamp": 28980515, "word_type": 5}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 29, "payload": {"argument_of_perigee_rad": -1.4927534274463103, "argument_of_perigee_raw": -1020394408, "inclination_rad": 0.9780546728858021, "inclination_rate_rad_s": 9.928985010651132e-11, "inclination_rate_raw": 278, "inclination_raw": 668564212, "iod_nav": 29, "omega0_rad": 0.1817990533460104, "omega0_raw": 124271520}, "prn": 1, "raw_bits": [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0], "receive_sample_timestamp": 53532515, "word_type": 2}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 29, "payload": {"cic_rad": 1.4901161193847656e-08, "cic_raw": 8, "cis_rad": -5.774199962615967e-08, "cis_raw": -31, "clock_bias_raw": -19455572, "clock_bias_s": -0.001132463337853551, "clock_drift_rate_raw": 0, "clock_drift_rate_s_per_s2": 0.0, "clock_drift_raw": -561, "clock_drift_s_per_s": -7.972289495228324e-12, "iod_nav": 29, "svid": 1, "toc_raw": 9250, "toc_s": 555000.0}, "prn": 1, "raw_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], "receive_sample_timestamp": 61716515, "word_type": 4}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": null, "payload": {"a0_raw": 2, "a0_s": 1.862645149230957e-09, "a1_raw": -1, "a1_s_per_s": -8.881784197001252e-16, "delta_tls_s": 18, "future_delta_tls_s": 18, "leap_day": 0, "leap_week_mod256": 114, "reference_time_s": 453600, "reference_week_mod256": 114, "time_of_week_s": 554765}, "prn": 1, "raw_bits": [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0], "receive_sample_timestamp": 69900515, "word_type": 6}
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"prn": 4,
|
||||
"acquisition_detected": true,
|
||||
"acquisition_time_s": 0.08580062900000485,
|
||||
"raw_doppler_hz": 2250.0,
|
||||
"expected_doppler_hz": 2171.0,
|
||||
"start_sample_timestamp": 86819,
|
||||
"tracking_epoch_count": 16088,
|
||||
"tracking_time_s": 13.877967087995785,
|
||||
"tracking_final_state": "PLL_TRACK",
|
||||
"tracking_reacquisition_requests": 61,
|
||||
"tracking_lock_timestamp": 103187,
|
||||
"prompt_epoch_count": 8044,
|
||||
"first_synchronized_symbol_timestamp": 12624707,
|
||||
"first_page_sync_timestamp": 12624707,
|
||||
"first_crc_valid_page_timestamp": 12624707,
|
||||
"page_parts": 29,
|
||||
"pages": 14,
|
||||
"crc_passes": 14,
|
||||
"crc_failures": 0,
|
||||
"fec_failures": 0,
|
||||
"received_word_types": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"missing_ephemeris_word_types": [],
|
||||
"complete_ephemeris": true,
|
||||
"ephemeris_iod_nav": 30,
|
||||
"first_complete_ephemeris_timestamp": 61728707,
|
||||
"clock_parameters": true,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"decoding_time_s": 1.3411525530027575
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"prn": 4,
|
||||
"iod_nav": 30,
|
||||
"toe_s": 555600.0,
|
||||
"toc_s": 555600.0,
|
||||
"sqrt_a": 5440.619691848755,
|
||||
"eccentricity": 0.0003278222866356373,
|
||||
"inclination_rad": 0.9546608529078708,
|
||||
"omega0_rad": -1.916469336297527,
|
||||
"argument_of_perigee_rad": -1.2995103390103033,
|
||||
"mean_anomaly_rad": 2.9471624393166582,
|
||||
"delta_n_rad_s": 3.3912126861918165e-09,
|
||||
"inclination_rate_rad_s": -2.3250968496165061e-10,
|
||||
"omega_dot_rad_s": -5.7763120351532645e-09,
|
||||
"cuc_rad": -3.553926944732666e-06,
|
||||
"cus_rad": 7.985159754753113e-06,
|
||||
"crc_m": 161.75,
|
||||
"crs_m": -73.28125,
|
||||
"cic_rad": 2.0489096641540527e-08,
|
||||
"cis_rad": 5.4016709327697754e-08,
|
||||
"clock_bias_s": -0.0007956350455060601,
|
||||
"clock_drift_s_per_s": -8.043343768804334e-12,
|
||||
"clock_drift_rate_s_per_s2": 0.0,
|
||||
"sisa_index": 107,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"first_received_timestamp": 12624707,
|
||||
"completed_timestamp": 61728707
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -35364092.10352924, "end_sample_timestamp": 20808707, "error_flags": 0, "fec_valid": true, "page_sequence": 0, "polarity_inverted": false, "prn": 4, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1], "receive_sample_timestamp": 12624707, "sync_valid": true, "word_bits": [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0], "word_type": 1}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -36429840.08939287, "end_sample_timestamp": 28992707, "error_flags": 0, "fec_valid": true, "page_sequence": 1, "polarity_inverted": false, "prn": 4, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1], "receive_sample_timestamp": 20808707, "sync_valid": true, "word_bits": [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1], "word_type": 3}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37653435.09429905, "end_sample_timestamp": 37176707, "error_flags": 0, "fec_valid": true, "page_sequence": 2, "polarity_inverted": false, "prn": 4, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1], "receive_sample_timestamp": 28992707, "sync_valid": true, "word_bits": [0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "word_type": 5}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37946192.396116, "end_sample_timestamp": 45360707, "error_flags": 0, "fec_valid": true, "page_sequence": 3, "polarity_inverted": false, "prn": 4, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1], "receive_sample_timestamp": 37176707, "sync_valid": true, "word_bits": [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1], "word_type": 0}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37694873.23169851, "end_sample_timestamp": 53544707, "error_flags": 0, "fec_valid": true, "page_sequence": 4, "polarity_inverted": false, "prn": 4, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1], "receive_sample_timestamp": 45360707, "sync_valid": true, "word_bits": [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], "word_type": 16}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37669951.55407439, "end_sample_timestamp": 61728707, "error_flags": 0, "fec_valid": true, "page_sequence": 5, "polarity_inverted": false, "prn": 4, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1], "receive_sample_timestamp": 53544707, "sync_valid": true, "word_bits": [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0], "word_type": 2}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37195093.13814164, "end_sample_timestamp": 69912707, "error_flags": 0, "fec_valid": true, "page_sequence": 6, "polarity_inverted": false, "prn": 4, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1], "receive_sample_timestamp": 61728707, "sync_valid": true, "word_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], "word_type": 4}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37549242.58473148, "end_sample_timestamp": 78096707, "error_flags": 0, "fec_valid": true, "page_sequence": 7, "polarity_inverted": false, "prn": 4, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1], "receive_sample_timestamp": 69912707, "sync_valid": true, "word_bits": [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0], "word_type": 6}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37348881.89201139, "end_sample_timestamp": 86280707, "error_flags": 0, "fec_valid": true, "page_sequence": 8, "polarity_inverted": false, "prn": 4, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1], "receive_sample_timestamp": 78096707, "sync_valid": true, "word_bits": [0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0], "word_type": 7}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37365545.957997486, "end_sample_timestamp": 94464707, "error_flags": 0, "fec_valid": true, "page_sequence": 9, "polarity_inverted": false, "prn": 4, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1], "receive_sample_timestamp": 86280707, "sync_valid": true, "word_bits": [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], "word_type": 8}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37492657.02507062, "end_sample_timestamp": 102648707, "error_flags": 0, "fec_valid": true, "page_sequence": 10, "polarity_inverted": false, "prn": 4, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1], "receive_sample_timestamp": 94464707, "sync_valid": true, "word_bits": [0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0], "word_type": 17}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37323912.70156978, "end_sample_timestamp": 110832707, "error_flags": 0, "fec_valid": true, "page_sequence": 11, "polarity_inverted": false, "prn": 4, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1], "receive_sample_timestamp": 102648707, "sync_valid": true, "word_bits": [0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0], "word_type": 19}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37409158.412990846, "end_sample_timestamp": 119016707, "error_flags": 0, "fec_valid": true, "page_sequence": 12, "polarity_inverted": false, "prn": 4, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1], "receive_sample_timestamp": 110832707, "sync_valid": true, "word_bits": [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0], "word_type": 16}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37462938.630596794, "end_sample_timestamp": 127200707, "error_flags": 0, "fec_valid": true, "page_sequence": 13, "polarity_inverted": false, "prn": 4, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1], "receive_sample_timestamp": 119016707, "sync_valid": true, "word_bits": [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1], "word_type": 0}
|
||||
Binary file not shown.
@@ -0,0 +1,6 @@
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 30, "payload": {"eccentricity": 0.0003278222866356373, "eccentricity_raw": 2815972, "iod_nav": 30, "mean_anomaly_rad": 2.9471624393166582, "mean_anomaly_raw": 2014577905, "sqrt_a": 5440.619691848755, "sqrt_a_raw": 2852451617, "toe_raw": 9260, "toe_s": 555600.0}, "prn": 4, "raw_bits": [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0], "receive_sample_timestamp": 12624707, "word_type": 1}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 30, "payload": {"crc_m": 161.75, "crc_raw": 5176, "crs_m": -73.28125, "crs_raw": -2345, "cuc_rad": -3.553926944732666e-06, "cuc_raw": -1908, "cus_rad": 7.985159754753113e-06, "cus_raw": 4287, "delta_n_rad_s": 3.3912126861918165e-09, "delta_n_raw": 9495, "iod_nav": 30, "omega_dot_rad_s": -5.7763120351532645e-09, "omega_dot_raw": -16173, "sisa_index": 107}, "prn": 4, "raw_bits": [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1], "receive_sample_timestamp": 20808707, "word_type": 3}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": null, "payload": {"ai0_raw": 0, "ai0_sfu": 0.0, "ai1_raw": 0, "ai1_sfu_per_degree": 0.0, "ai2_raw": 0, "ai2_sfu_per_degree2": 0.0, "bgd_e1_e5a_raw": -13, "bgd_e1_e5a_s": -3.026798367500305e-09, "bgd_e1_e5b_raw": -15, "bgd_e1_e5b_s": -3.4924596548080444e-09, "disturbance_flags": [false, false, false, false, false], "e1b_data_validity_status": 0, "e1b_health": 0, "e5b_data_validity_status": 0, "e5b_health": 0, "time_of_week_s": 554755, "week_number": 1138}, "prn": 4, "raw_bits": [0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "receive_sample_timestamp": 28992707, "word_type": 5}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 30, "payload": {"argument_of_perigee_rad": -1.2995103390103033, "argument_of_perigee_raw": -888300143, "inclination_rad": 0.9546608529078708, "inclination_rate_rad_s": -2.3250968496165061e-10, "inclination_rate_raw": -651, "inclination_raw": 652573009, "iod_nav": 30, "omega0_rad": -1.916469336297527, "omega0_raw": -1310031890}, "prn": 4, "raw_bits": [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0], "receive_sample_timestamp": 53544707, "word_type": 2}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 30, "payload": {"cic_rad": 2.0489096641540527e-08, "cic_raw": 11, "cis_rad": 5.4016709327697754e-08, "cis_raw": 29, "clock_bias_raw": -13668906, "clock_bias_s": -0.0007956350455060601, "clock_drift_rate_raw": 0, "clock_drift_rate_s_per_s2": 0.0, "clock_drift_raw": -566, "clock_drift_s_per_s": -8.043343768804334e-12, "iod_nav": 30, "svid": 4, "toc_raw": 9260, "toc_s": 555600.0}, "prn": 4, "raw_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], "receive_sample_timestamp": 61728707, "word_type": 4}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": null, "payload": {"a0_raw": 2, "a0_s": 1.862645149230957e-09, "a1_raw": -1, "a1_s_per_s": -8.881784197001252e-16, "delta_tls_s": 18, "future_delta_tls_s": 18, "leap_day": 0, "leap_week_mod256": 114, "reference_time_s": 453600, "reference_week_mod256": 114, "time_of_week_s": 554765}, "prn": 4, "raw_bits": [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0], "receive_sample_timestamp": 69912707, "word_type": 6}
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"prn": 19,
|
||||
"acquisition_detected": true,
|
||||
"acquisition_time_s": 0.0836479790013982,
|
||||
"raw_doppler_hz": -250.0,
|
||||
"expected_doppler_hz": -367.0,
|
||||
"start_sample_timestamp": 87566,
|
||||
"tracking_epoch_count": 16088,
|
||||
"tracking_time_s": 13.9836710640011,
|
||||
"tracking_final_state": "PLL_TRACK",
|
||||
"tracking_reacquisition_requests": 406,
|
||||
"tracking_lock_timestamp": 103934,
|
||||
"prompt_epoch_count": 8044,
|
||||
"first_synchronized_symbol_timestamp": 16684718,
|
||||
"first_page_sync_timestamp": 16684718,
|
||||
"first_crc_valid_page_timestamp": 20776718,
|
||||
"page_parts": 28,
|
||||
"pages": 13,
|
||||
"crc_passes": 13,
|
||||
"crc_failures": 0,
|
||||
"fec_failures": 0,
|
||||
"received_word_types": [
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"missing_ephemeris_word_types": [
|
||||
1
|
||||
],
|
||||
"complete_ephemeris": false,
|
||||
"ephemeris_iod_nav": null,
|
||||
"first_complete_ephemeris_timestamp": null,
|
||||
"clock_parameters": true,
|
||||
"health_valid": false,
|
||||
"data_valid": false,
|
||||
"decoding_time_s": 1.2081766550036264
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -35498021.026195675, "end_sample_timestamp": 28960718, "error_flags": 0, "fec_valid": true, "page_sequence": 0, "polarity_inverted": true, "prn": 19, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1], "receive_sample_timestamp": 20776718, "sync_valid": true, "word_bits": [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1], "word_type": 3}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -35189221.66381144, "end_sample_timestamp": 37144718, "error_flags": 0, "fec_valid": true, "page_sequence": 1, "polarity_inverted": true, "prn": 19, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1], "receive_sample_timestamp": 28960718, "sync_valid": true, "word_bits": [0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "word_type": 5}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37621235.73066713, "end_sample_timestamp": 45328718, "error_flags": 0, "fec_valid": true, "page_sequence": 2, "polarity_inverted": true, "prn": 19, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1], "receive_sample_timestamp": 37144718, "sync_valid": true, "word_bits": [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1], "word_type": 0}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37006731.05408248, "end_sample_timestamp": 53512718, "error_flags": 0, "fec_valid": true, "page_sequence": 3, "polarity_inverted": true, "prn": 19, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1], "receive_sample_timestamp": 45328718, "sync_valid": true, "word_bits": [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0], "word_type": 16}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37545642.257550746, "end_sample_timestamp": 61696718, "error_flags": 0, "fec_valid": true, "page_sequence": 4, "polarity_inverted": true, "prn": 19, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1], "receive_sample_timestamp": 53512718, "sync_valid": true, "word_bits": [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0], "word_type": 2}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37823662.92439001, "end_sample_timestamp": 69880718, "error_flags": 0, "fec_valid": true, "page_sequence": 5, "polarity_inverted": true, "prn": 19, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1], "receive_sample_timestamp": 61696718, "sync_valid": true, "word_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "word_type": 4}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37529021.96019548, "end_sample_timestamp": 78064718, "error_flags": 0, "fec_valid": true, "page_sequence": 6, "polarity_inverted": true, "prn": 19, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1], "receive_sample_timestamp": 69880718, "sync_valid": true, "word_bits": [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0], "word_type": 6}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37378588.775974154, "end_sample_timestamp": 86248718, "error_flags": 0, "fec_valid": true, "page_sequence": 7, "polarity_inverted": true, "prn": 19, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1], "receive_sample_timestamp": 78064718, "sync_valid": true, "word_bits": [0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0], "word_type": 7}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37890033.09323719, "end_sample_timestamp": 94432718, "error_flags": 0, "fec_valid": true, "page_sequence": 8, "polarity_inverted": true, "prn": 19, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1], "receive_sample_timestamp": 86248718, "sync_valid": true, "word_bits": [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], "word_type": 8}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -36882993.88570967, "end_sample_timestamp": 102616718, "error_flags": 0, "fec_valid": true, "page_sequence": 9, "polarity_inverted": true, "prn": 19, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1], "receive_sample_timestamp": 94432718, "sync_valid": true, "word_bits": [0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1], "word_type": 17}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37393925.286522664, "end_sample_timestamp": 110800718, "error_flags": 0, "fec_valid": true, "page_sequence": 10, "polarity_inverted": true, "prn": 19, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1], "receive_sample_timestamp": 102616718, "sync_valid": true, "word_bits": [0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0], "word_type": 19}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -36594291.843542054, "end_sample_timestamp": 118984718, "error_flags": 0, "fec_valid": true, "page_sequence": 11, "polarity_inverted": true, "prn": 19, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1], "receive_sample_timestamp": 110800718, "sync_valid": true, "word_bits": [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0], "word_type": 16}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37445388.43440683, "end_sample_timestamp": 127168718, "error_flags": 0, "fec_valid": true, "page_sequence": 12, "polarity_inverted": true, "prn": 19, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1], "receive_sample_timestamp": 118984718, "sync_valid": true, "word_bits": [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1], "word_type": 0}
|
||||
Binary file not shown.
@@ -0,0 +1,5 @@
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 29, "payload": {"crc_m": 166.625, "crc_raw": 5332, "crs_m": -77.1875, "crs_raw": -2470, "cuc_rad": -3.518536686897278e-06, "cuc_raw": -1889, "cus_rad": 7.985159754753113e-06, "cus_raw": 4287, "delta_n_rad_s": 3.2276344439300102e-09, "delta_n_raw": 9037, "iod_nav": 29, "omega_dot_rad_s": -5.699880280035303e-09, "omega_dot_raw": -15959, "sisa_index": 107}, "prn": 19, "raw_bits": [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1], "receive_sample_timestamp": 20776718, "word_type": 3}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": null, "payload": {"ai0_raw": 0, "ai0_sfu": 0.0, "ai1_raw": 0, "ai1_sfu_per_degree": 0.0, "ai2_raw": 0, "ai2_sfu_per_degree2": 0.0, "bgd_e1_e5a_raw": -15, "bgd_e1_e5a_s": -3.4924596548080444e-09, "bgd_e1_e5b_raw": -17, "bgd_e1_e5b_s": -3.958120942115784e-09, "disturbance_flags": [false, false, false, false, false], "e1b_data_validity_status": 0, "e1b_health": 0, "e5b_data_validity_status": 0, "e5b_health": 0, "time_of_week_s": 554755, "week_number": 1138}, "prn": 19, "raw_bits": [0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "receive_sample_timestamp": 28960718, "word_type": 5}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 29, "payload": {"argument_of_perigee_rad": -1.486853610495253, "argument_of_perigee_raw": -1016361498, "inclination_rad": 0.9603429613162078, "inclination_rate_rad_s": -1.753644474902772e-10, "inclination_rate_raw": -491, "inclination_raw": 656457101, "iod_nav": 29, "omega0_rad": -1.9160215912014322, "omega0_raw": -1309725827}, "prn": 19, "raw_bits": [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0], "receive_sample_timestamp": 53512718, "word_type": 2}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 29, "payload": {"cic_rad": -5.587935447692871e-09, "cic_raw": -3, "cis_rad": 4.0978193283081055e-08, "cis_raw": 22, "clock_bias_raw": 5258000, "clock_bias_s": 0.00030605588108301163, "clock_drift_rate_raw": 0, "clock_drift_rate_s_per_s2": 0.0, "clock_drift_raw": 672, "clock_drift_s_per_s": 9.549694368615746e-12, "iod_nav": 29, "svid": 19, "toc_raw": 9250, "toc_s": 555000.0}, "prn": 19, "raw_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "receive_sample_timestamp": 61696718, "word_type": 4}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": null, "payload": {"a0_raw": 2, "a0_s": 1.862645149230957e-09, "a1_raw": -1, "a1_s_per_s": -8.881784197001252e-16, "delta_tls_s": 18, "future_delta_tls_s": 18, "leap_day": 0, "leap_week_mod256": 114, "reference_time_s": 453600, "reference_week_mod256": 114, "time_of_week_s": 554765}, "prn": 19, "raw_bits": [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0], "receive_sample_timestamp": 69880718, "word_type": 6}
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"prn": 21,
|
||||
"acquisition_detected": true,
|
||||
"acquisition_time_s": 0.08741291100159287,
|
||||
"raw_doppler_hz": -750.0,
|
||||
"expected_doppler_hz": -712.0,
|
||||
"start_sample_timestamp": 93628,
|
||||
"tracking_epoch_count": 16088,
|
||||
"tracking_time_s": 13.982213923998643,
|
||||
"tracking_final_state": "PLL_TRACK",
|
||||
"tracking_reacquisition_requests": 259,
|
||||
"tracking_lock_timestamp": 101812,
|
||||
"prompt_epoch_count": 8044,
|
||||
"first_synchronized_symbol_timestamp": 12598780,
|
||||
"first_page_sync_timestamp": 12598780,
|
||||
"first_crc_valid_page_timestamp": 12598780,
|
||||
"page_parts": 29,
|
||||
"pages": 14,
|
||||
"crc_passes": 14,
|
||||
"crc_failures": 0,
|
||||
"fec_failures": 0,
|
||||
"received_word_types": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"missing_ephemeris_word_types": [],
|
||||
"complete_ephemeris": true,
|
||||
"ephemeris_iod_nav": 29,
|
||||
"first_complete_ephemeris_timestamp": 61702780,
|
||||
"clock_parameters": true,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"decoding_time_s": 1.231179278001946
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"prn": 21,
|
||||
"iod_nav": 29,
|
||||
"toe_s": 555000.0,
|
||||
"toc_s": 555000.0,
|
||||
"sqrt_a": 5440.612789154053,
|
||||
"eccentricity": 3.8767699152231216e-05,
|
||||
"inclination_rad": 0.9776274861774753,
|
||||
"omega0_rad": 0.1789455277652162,
|
||||
"argument_of_perigee_rad": -2.4629566570365555,
|
||||
"mean_anomaly_rad": -2.7956633818013814,
|
||||
"delta_n_rad_s": 3.2879941010091484e-09,
|
||||
"inclination_rate_rad_s": 1.392915163364727e-10,
|
||||
"omega_dot_rad_s": -5.86703009963907e-09,
|
||||
"cuc_rad": 4.423782229423523e-06,
|
||||
"cus_rad": 4.608184099197388e-06,
|
||||
"crc_m": 248.09375,
|
||||
"crs_m": 94.3125,
|
||||
"cic_rad": 1.3224780559539795e-07,
|
||||
"cis_rad": 2.7939677238464355e-08,
|
||||
"clock_bias_s": -0.0006715285708196461,
|
||||
"clock_drift_s_per_s": -2.0889956431346945e-12,
|
||||
"clock_drift_rate_s_per_s2": 0.0,
|
||||
"sisa_index": 107,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"first_received_timestamp": 12598780,
|
||||
"completed_timestamp": 61702780
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -35552102.90647757, "end_sample_timestamp": 20782780, "error_flags": 0, "fec_valid": true, "page_sequence": 0, "polarity_inverted": false, "prn": 21, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1], "receive_sample_timestamp": 12598780, "sync_valid": true, "word_bits": [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], "word_type": 1}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37406797.094925396, "end_sample_timestamp": 28966780, "error_flags": 0, "fec_valid": true, "page_sequence": 1, "polarity_inverted": false, "prn": 21, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1], "receive_sample_timestamp": 20782780, "sync_valid": true, "word_bits": [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1], "word_type": 3}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37390481.13453907, "end_sample_timestamp": 37150780, "error_flags": 0, "fec_valid": true, "page_sequence": 2, "polarity_inverted": false, "prn": 21, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1], "receive_sample_timestamp": 28966780, "sync_valid": true, "word_bits": [0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "word_type": 5}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37742934.57754807, "end_sample_timestamp": 45334780, "error_flags": 0, "fec_valid": true, "page_sequence": 3, "polarity_inverted": false, "prn": 21, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1], "receive_sample_timestamp": 37150780, "sync_valid": true, "word_bits": [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1], "word_type": 0}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -36745914.4818139, "end_sample_timestamp": 53518780, "error_flags": 0, "fec_valid": true, "page_sequence": 4, "polarity_inverted": false, "prn": 21, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1], "receive_sample_timestamp": 45334780, "sync_valid": true, "word_bits": [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0], "word_type": 16}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37622021.682346165, "end_sample_timestamp": 61702780, "error_flags": 0, "fec_valid": true, "page_sequence": 5, "polarity_inverted": false, "prn": 21, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1], "receive_sample_timestamp": 53518780, "sync_valid": true, "word_bits": [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0], "word_type": 2}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37389928.62019353, "end_sample_timestamp": 69886780, "error_flags": 0, "fec_valid": true, "page_sequence": 6, "polarity_inverted": false, "prn": 21, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1], "receive_sample_timestamp": 61702780, "sync_valid": true, "word_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], "word_type": 4}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37171501.91370028, "end_sample_timestamp": 78070780, "error_flags": 0, "fec_valid": true, "page_sequence": 7, "polarity_inverted": false, "prn": 21, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1], "receive_sample_timestamp": 69886780, "sync_valid": true, "word_bits": [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0], "word_type": 6}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -36449438.90387831, "end_sample_timestamp": 86254780, "error_flags": 0, "fec_valid": true, "page_sequence": 8, "polarity_inverted": false, "prn": 21, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1], "receive_sample_timestamp": 78070780, "sync_valid": true, "word_bits": [0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0], "word_type": 7}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37366223.00590478, "end_sample_timestamp": 94438780, "error_flags": 0, "fec_valid": true, "page_sequence": 9, "polarity_inverted": false, "prn": 21, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1], "receive_sample_timestamp": 86254780, "sync_valid": true, "word_bits": [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], "word_type": 8}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37771429.71995315, "end_sample_timestamp": 102622780, "error_flags": 0, "fec_valid": true, "page_sequence": 10, "polarity_inverted": false, "prn": 21, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1], "receive_sample_timestamp": 94438780, "sync_valid": true, "word_bits": [0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1], "word_type": 17}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37679866.96467729, "end_sample_timestamp": 110806780, "error_flags": 0, "fec_valid": true, "page_sequence": 11, "polarity_inverted": false, "prn": 21, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1], "receive_sample_timestamp": 102622780, "sync_valid": true, "word_bits": [0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1], "word_type": 19}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37625256.84442176, "end_sample_timestamp": 118990780, "error_flags": 0, "fec_valid": true, "page_sequence": 12, "polarity_inverted": false, "prn": 21, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1], "receive_sample_timestamp": 110806780, "sync_valid": true, "word_bits": [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0], "word_type": 16}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37544150.994597025, "end_sample_timestamp": 127174780, "error_flags": 0, "fec_valid": true, "page_sequence": 13, "polarity_inverted": false, "prn": 21, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1], "receive_sample_timestamp": 118990780, "sync_valid": true, "word_bits": [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1], "word_type": 0}
|
||||
Binary file not shown.
@@ -0,0 +1,6 @@
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 29, "payload": {"eccentricity": 3.8767699152231216e-05, "eccentricity_raw": 333012, "iod_nav": 29, "mean_anomaly_rad": -2.7956633818013814, "mean_anomaly_raw": -1911018410, "sqrt_a": 5440.612789154053, "sqrt_a_raw": 2852447998, "toe_raw": 9250, "toe_s": 555000.0}, "prn": 21, "raw_bits": [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], "receive_sample_timestamp": 12598780, "word_type": 1}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 29, "payload": {"crc_m": 248.09375, "crc_raw": 7939, "crs_m": 94.3125, "crs_raw": 3018, "cuc_rad": 4.423782229423523e-06, "cuc_raw": 2375, "cus_rad": 4.608184099197388e-06, "cus_raw": 2474, "delta_n_rad_s": 3.2879941010091484e-09, "delta_n_raw": 9206, "iod_nav": 29, "omega_dot_rad_s": -5.86703009963907e-09, "omega_dot_raw": -16427, "sisa_index": 107}, "prn": 21, "raw_bits": [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1], "receive_sample_timestamp": 20782780, "word_type": 3}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": null, "payload": {"ai0_raw": 0, "ai0_sfu": 0.0, "ai1_raw": 0, "ai1_sfu_per_degree": 0.0, "ai2_raw": 0, "ai2_sfu_per_degree2": 0.0, "bgd_e1_e5a_raw": 10, "bgd_e1_e5a_s": 2.3283064365386963e-09, "bgd_e1_e5b_raw": 11, "bgd_e1_e5b_s": 2.561137080192566e-09, "disturbance_flags": [false, false, false, false, false], "e1b_data_validity_status": 0, "e1b_health": 0, "e5b_data_validity_status": 0, "e5b_health": 0, "time_of_week_s": 554755, "week_number": 1138}, "prn": 21, "raw_bits": [0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "receive_sample_timestamp": 28966780, "word_type": 5}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 29, "payload": {"argument_of_perigee_rad": -2.4629566570365555, "argument_of_perigee_raw": -1683591646, "inclination_rad": 0.9776274861774753, "inclination_rate_rad_s": 1.392915163364727e-10, "inclination_rate_raw": 390, "inclination_raw": 668272202, "iod_nav": 29, "omega0_rad": 0.1789455277652162, "omega0_raw": 122320949}, "prn": 21, "raw_bits": [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0], "receive_sample_timestamp": 53518780, "word_type": 2}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 29, "payload": {"cic_rad": 1.3224780559539795e-07, "cic_raw": 71, "cis_rad": 2.7939677238464355e-08, "cis_raw": 15, "clock_bias_raw": -11536773, "clock_bias_s": -0.0006715285708196461, "clock_drift_rate_raw": 0, "clock_drift_rate_s_per_s2": 0.0, "clock_drift_raw": -147, "clock_drift_s_per_s": -2.0889956431346945e-12, "iod_nav": 29, "svid": 21, "toc_raw": 9250, "toc_s": 555000.0}, "prn": 21, "raw_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], "receive_sample_timestamp": 61702780, "word_type": 4}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": null, "payload": {"a0_raw": 2, "a0_s": 1.862645149230957e-09, "a1_raw": -1, "a1_s_per_s": -8.881784197001252e-16, "delta_tls_s": 18, "future_delta_tls_s": 18, "leap_day": 0, "leap_week_mod256": 114, "reference_time_s": 453600, "reference_week_mod256": 114, "time_of_week_s": 554765}, "prn": 21, "raw_bits": [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0], "receive_sample_timestamp": 69886780, "word_type": 6}
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"prn": 27,
|
||||
"acquisition_detected": true,
|
||||
"acquisition_time_s": 0.08157938700605882,
|
||||
"raw_doppler_hz": -2750.0,
|
||||
"expected_doppler_hz": -2637.0,
|
||||
"start_sample_timestamp": 88014,
|
||||
"tracking_epoch_count": 16088,
|
||||
"tracking_time_s": 13.978430488001322,
|
||||
"tracking_final_state": "PLL_TRACK",
|
||||
"tracking_reacquisition_requests": 0,
|
||||
"tracking_lock_timestamp": 96198,
|
||||
"prompt_epoch_count": 8044,
|
||||
"first_synchronized_symbol_timestamp": 12642270,
|
||||
"first_page_sync_timestamp": 12642270,
|
||||
"first_crc_valid_page_timestamp": 12642270,
|
||||
"page_parts": 29,
|
||||
"pages": 14,
|
||||
"crc_passes": 14,
|
||||
"crc_failures": 0,
|
||||
"fec_failures": 0,
|
||||
"received_word_types": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"missing_ephemeris_word_types": [],
|
||||
"complete_ephemeris": true,
|
||||
"ephemeris_iod_nav": 29,
|
||||
"first_complete_ephemeris_timestamp": 61746270,
|
||||
"clock_parameters": true,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"decoding_time_s": 1.2002744679994066
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"prn": 27,
|
||||
"iod_nav": 29,
|
||||
"toe_s": 555000.0,
|
||||
"toc_s": 555000.0,
|
||||
"sqrt_a": 5440.6105098724365,
|
||||
"eccentricity": 0.00015918409917503595,
|
||||
"inclination_rad": 0.9775995078692093,
|
||||
"omega0_rad": 0.17894288427224694,
|
||||
"argument_of_perigee_rad": -1.0541993804356522,
|
||||
"mean_anomaly_rad": 2.8707087693201396,
|
||||
"delta_n_rad_s": 3.316566719744835e-09,
|
||||
"inclination_rate_rad_s": 2.282237921512976e-10,
|
||||
"omega_dot_rad_s": -5.8148850704464415e-09,
|
||||
"cuc_rad": 4.628673195838928e-06,
|
||||
"cus_rad": 4.498288035392761e-06,
|
||||
"crc_m": 251.0,
|
||||
"crs_m": 97.59375,
|
||||
"cic_rad": -5.029141902923584e-08,
|
||||
"cis_rad": 1.2293457984924316e-07,
|
||||
"clock_bias_s": -5.756091559305787e-05,
|
||||
"clock_drift_s_per_s": -8.256506589532364e-12,
|
||||
"clock_drift_rate_s_per_s2": 0.0,
|
||||
"sisa_index": 107,
|
||||
"health_valid": true,
|
||||
"data_valid": true,
|
||||
"first_received_timestamp": 12642270,
|
||||
"completed_timestamp": 61746270
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -36075317.144798115, "end_sample_timestamp": 20826270, "error_flags": 0, "fec_valid": true, "page_sequence": 0, "polarity_inverted": true, "prn": 27, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1], "receive_sample_timestamp": 12642270, "sync_valid": true, "word_bits": [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0], "word_type": 1}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -36844149.807004556, "end_sample_timestamp": 29010270, "error_flags": 0, "fec_valid": true, "page_sequence": 1, "polarity_inverted": true, "prn": 27, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1], "receive_sample_timestamp": 20826270, "sync_valid": true, "word_bits": [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1], "word_type": 3}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37622600.38442041, "end_sample_timestamp": 37194270, "error_flags": 0, "fec_valid": true, "page_sequence": 2, "polarity_inverted": true, "prn": 27, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], "receive_sample_timestamp": 29010270, "sync_valid": true, "word_bits": [0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "word_type": 5}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37726148.72605458, "end_sample_timestamp": 45378270, "error_flags": 0, "fec_valid": true, "page_sequence": 3, "polarity_inverted": true, "prn": 27, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1], "receive_sample_timestamp": 37194270, "sync_valid": true, "word_bits": [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1], "word_type": 0}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37556709.4655622, "end_sample_timestamp": 53562270, "error_flags": 0, "fec_valid": true, "page_sequence": 4, "polarity_inverted": true, "prn": 27, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1], "receive_sample_timestamp": 45378270, "sync_valid": true, "word_bits": [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0], "word_type": 16}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37497983.34770237, "end_sample_timestamp": 61746270, "error_flags": 0, "fec_valid": true, "page_sequence": 5, "polarity_inverted": true, "prn": 27, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1], "receive_sample_timestamp": 53562270, "sync_valid": true, "word_bits": [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0], "word_type": 2}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37651525.442600474, "end_sample_timestamp": 69930270, "error_flags": 0, "fec_valid": true, "page_sequence": 6, "polarity_inverted": true, "prn": 27, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1], "receive_sample_timestamp": 61746270, "sync_valid": true, "word_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], "word_type": 4}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37160243.881659985, "end_sample_timestamp": 78114270, "error_flags": 0, "fec_valid": true, "page_sequence": 7, "polarity_inverted": true, "prn": 27, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1], "receive_sample_timestamp": 69930270, "sync_valid": true, "word_bits": [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0], "word_type": 6}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37279591.42338821, "end_sample_timestamp": 86298270, "error_flags": 0, "fec_valid": true, "page_sequence": 8, "polarity_inverted": true, "prn": 27, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1], "receive_sample_timestamp": 78114270, "sync_valid": true, "word_bits": [0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0], "word_type": 7}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -36969270.021290794, "end_sample_timestamp": 94482270, "error_flags": 0, "fec_valid": true, "page_sequence": 9, "polarity_inverted": true, "prn": 27, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1], "receive_sample_timestamp": 86298270, "sync_valid": true, "word_bits": [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], "word_type": 8}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37372092.32899024, "end_sample_timestamp": 102666270, "error_flags": 0, "fec_valid": true, "page_sequence": 10, "polarity_inverted": true, "prn": 27, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1], "receive_sample_timestamp": 94482270, "sync_valid": true, "word_bits": [0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1], "word_type": 17}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37256583.709870234, "end_sample_timestamp": 110850270, "error_flags": 0, "fec_valid": true, "page_sequence": 11, "polarity_inverted": true, "prn": 27, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1], "receive_sample_timestamp": 102666270, "sync_valid": true, "word_bits": [0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0], "word_type": 19}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37464089.78168535, "end_sample_timestamp": 119034270, "error_flags": 0, "fec_valid": true, "page_sequence": 12, "polarity_inverted": true, "prn": 27, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1], "receive_sample_timestamp": 110850270, "sync_valid": true, "word_bits": [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0], "word_type": 16}
|
||||
{"crc_valid": true, "decoded_bits": [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "decoder_metric": -37485283.750082165, "end_sample_timestamp": 127218270, "error_flags": 0, "fec_valid": true, "page_sequence": 13, "polarity_inverted": true, "prn": 27, "raw_symbols": [0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1], "receive_sample_timestamp": 119034270, "sync_valid": true, "word_bits": [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1], "word_type": 0}
|
||||
Binary file not shown.
@@ -0,0 +1,6 @@
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 29, "payload": {"eccentricity": 0.00015918409917503595, "eccentricity_raw": 1367381, "iod_nav": 29, "mean_anomaly_rad": 2.8707087693201396, "mean_anomaly_raw": 1962316831, "sqrt_a": 5440.6105098724365, "sqrt_a_raw": 2852446803, "toe_raw": 9250, "toe_s": 555000.0}, "prn": 27, "raw_bits": [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0], "receive_sample_timestamp": 12642270, "word_type": 1}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 29, "payload": {"crc_m": 251.0, "crc_raw": 8032, "crs_m": 97.59375, "crs_raw": 3123, "cuc_rad": 4.628673195838928e-06, "cuc_raw": 2485, "cus_rad": 4.498288035392761e-06, "cus_raw": 2415, "delta_n_rad_s": 3.316566719744835e-09, "delta_n_raw": 9286, "iod_nav": 29, "omega_dot_rad_s": -5.8148850704464415e-09, "omega_dot_raw": -16281, "sisa_index": 107}, "prn": 27, "raw_bits": [0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1], "receive_sample_timestamp": 20826270, "word_type": 3}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": null, "payload": {"ai0_raw": 0, "ai0_sfu": 0.0, "ai1_raw": 0, "ai1_sfu_per_degree": 0.0, "ai2_raw": 0, "ai2_sfu_per_degree2": 0.0, "bgd_e1_e5a_raw": 9, "bgd_e1_e5a_s": 2.0954757928848267e-09, "bgd_e1_e5b_raw": 10, "bgd_e1_e5b_s": 2.3283064365386963e-09, "disturbance_flags": [false, false, false, false, false], "e1b_data_validity_status": 0, "e1b_health": 0, "e5b_data_validity_status": 0, "e5b_health": 0, "time_of_week_s": 554755, "week_number": 1138}, "prn": 27, "raw_bits": [0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "receive_sample_timestamp": 29010270, "word_type": 5}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 29, "payload": {"argument_of_perigee_rad": -1.0541993804356522, "argument_of_perigee_raw": -720614090, "inclination_rad": 0.9775995078692093, "inclination_rate_rad_s": 2.282237921512976e-10, "inclination_rate_raw": 639, "inclination_raw": 668253077, "iod_nav": 29, "omega0_rad": 0.17894288427224694, "omega0_raw": 122319142}, "prn": 27, "raw_bits": [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0], "receive_sample_timestamp": 53562270, "word_type": 2}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": 29, "payload": {"cic_rad": -5.029141902923584e-08, "cic_raw": -27, "cis_rad": 1.2293457984924316e-07, "cis_raw": 66, "clock_bias_raw": -988889, "clock_bias_s": -5.756091559305787e-05, "clock_drift_rate_raw": 0, "clock_drift_rate_s_per_s2": 0.0, "clock_drift_raw": -581, "clock_drift_s_per_s": -8.256506589532364e-12, "iod_nav": 29, "svid": 27, "toc_raw": 9250, "toc_s": 555000.0}, "prn": 27, "raw_bits": [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], "receive_sample_timestamp": 61746270, "word_type": 4}
|
||||
{"crc_valid": true, "health_valid": true, "iod_nav": null, "payload": {"a0_raw": 2, "a0_s": 1.862645149230957e-09, "a1_raw": -1, "a1_s_per_s": -8.881784197001252e-16, "delta_tls_s": 18, "future_delta_tls_s": 18, "leap_day": 0, "leap_week_mod256": 114, "reference_time_s": 453600, "reference_week_mod256": 114, "time_of_week_s": 554765}, "prn": 27, "raw_bits": [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0], "receive_sample_timestamp": 69930270, "word_type": 6}
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -56,3 +56,32 @@ vectors:
|
||||
e1b_only: {status: blocked_SignalSim_E1_is_combined}
|
||||
e1c_only: {status: blocked_SignalSim_E1_is_combined}
|
||||
e1b_e1c_combined: {status: alias_of_high_cn0_single_prn}
|
||||
navigation_single_prn:
|
||||
status: generated_crc_valid_page
|
||||
config: navigation_single_prn/generated_config.json
|
||||
output: navigation_single_prn/navigation_single_prn_iq8.bin
|
||||
representation: complex_iq
|
||||
sample_format: interleaved_twos_complement_int8_iq
|
||||
sample_rate_hz: 4092000
|
||||
galileo_e1_if_hz: 1023000
|
||||
duration_s: 4.2
|
||||
prn: 1
|
||||
components: [E1B, E1C]
|
||||
sha256: 4169cb7573913dbf0179b731bd1103b3a94cac3364d1337541311ca5843c8f93
|
||||
generated_file_committed: false
|
||||
navigation_multisat:
|
||||
status: navigation_ready_four_of_five
|
||||
config: navigation_multisat/generated_config.json
|
||||
output: navigation_multisat/navigation_multisat_iq8.bin
|
||||
representation: complex_iq
|
||||
sample_format: interleaved_twos_complement_int8_iq
|
||||
sample_rate_hz: 4092000
|
||||
galileo_e1_if_hz: 1023000
|
||||
duration_s: 32.2
|
||||
prns: [1, 4, 19, 21, 27]
|
||||
components: [E1B, E1C]
|
||||
sha256: b38393b32eec2df53f9813ea7ff8f13e5e0fc72fa5cb7fb910a2b8f907a56a6e
|
||||
generated_file_committed: false
|
||||
decoded_pages: 70
|
||||
crc_passes: 70
|
||||
complete_ephemeris_prns: [1, 4, 21, 27]
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
{
|
||||
"version": 1.0,
|
||||
"description": "SignalSim validation vector: navigation_multisat",
|
||||
"time": {
|
||||
"type": "UTC",
|
||||
"year": 2021,
|
||||
"month": 6,
|
||||
"day": 19,
|
||||
"hour": 10,
|
||||
"minute": 5,
|
||||
"second": 30
|
||||
},
|
||||
"trajectory": {
|
||||
"name": "static single-PRN integration baseline",
|
||||
"initPosition": {
|
||||
"type": "LLA",
|
||||
"format": "d",
|
||||
"longitude": -121.915773,
|
||||
"latitude": 37.352721,
|
||||
"altitude": 20
|
||||
},
|
||||
"initVelocity": {
|
||||
"type": "SCU",
|
||||
"speed": 0,
|
||||
"course": 0
|
||||
},
|
||||
"trajectoryList": [
|
||||
{
|
||||
"type": "Const",
|
||||
"time": 32.2
|
||||
}
|
||||
]
|
||||
},
|
||||
"ephemeris": {
|
||||
"type": "RINEX",
|
||||
"name": "/home/onur/Desktop/galileo/signalsim/SignalSim/EphData/BRDC00IGS_R_20211700000_01D_MN.rnx"
|
||||
},
|
||||
"output": {
|
||||
"type": "IFdata",
|
||||
"format": "IQ8",
|
||||
"sampleFreq": 4.092,
|
||||
"centerFreq": 1574.397,
|
||||
"name": "navigation_multisat_iq8.bin",
|
||||
"config": {
|
||||
"elevationMask": 3,
|
||||
"maskOut": [
|
||||
{
|
||||
"system": "Galileo",
|
||||
"svid": [
|
||||
2,
|
||||
3,
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8,
|
||||
9,
|
||||
10,
|
||||
11,
|
||||
12,
|
||||
13,
|
||||
14,
|
||||
15,
|
||||
16,
|
||||
17,
|
||||
18,
|
||||
20,
|
||||
22,
|
||||
23,
|
||||
24,
|
||||
25,
|
||||
26,
|
||||
28,
|
||||
29,
|
||||
30,
|
||||
31,
|
||||
32,
|
||||
33,
|
||||
34,
|
||||
35,
|
||||
36
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"systemSelect": [
|
||||
{
|
||||
"system": "GPS",
|
||||
"signal": "L1CA",
|
||||
"enable": false
|
||||
},
|
||||
{
|
||||
"system": "BDS",
|
||||
"signal": "B1C",
|
||||
"enable": false
|
||||
},
|
||||
{
|
||||
"system": "Galileo",
|
||||
"signal": "E1",
|
||||
"enable": true
|
||||
},
|
||||
{
|
||||
"system": "GLONASS",
|
||||
"signal": "G1",
|
||||
"enable": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"power": {
|
||||
"noiseFloor": -172,
|
||||
"initPower": {
|
||||
"unit": "dBHz",
|
||||
"value": 55.0
|
||||
},
|
||||
"elevationAdjust": false
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,37 @@
|
||||
name: navigation_multisat
|
||||
signalsim_path: /home/onur/Desktop/galileo/signalsim/SignalSim
|
||||
signalsim_commit: 80b262113e77c4482ca9f5cbfef9bcada402ed28
|
||||
command:
|
||||
- /home/onur/Desktop/galileo/build/signalsim/IFdataGen
|
||||
- -c
|
||||
- /home/onur/Desktop/galileo/verification/vectors/signalsim/navigation_multisat/generated_config.json
|
||||
- -o
|
||||
- /home/onur/Desktop/galileo/verification/vectors/signalsim/navigation_multisat/navigation_multisat_iq8.bin
|
||||
- -t
|
||||
- -st
|
||||
output: verification/vectors/signalsim/navigation_multisat/navigation_multisat_iq8.bin
|
||||
size_bytes: 263516616
|
||||
sha256: b38393b32eec2df53f9813ea7ff8f13e5e0fc72fa5cb7fb910a2b8f907a56a6e
|
||||
complex_sample_count: 131758308
|
||||
sampling_frequency_hz: 4092000.0
|
||||
intermediate_frequency_hz: 1023000.0
|
||||
sample_format: IQ8_interleaved_signed_I_then_Q
|
||||
duration_s: 32.2
|
||||
prns:
|
||||
- 1
|
||||
- 4
|
||||
- 19
|
||||
- 21
|
||||
- 27
|
||||
components:
|
||||
- E1B
|
||||
- E1C
|
||||
expected_doppler_hz:
|
||||
1: 1828.0
|
||||
4: 2171.0
|
||||
19: -367.0
|
||||
21: -712.0
|
||||
27: -2637.0
|
||||
expected_code_delay: null
|
||||
navigation_truth: INavBit generated from bundled RINEX; no sample-side truth file
|
||||
secondary_truth: PilotBit.cpp SecondaryCodeE1, phase must be synchronized
|
||||
@@ -0,0 +1,8 @@
|
||||
PROG = IFDataGen
|
||||
TIME = 2026/07/30 20:44:51.803
|
||||
FMT = INT8X2
|
||||
F_S = 4.092000
|
||||
F_LO = 1574.397000
|
||||
IQ = 1
|
||||
BITS = 8
|
||||
SCALE = 1.0
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user