Coherent IQ data on Nvidia Jetson Nano for custom processing

Hi Kraken team,

I’m trying to get Kraken SDR working on my NVIDIA Jetson Nano (running JetPack / Ubuntu 18.04). My goal is not to use Kraken’s internal processing, but rather to access the coherent IQ data so I can implement my own custom processing.

I’ve tried manually installing all the dependencies, but that did not work. As soon as I run the heimdal_daq start file, something goes wrong, and the IQ data never gets written to shared memory. I am now trying the installation script for an ARM machine.

Could you advise on:

  • The best way to get Kraken SDR running on a Jetson Nano to access the coherent IQ samples?

  • Any dependencies or setup steps specific to Jetson / ARM?

  • Whether it’s possible to bypass Kraken’s processing pipeline and just stream the IQ samples?

Thanks in advance for any guidance!

jetson@ubuntu:~/krakensdr/heimdall_daq_fw/Firmware$ sudo ./daq_start_sm.sh
Config file check bypassed [ WARNING ]
kernel.sched_rt_runtime_us = -1
Desig FIR filter with the following parameters:
Decimation ratio: 1
Bandwidth: 1.00
Tap size: 1
Window function: hann
FIR filter ready
Transfer funcfion is exported to : logs/Decimator_filter_transfer.html
Coefficients are exported to: data_control/fir_coeffs.txt
Starting DAQ Subsystem
Output data interface: IQ ethernet server
) (
( ) )
) ( (
)
**
.-'---------|
( |/////|
'-./////|
'**_’
‘-------’

Have a coffee watch radar

I am following all the instruction in the GitHub - krakenrf/heimdall_daq_fw: Coherent data acquisition signal processing chain for multichannel SDRs repo but also setting my interface type to eth:

[data_interface]
out_data_iface_type = eth

When I monitor port 5000/5001 I do not see any activity.

When starting hemdal_daq I check the logs and I only get the following:

tail -f _logs/rtl_daq.log
Found Rafael Micro R820T/2 tuner
Found Rafael Micro R820T/2 tuner
Found Rafael Micro R820T/2 tuner
Found Rafael Micro R820T/2 tuner
Found Rafael Micro R820T/2 tuner
Allocating 12 (non-zero-copy) user-space buffers
Allocating 12 (non-zero-copy) user-space buffers
Allocating 12 (non-zero-copy) user-space buffers
Allocating 12 (non-zero-copy) user-space buffers
Allocating 12 (non-zero-copy) user-space buffers

I attempted to run the synthetic start but got these errors:
sudo ./daq_synthetic_start.sh
Config file check [FAIL]
Traceback (most recent call last): File “ini_checker.py”, line 384, in error_list = check_ini(parameters, en_hw_check) File “ini_checker.py”, line 76, in check_ini device_count = count_receivers() File “ini_checker.py”, line 50, in count_receivers lsusb_cmd = subprocess.run([“lsusb”], capture_output=True, text=True) File “/usr/lib/python3.6/subprocess.py”, line 423, in run with Popen(*popenargs, **kwargs) as process: TypeError: init() got an unexpected keyword argument ‘capture_output’
jetson@ubuntu:~/krakensdr_doa/heimdall_daq_fw/Firmware$

I am running out of time to get this sdr working for my project and now need to make some other design considerations. I cannot use as Raspberry Pi (University does not allow) but I did see that you have other devices such as the Orange pi’s etc. Will these work exactly as mentioned? I can either flash the image to an SD card or run the automated script on the Orange Pi’s and from there get access to the coherent IQ samples?

Orange Pi 5 is known to be working, and you can just use the image file.

Unfortunatley I don’t know why the Jetson Nano isn’t working. Some devices just have USB controllers that don’t work correctly, so it could be that.

Have you tried to get it working first with shmem, and the standard DOA software?

daq_synthetic_start.sh is just for debugging, it shouldn’t be used.

I don’t understand why a Raspberry Pi wouldn’t be allowed though?

I have gotten it working and doing what I want on your Virtual Box Image which runs the heimdal_only_start and then i wrote a custom python file to collect this data. GNU radio does not work well and often is not able to pull IQ samples so just freezes or shuts down.

I will port this over to an embedded platform once done so I will explore the options you mentioned. I do know of another alternative platform called the Okdo Rock which many students use as an alternative to the Raspberry Pi (Universities see these as hobbiest tools and not “genuine” engineering tools so they are not permitted for use in Final Year projects etc. along with Arduinos etc.) Should I be cautious of trying a board that you have not recommended even though the specs are almost identical to the Rspberry Pi?

The main issue I think I am having with the Jetson Nano is my Ubuntu version (18.04). I have been told I should build from source but I understand that there could be some issues with USB etc. I was under the impresion the that heimdal only script would work on any arm64 boards running linux that have the sufficient hardware specs. Even when running the automated script ther

I have completed your auto installation script on my jetson nano but it does not appear to be similair to you VM image I used which worked. The gr_heimdall_daq folder is not present on the jetson so how do i start it to use with GNU radio?

I followed this instruction:
sudo apt-get install gnuradio-dev cmake libspdlog-dev clang-format

git clone GitHub - krakenrf/gr-krakensdr

cd gr-krakensdr
mkdir build
cd build
cmake ..
make
sudo make install

but get this error when trying to run the heimdall_only_start:
jetson@ubuntu:~/gr-krakensdr$ ./heimdall_only_start.sh
./heimdall_only_start.sh: line 7: ./heimdall_only_stop.sh: Permission denied
./heimdall_only_start.sh: line 10: cd: heimdall_daq_fw/Firmware: No such file or directory
env: ‘./daq_start_sm.sh’: No such file or directory
jetson@ubuntu:~/gr-krakensdr$

You need to copy heimdall_only_start.sh and heimdall_only_stop.sh into the krakensdr root directory. (where krakensdr_doa and heimdall are installed).

You can’t use it in the gr-krakensdr folder.

Using it on other untested single board computers is always a risk, just because some simply don’t implement their USB controllers very well. And with KrakenSDR being a high bandwidth device dependant on a good USB controller, badly implemented ones can cause issues. For example we found that the Odroid N2 has USB issues.

Assuming I get an Orange Pi 5B what are the steps I would need to follow in order to get the coherent iq data in GNU radio like was done on the VM where I can run those example scripts like the plot fft etc.?

I would boot my Orange Pi 5B and then:

  • Run the installation script on Git
  • Run the instructions listed on GitHub - krakenrf/gr-krakensdr (copy the heimdall_only_start and stop files into the root folder)
  • Then run heimdall_only_start and gnu radio in different terminals?

Pls correct any of this if it is wrong.

This is also the procedure i have followed for the Jetson but I cannot get GNU radio working correctly. It seems that running the heimdal_only_start has worked (shows the ASCII word art and looks identical to VM output) but getting GNU working is an issue as I get loads of problems like the GNU radio version did not allow me to use the example workflows because they were not .XML so i updated gnu radio, then when i try to run the workflows it says that cannot import krakensdr from gnuradio

Yes those steps are correct. But a SBC might be too slow to run both heimdall and GNU Radio, since GNU Radio is quite a resource hog. Generally for GNU Radio I would recommend running everything on a Linux PC which has enough grunt to run GNU Radio properly.

The GNU Radio problems sound like version conflicts, or an incorrect install. Best to follow the official GNU Radio guides on installing, and then install the kraken source after a good clean install.