Getting started with the Pluto SDR

Update (5 April 2019): the myraidrf repositories are now out of date. If you're running Ubuntu 18.04, your best bet is to install gnuradio from the default repositories and use the instructions on the Analog Devices Wiki to build the gr-iio blocks from source.

I've been interested in Software Defined Radio (SDR) for a while, and after tinkering with an RTL-SDR for a while decided to get something with a larger tuning range and transmit capability. Although I was originally planning to buy a HackRF One because of the well-established community around it, I ended up going with the Analog Devices ADALM-PLUTO as I was able to get it for significantly cheaper (approximately NZ$100 including shipping - the HackRF is easily NZ$500+).

My plan is to work through Michael Ossman's SDR with HackRF, which uses GNU Radio. The Analog Devices Wiki recommends using PyBOMBS, but that doesn't seem to be working on Ubuntu 18.04 and their alternative, building from source, is something I try to avoid if possible because I almost always make a mistake somewhere. If anyone else is in a similar situation, the myriadrf ppa has all of the packages you need. Since I was also looking to use Gqrx, the commands below include that as well.

Add the repositories to the package manager:

$ sudo add-apt-repository ppa:myriadrf/drivers
$ sudo add-apt-repository ppa:myriadrf/gnuradio
$ sudo add-apt-repository ppa:gqrx/gqrx-sdr     # Leave out if you don't want Gqrx.
$ sudo apt update

Then you just need to install GNU Radio, the gr-iio drivers and gqrx.

$ sudo apt install gnuradio gr-iio gqrx-sdr

Faster sampling over USB

I found a page on the Wiki that compares throughput between the USB and network backends (since the Pluto uses RNDIS to provide a virtual ethernet link). Playing around with a simple GNU Radio FM receiver seemed to give similar results as those on the Wiki, as I was able to push the sample rate to 5.25 MHz over USB without buffer underruns, compared with around 4 MHz over the network interface. I'm sure there's a standard Linux tool to find it, but I used iio_info from the iio_utils package. That gave me a URI in the form of [usb:x.x.x], which replaced pluto.local in the Device URI field of the PlutoSDR block.

Update (21 August 2018) to add performance improvement.