minimal raytracing code example for MIMO FMCW radar
Project description
mmWrt
minimal raytracing for MIMO FMCW radar systems.
Intended usage:
- educational & experimental
simple install:
- git clone
- pip install .
for install for developpers:
- git clone
- pip install .[dev]
Release Notes and Roadmap
Released
v0.0.13 (next):
- TODO:
- define a chirp properties (chirp_slope, chirp_start_frequency, chirp_end_time) on chirp_idx
- add a ADC start delay (and check that it does not end after ramp-end or warning)
- planning for S-FMCW add a chirp ramp start delay (when the TX ramp starts vs chirp start)
- renaming chirp_end_time to chirp_ramp_end_time
- adding chirp_ramp_start_time=0
- adding check that chirp_ramp_start_time + chirp_ramp_end_time < chirp_period
- adding adc_sampling_start_time=0
- add ditherring support
- add pcl (x,y,z,v,A,noise)
- FIXME:
- Precision.ipynb (carry over from v0.0.11)
- remove all default values in the radar transceiver and resceiver definitions
- Precision.ipynb is totally broken: calls rsp.frequency_estimator which is an empty wrapper
1. need to add pytests for frequency_estimator for fft, quinn2
- > requires more work than v0.0.11 -> moving this to v0.013
-
v0.0.12:
- FIXME:
fix the colab linksfix the badges in README: doi + % coverage- ~~ sphinx: WARNING: html_static_path entry '_static' does not exist~~
- TODO:
move to toml- ~~flake8: 458 errors - move to <10 # ~~
pytest: 60 passed (one error for Angle_of_Arrival.ipynb)coverage: 73%- tox: successful on ["py310", "py311", "py312", "py313", "py314"]
- FIXME:
-
v0.0.11:
- added support for interfer radars
- added in rsp suport for 3d point cloud output
- broad renaming for clarity on variables
-
v0.0.10:
- adding distance as a function of time in IF compute - allowing for simulation of target changing bin ranges through single chirp
- fixes #3 (numpy deprecating complex_ replacing with complex128)
-
v0.0.9:
- adding ULA, URA for TDM MIMO
- adding 3D points for TDM MIMO (x,y,z)
-
v0.0.8:
- adding TDM MIMO
- adding DDM MIMO (including Doppler desambiguation)
-
v0.0.7
- adding AoA
- adding sparse array initial example (feature dedicated to Amine L.)
-
v0.0.6:
- added micro-doppler
- added non-regression on .ipynb in docs/ folder
-
v0.0.5:
- moved dependancies from requirements to setup.py
- added extras [dev] for developpers (and documentation and read the docs)
- moved version checking from setup.py to test_basic.py
- added readthedocs.yaml
-
v0.0.4:
- adding frequency estimator
- added speed processing
- added support for radar equation (RCS, distance, ...)
- antenna gains in azimumth, elevation and freq
-
v0.0.3: first release
- point targets only
- 1D compute of baseband if signal for scene
- 1D FFT, CFAR, peak grouping and target position error compute
- single reflections
NEXT ()
* 2D (AoA)
* 2D FFT: range+velocity, range+AoA
* 2D peak grouping (by velocity sign)
* 3D position error compute
* 3D targets (at least spheres)
* medium attenuation
* 3D point clouds (i.e. over multiple CTI)
* multiple single reflections
Not planned yet but considered:
- reads and loads .bin from DCA1000
- record BB signals in .bin
- 3D targets and scene rendering with imaging side by side radar
- Swerling's scattering
Example Code
Check on Google Colab the code:
On dependencies
- jupyterlab-myst: used for displaying admonition in jupyter notebook (and thus documentation on read the docs)
LOGS
- 4, refactor for interfers
Release process
-
Ensure all the new .ipynb are added in docs/Hands-on.md
-
run pyroma (should be 10/10), before this check pyproject.toml
validate-pyproject pyproject.toml pyproject-fmt pyproject.toml
pyroma .
- run flake8 runs with darglint settings for docstrings to numpy standard set in the .flake8 file should yield 0 warnings or errors
flake8
or
flake8 --ignore=DAR005,DAR103
- run pytest should yield 100% pass
pytest
for intermediate releases, excluding some tests can be done with
pytest --ignore=tests\test_docs.py --ignore=tests\test_nb.py
- run coverage
coverage run -m pytest
alternatively in rc phases
coverage run --omit="pytest/,/tests/*" -m pytest --ignore=tests\test_docs.py --ignore=tests\test_nb.py
- run coverage report (should be 100%)
coverage report
then
python update-badges.py
- run tox
tox
7.run sphinx-api
updates the *.rst in docs/ folder
sphinx-apidoc -f -o docs mmWrt
- run sphinx-build (updates the read_the_docs folder)
sphinx-build -b html docs build/html
- release the Release-Candidate to pypi-test with setuptools
check that init.py is "0.0.X-pre.Y" for RC numberingcheck that the latest tag is correct 0.x.y-pre.n
> python setup.py bdist_wheel
python -m build
twine upload -r testpypi dist*
- check on Google Colab (Google Colab requires py3.8 as off 2023-Jan-15)
if testing release-candidate need to add --pre -U or will install latest stable version.
!python -m pip install -i https://test.pypi.org/simple/ --pre -U mmWrt
from mmWrt import __version__
print(__version__)
- merge dev branch with main
git checkout main git merge dev_branch_name
-
update the version to final update init.py to remove the suffix -pre.Y "0.0.X-pre.Y"
-
release on pypi (assumes your pypirc is local to the project)
twine upload -r pypi --config-file=..pypirc dist*
- check on colab that pypi package works:
!python -m pip install mmWrt from mmWrt import version print(version)
- check updates on read_the_docs
push to git to trigger readthedocs build: git push navigate to https://readthedocs.org/projects/mmwrt/builds/ ensure build is successful
- (optional) add tag for release
git tag -a v0.0.X -m "version comment" git push origin v0.0.X
- then check on google colab dev extras instals works
!python -m pip install mmWrt[dev]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mmwrt-0.0.13.tar.gz.
File metadata
- Download URL: mmwrt-0.0.13.tar.gz
- Upload date:
- Size: 14.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d614721920bf915b73f6baf2149c086bb35649d728ac2a4adff9c505429fe4d
|
|
| MD5 |
26a3d4b04dafc9b6091d4d4e69d63c89
|
|
| BLAKE2b-256 |
6c77b928871fb1642618542fc79692a7a9a29aa4b6b21ab64686495671b63dc2
|
File details
Details for the file mmwrt-0.0.13-py3-none-any.whl.
File metadata
- Download URL: mmwrt-0.0.13-py3-none-any.whl
- Upload date:
- Size: 33.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6dc35dd17c11376416ab3c703bedde1ac199591768bc7e40ac0da1e6248e144b
|
|
| MD5 |
9d3a7196e3bcc1df350eef3d6793115d
|
|
| BLAKE2b-256 |
6717ef00004e392bff8aab695056be4d1b9957db4fc0670c1801f95ccdaf75d2
|