# GNSS pseudorange least-squares Lab

This package is a deterministic, synthetic teaching example. It solves a single-epoch Cartesian receiver position and clock-bias estimate from pseudoranges. It does not represent receiver measurements, RTK performance, NMEA logs, geodetic coordinates, or ambiguity fixing.

Run with Python 3.10+ and the standard library only:

```text
python3 reproduce.py
python3 -m unittest -v test_experiment.py
```

All distances and clock bias are metres. The four state variables are `x_m`, `y_m`, `z_m`, and `clock_bias_m`. The generated CSV is frozen and the manifest records hashes and expected metrics. Poor geometry is an intentional educational condition; its large DOP must not be read as a receiver accuracy claim.
