Metadata-Version: 2.5
Name: ntrip-rtcm3-to-rtcm2p3
Version: 0.1.0.post13
Summary: NTRIP receiver + LAN rebroadcaster that converts an RTCM 3.x reference stream into RTCM 2.3 DGPS corrections for legacy receivers
Project-URL: Homepage, https://github.com/mithro/ntrip-rtcm3-to-rtcm2p3
Project-URL: Documentation, https://ntrip-rtcm3-to-rtcm2p3.readthedocs.io/
Project-URL: Repository, https://github.com/mithro/ntrip-rtcm3-to-rtcm2p3
Project-URL: Issues, https://github.com/mithro/ntrip-rtcm3-to-rtcm2p3/issues
Author-email: Tim 'mithro' Ansell <me@mith.ro>
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: dgps,gnss,gps,ntrip,rtcm
Requires-Python: >=3.11
Requires-Dist: pyrtcm>=1.2
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Provides-Extra: docs
Requires-Dist: furo>=2024.1; extra == 'docs'
Requires-Dist: myst-parser>=3; extra == 'docs'
Requires-Dist: sphinx>=7; extra == 'docs'
Requires-Dist: sphinxcontrib-mermaid>=1.0; extra == 'docs'
Description-Content-Type: text/markdown

# ntrip-rtcm3-to-rtcm2p3

An [NTRIP](https://software.rtcm-ntrip.org/) **receiver + LAN rebroadcaster** that
also **converts** an [RTCM](https://www.rtcm.org/publications) 3.x reference stream
into **RTCM 2.3** DGPS corrections, so that legacy single-band receivers that only
understand RTCM 2.3 (e.g. the [u-blox 7](https://www.u-blox.com/en/product/neo-7-series))
can benefit from a modern RTCM3-only correction network.

> Built incrementally with a full test suite; every conversion stage is
> cross-checked against independent implementations (see the Validation docs).

📖 **[Documentation](https://ntrip-rtcm3-to-rtcm2p3.readthedocs.io/)** (Read the Docs)

## Why

Modern correction networks (e.g. Geoscience Australia's
[AUSCORS](https://gnss.ga.gov.au/)) broadcast **RTCM 3.x** only. A u-blox 7 / NEO-7
accepts **RTCM 2.3** DGPS corrections but has no RTCM3 decoder. No off-the-shelf
tool converts RTCM3 → RTCM 2.3 ([RTKLIB](https://github.com/tomojitakasu/RTKLIB)'s
`str2str` can only *emit* RTCM3; the
[BKG NTRIP Client (BNC)](https://igs.bkg.bund.de/ntrip/bnc) only *decodes* RTCM2).
RTCM 2.3 Type 1 messages are
*derived* pseudorange corrections, not a reformat — they must be computed from the
base station's observations, its known position, and satellite positions from
broadcast ephemeris.

## Pipeline

```
        obs + base position                 broadcast ephemeris
   (RTCM3 MSM7 1077, 1006)                 (RTCM3 1019, separate mount)
             │                                       │
             ▼                                       ▼
      decode pseudoranges  ───────────────►  satellite position + clock
             │                                       │
             └───────────────┬───────────────────────┘
                             ▼
                   per-SV PRC / RRC  (DGPS reference-station math)
                             ▼
                   encode RTCM 2.3 Type 1 / 3 (parity, IOD, scaling)
                             ▼
              serve as a local NTRIP mount alongside the raw RTCM3
```

## Development

```bash
uv run --extra dev pytest        # test suite
uv run --extra dev ruff check .  # lint
```

## License

Apache-2.0. See [LICENSE](LICENSE).
