Doatools.py
A simple library for theoretical research on direction-of-arrival (DOA) estimation in array signal processing.
Install / Use
/learn @morriswmz/Doatools.pyREADME
doatools.py
doatools.py is the Python version of my doa-tools in MATLAB. It provides basic tools for theoretical research on direction-of-arrival (DOA) estimation, including basic array designs, various DOA estimators, plus tools to compute performance bounds. The MATLAB version served as a small toolbox for my research related to array signal processing. I made this Python version because I will no longer have access to MATLAB.
I made some notebooks that produce figures similar to those in my papers (may not be exactly the same due to the randomness of Monte Carlo simulations). You can browse them here. These examples are not as complete as those in the MATLAB version.
You can also view the full documentation here.
Features
- Several array design and difference coarray related functions.
- Commonly used DOA estimators including MVDR beamformer, MUSIC, root-MUSIC, ESPRIT.
- Maximum-likelihood estimators including AML, CML, and WSF.
- Sparsity-based DOA estimator.
- Functions to compute the Cramér-Rao bounds.
- Functions to compute the asymptotic covariance matrix of the estimation errors of MUSIC estimators (including difference coarray based).
- Functions to visualize the estimation results.
Note: doatools.py is designed to facilitate my theoretical research on array signal processing. It is not designed for real-world applications. Nevertheless, the implementations of various DOA estimators in this repository provide good references on understanding these estimation algorithms.
Differences from the MATLAB version
The Python version retains most of the functionalities of the MATLAB version, while adding some new ones. For instance, the Python version supports 2D (azimuth and elevation) DOA estimation and includes more ML-based estimators.
The Python version is also more modular, providing more flexibility over the MATLAB version. Many spectrum-based estimators (e.g., MUSIC) are now reusable, and work for both 1D and 2D sources.
The Python version is better documented.
Requirements
doatools.py requires NumPy, SciPy and Matplotlib. It also requires CVXPY to solve sparse recovery problems. To run the examples, you also need to install tqdm.
Examples
You can view the examples here.
License
The source code is released under the MIT license.
Citation
If you find my code helpful. You are welcomed to cite my papers here.
Related Skills
YC-Killer
2.7kA library of enterprise-grade AI agents designed to democratize artificial intelligence and provide free, open-source alternatives to overvalued Y Combinator startups. If you are excited about democratizing AI access & AI agents, please star ⭐️ this repository and use the link in the readme to join our open source AI research team.
best-practices-researcher
The most comprehensive Claude Code skills registry | Web Search: https://skills-registry-web.vercel.app
research_rules
Research & Verification Rules Quote Verification Protocol Primary Task "Make sure that the quote is relevant to the chapter and so you we want to make sure that we want to have it identifie
groundhog
398Groundhog's primary purpose is to teach people how Cursor and all these other coding agents work under the hood. If you understand how these coding assistants work from first principles, then you can drive these tools harder (or perhaps make your own!).
