This thread introduces one of Navigine’s most technically sophisticated projects—our Direction-of-Arrival (DoA) estimation demo. Using raw IQ samples from the Minew AoA Locator, this algorithm accurately calculates azimuth and elevation angles, then translates them into beacon positioning on the XY plane.
Built on principles from our AoA article, this solution uses adjacent elements in a linear antenna array to calculate signal orientation with sub-6° accuracy across diverse sample points.
Getting Started
To run the demo:
cd src/ cat ../data/static.json | python3 aoa_demo.py
Output includes:
x_beacon: 9.232542, y_beacon: 5.490652 azimuth_angle: 43.0°, elevation_angle: -17.0° ...
You’ll receive multiple beacon positions with their corresponding orientation angles—ideal for evaluating locator performance in RTLS scenarios.
Sample Data & Visuals
- Beacon Positioning Example: location.jpg
- Locator Configuration: locator_settings.jpg
- Azimuth Phase Variation Demo: dynamic_azimuth_phases
- Live Movement Experiment Video: dynamic_test.MOV
The results closely match those in our AoA accuracy study, demonstrating angular deviations no greater than ±6° under controlled conditions.
Observed Challenges
In dynamic tests—such as slight lateral movement of a stationary beacon—we observed unexpected angular drift. The azimuth angle varied despite the beacon returning to its original location, suggesting a sensitivity that deserves deeper investigation.
Relevant input data for this scenario is stored in dynamic.json
.
Let’s Collaborate!
Have insights, suggestions, or improvement ideas for our DoA estimation approach? Feel free to:
Star the repo
Fork it
Share issues or contribute improvements
Start a thread right here in SDK & Open Source
We’d love to hear how you’re using AoA tech—or how we can refine it for your deployment scenarios.
Learn more about Navigine: https://navigine.com/