# Moved to [doa_py](https://github.com/zhiim/doa_py)
# Classical DOA
Classical DOA Estimation algorithms implemented in Python.
## Getting Started
### Installation
```bash
pip install classical_doa
```
or install from source
```bash
git clone https://github.com/zhiim/classical_doa.git
cd classical_doa
pip install .
```
### Usage
A sample example of DOA estimation using MUSIC algorithm.
```python
import numpy as np
from classical_doa import arrays, signals
from classical_doa.algorithm import music
from classical_doa.plot import plot_spatial_spectrum
# Create a 8-element ULA with 0.5m spacing
ula = arrays.UniformLinearArray(m=8, dd=0.5)
# Create a complex stochastic signal
source = signals.ComplexStochasticSignal(fc=3e8)
# Simulate the received data
received_data = ula.received_signal(
signal=source, snr=0, nsamples=1000, angle_incidence=np.array([0, 30]), unit="deg"
)
# Calculate the MUSIC spectrum
angle_grids = np.arange(-90, 90, 1)
spectrum = music(
received_data=received_data,
num_signal=2,
array=ula,
signal_fre=3e8,
angle_grids=angle_grids,
unit="deg",
)
# Plot the spatial spectrum
plot_spatial_spectrum(
spectrum=spectrum,
ground_truth=np.array([0, 30]),
angle_grids=angle_grids,
num_signal=2,
)
```
You will a get a figure like this:

Check `examples` for more examples.
## What's implemented
### Array Structures
- Uniform Linear Array (ULA)
- Uniform Rectangular Array (URA, to be implemented)
- Uniform Circular Array (UCA)
### Signal Models
- Narrowband
ComplexStochasticSignal
- Broadband
ChirpSignal
MultiCarrierSignal
### Algorithms
- ULA
- [x] MUSIC
- [x] ESPRIT
- [x] Root-MUSIC
- [x] OMP
- [x] l1-SVD
- URA
- [ ] URA-MUSIC
- [ ] URA-ESPRIT
- UCA
- [x] UCA-RB-MUSIC
- [x] UCA-ESPRIT
- Broadband
- [x] ISSM
- [x] CSSM
- [x] TOPS
## License
This project is licensed under the [MIT](LICENSE) License - see the LICENSE file for details.
Raw data
{
"_id": null,
"home_page": "https://github.com/zhiim/classical_doa",
"name": "classical-doa",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": null,
"author": "Qian Xu",
"author_email": "xuq3196@outlook.com",
"download_url": "https://files.pythonhosted.org/packages/8c/d5/8e9d2fa683622a24a651e78fbe76a16fedc23ca4de89aab4c937b8401b6d/classical_doa-1.3.2.tar.gz",
"platform": null,
"description": "# Moved to [doa_py](https://github.com/zhiim/doa_py)\r\n\r\n# Classical DOA\r\n\r\nClassical DOA Estimation algorithms implemented in Python.\r\n\r\n## Getting Started\r\n\r\n### Installation\r\n\r\n```bash\r\npip install classical_doa\r\n```\r\n\r\nor install from source\r\n\r\n```bash\r\ngit clone https://github.com/zhiim/classical_doa.git\r\ncd classical_doa\r\npip install .\r\n```\r\n\r\n### Usage\r\n\r\nA sample example of DOA estimation using MUSIC algorithm.\r\n\r\n```python\r\nimport numpy as np\r\n\r\nfrom classical_doa import arrays, signals\r\nfrom classical_doa.algorithm import music\r\nfrom classical_doa.plot import plot_spatial_spectrum\r\n\r\n# Create a 8-element ULA with 0.5m spacing\r\nula = arrays.UniformLinearArray(m=8, dd=0.5)\r\n# Create a complex stochastic signal\r\nsource = signals.ComplexStochasticSignal(fc=3e8)\r\n\r\n# Simulate the received data\r\nreceived_data = ula.received_signal(\r\n signal=source, snr=0, nsamples=1000, angle_incidence=np.array([0, 30]), unit=\"deg\"\r\n)\r\n\r\n# Calculate the MUSIC spectrum\r\nangle_grids = np.arange(-90, 90, 1)\r\nspectrum = music(\r\n received_data=received_data,\r\n num_signal=2,\r\n array=ula,\r\n signal_fre=3e8,\r\n angle_grids=angle_grids,\r\n unit=\"deg\",\r\n)\r\n\r\n# Plot the spatial spectrum\r\nplot_spatial_spectrum(\r\n spectrum=spectrum,\r\n ground_truth=np.array([0, 30]),\r\n angle_grids=angle_grids,\r\n num_signal=2,\r\n)\r\n```\r\n\r\nYou will a get a figure like this:\r\n\r\n\r\nCheck `examples` for more examples.\r\n\r\n## What's implemented\r\n\r\n### Array Structures\r\n\r\n- Uniform Linear Array (ULA)\r\n- Uniform Rectangular Array (URA, to be implemented)\r\n- Uniform Circular Array (UCA)\r\n\r\n### Signal Models\r\n\r\n- Narrowband \r\n ComplexStochasticSignal\r\n- Broadband \r\n ChirpSignal\r\n MultiCarrierSignal\r\n\r\n### Algorithms\r\n\r\n- ULA\r\n - [x] MUSIC\r\n - [x] ESPRIT\r\n - [x] Root-MUSIC\r\n - [x] OMP\r\n - [x] l1-SVD\r\n- URA\r\n - [ ] URA-MUSIC\r\n - [ ] URA-ESPRIT\r\n- UCA\r\n - [x] UCA-RB-MUSIC\r\n - [x] UCA-ESPRIT\r\n- Broadband\r\n - [x] ISSM\r\n - [x] CSSM\r\n - [x] TOPS\r\n\r\n## License\r\n\r\nThis project is licensed under the [MIT](LICENSE) License - see the LICENSE file for details.\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Classical DOA estimation algorithms implemented in Python",
"version": "1.3.2",
"project_urls": {
"Homepage": "https://github.com/zhiim/classical_doa"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "8cd58e9d2fa683622a24a651e78fbe76a16fedc23ca4de89aab4c937b8401b6d",
"md5": "65835cc846e77271c929f4e53b2d88d5",
"sha256": "0fcde4d3f16d65cd1507bc4cb3729e8cf34e3458365aa216d39dbe1d9f5b6487"
},
"downloads": -1,
"filename": "classical_doa-1.3.2.tar.gz",
"has_sig": false,
"md5_digest": "65835cc846e77271c929f4e53b2d88d5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 14867,
"upload_time": "2024-10-05T11:12:04",
"upload_time_iso_8601": "2024-10-05T11:12:04.645600Z",
"url": "https://files.pythonhosted.org/packages/8c/d5/8e9d2fa683622a24a651e78fbe76a16fedc23ca4de89aab4c937b8401b6d/classical_doa-1.3.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-05 11:12:04",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "zhiim",
"github_project": "classical_doa",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "classical-doa"
}