Finding elevation and azimuth with KrakenSDR

Hello all,

I’m an engineering student at the University of Canterbury and I’m building an array to track high altitude sounding rockets using Kraken. Right now my intention is not exactly to get the location of the rocket but too calculate the azimuth and elevation angles so that a receiving antenna can be orientated to track the rocket.

Idea 1: Two Kraken Units
My initial plan was to use two Krakens UCAs, one horizontal and one vertical, however, that would require using two units which massively increases the price requiring two krakens, two sets of antennas and two Pi4s.

Idea 2: 2D MUSIC
I then found 2D MUSIC which seamed to solve my problem but I have been unable to find a python implementation that I could setup as a GNU radio block. I had a go at implementing something myself but unfortunately my matrix methods are just not up to scratch. I understand the basic principle of dividing the signal into the noise and signal subspaces and then finding the orthogonality between them using a steering matrix. (I think that’s right, but I could be wrong, this is all well over my head), but again making it work is something else completely. If anyone has any experience with this I would much appreciate it!

Idea 3: Two 3 element UCAs form one Kraken and two 1D MSUIC algorithms
This is a mixture of the two above ideas, have two 3 element UCAs, one vertical (elevation) and one horizontal (azimuth). Because each UCA is only 3 elements I can use a single Kraken since one of the elements can in theory be shared between the arrays (I think?). Then use two 1D MUSIC algorithms that krakenRF has already expertly implemented in GNU Radio. To test this I set up a simple 3 element array and modified the supplied DOA example to only use 3 of the 5 channels. After doing this and running the flowchart I did not get a DOA, instead just a flat line. If anyone has any experience using the Kraken and MUSIC GNU Radio block with less then 5 channels I would love some advice.


Tracking elevation and azimuth is possible on a single KrakenSDR with a 2D grid array of patch antennas, but you will get significantly less resolution on both axes, because each axes will only have two to three elements instead of five. And of course the array is linear, so at best you get 180 degrees of coverage.

You should be able to use the existing algorithm to implement that, just change the geometry of the input scanning vectors. Also have a look at the code at GitHub - petotamas/pyArgus: Antenna array signal processing library implemented in python which is what the Kraken MUSIC code is based on.

When using the GNU Radio block with less channels you also need to edit the heimdall daq_chain_config.ini file in ~/krakensdr_doa/heimdall_daq_fw/Firmware/

Elevation calculations with a UCA array is probably not a good idea. If you go for two units which is my recommendation, it’s better to use a linear array. I assume the rocket is always going to be downrange from your position anyway, it’s not like the rocket could end up behind you. So a linear array of patch antenna would work best.