Metadata-Version: 2.4
Name: mmwcore
Version: 0.2.2
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Rust
Classifier: Topic :: Scientific/Engineering
Requires-Dist: numpy>=1.24
Requires-Dist: matplotlib>=3.8 ; extra == 'dev'
Requires-Dist: maturin>=1.9,<2 ; extra == 'dev'
Requires-Dist: pyright>=1.1 ; extra == 'dev'
Requires-Dist: pytest>=8 ; extra == 'dev'
Requires-Dist: pytest-cov>=7,<8 ; extra == 'dev'
Requires-Dist: ruff>=0.8 ; extra == 'dev'
Requires-Dist: matplotlib>=3.8 ; extra == 'plot'
Provides-Extra: dev
Provides-Extra: plot
License-File: LICENSE
License-File: NOTICE
Summary: Typed mmWave radar data-link and signal-processing primitives backed by Rust.
Keywords: mmwave,radar,fmcw,signal-processing,tracking
Author: mmwcore contributors
License-Expression: Apache-2.0
Requires-Python: >=3.12, <3.13
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Documentation, https://github.com/AIoT-Laboratory/mmwcore/tree/main/docs
Project-URL: Issues, https://github.com/AIoT-Laboratory/mmwcore/issues
Project-URL: Repository, https://github.com/AIoT-Laboratory/mmwcore

# mmwcore

Typed mmWave radar acquisition and signal-processing primitives implemented in Rust, with a
Python API for research workflows.

mmwcore owns the physical data path from raw ADC samples to detections, calibrated point clouds,
tracking inputs, and vital-sign phase. Application models and experiment orchestration belong in
downstream projects.

## Install

Python 3.12:

```console
pip install mmwcore
```

Rust 1.85 or newer:

```console
cargo add mmwcore
```

## Python

```python
import numpy as np

from mmwcore.core import ADCFrameSpec, RawADCFrame
from mmwcore.dsp import organize_adc_samples

raw = RawADCFrame(np.zeros(4 * 128 * 2, dtype=np.int16))
cube = organize_adc_samples(
    raw,
    ADCFrameSpec(num_chirps=2, num_rx=4, num_samples=128),
)
print(cube.data.shape)
```

The `mmwcore` command exposes inspection and preprocessing operations:

```console
mmwcore --help
```

## Scope

- DCA1000 packet/file ingestion
- explicit ADC, FFT, calibration, antenna, detection, point-cloud, and tracking contracts
- range, Doppler, angle, CFAR, clutter suppression, calibration, TDM compensation, and
  deterministic Cartesian sparsification
- DBSCAN and stateful 2D tracking
- radar/camera capture-session synchronization contracts
- Rust kernels exposed through PyO3; plotting remains in Python

The project is alpha. Physical conventions are explicit and tested, but hardware coverage and
public validation vectors are still being expanded.

## OpenRadar relationship

mmwcore is designed as a typed, performance-oriented, dual-language successor to OpenRadar rather
than a source fork. It already covers the main raw-ADC-to-point-cloud path and adds calibrated TDM
processing, tracking, session contracts, and Rust distribution. Capon/Bartlett parity, broader
public device fixtures, and identical-input benchmarks remain release gates before claiming a
strict superset or a measured performance advantage.
See [the comparison](https://github.com/AIoT-Laboratory/mmwcore/blob/main/docs/openradar-comparison.md).

## Development

```console
uv sync --extra dev
uv run pytest --cov=mmwcore
cargo test --workspace --locked
```

See [CONTRIBUTING.md](https://github.com/AIoT-Laboratory/mmwcore/blob/main/CONTRIBUTING.md)
and [the architecture](https://github.com/AIoT-Laboratory/mmwcore/blob/main/docs/architecture.md).

## License

Apache-2.0.

