For a while now, the top hardware for engineering students, experimenters, and hobbyists to get hands-on experience making and breaking software defined radios have been the HackRF and LimeSDR. Now they have company, called the ADALM-PLUTO SDR. Analog Devices calls it an "active learning module" enabling in depth learning of many aspects of radio communications - basic science through advanced hardware and software engineering. Both devices run at low electrical power, but there is no upper limit on ingenuity that they can spawn. Information on the HackRF is abundant on the internet. Below, you will find information on the PlutoSDR and links to more in depth data and applications. Find other PlutoSDR users in forums on PlutoSDR.com, the BATV Forum, and RTL-SDR.com.
The PlutoSDR is, in a way, similar to other high end RTL2832 radios, but there is more to this device.. To call it a super RTL-SDR would sell it short, as it is capable of full duplex transceiving and tuning vastly wider spectrum. It can operate with as much as a full 20 MHz bandwidth, putting out a stream of 12 bit quadrature data. At its heart is the AD9363 or AD9364 System on a Chip. Transmit output power is about 7 dBm.
Tuning is accomplished in a manner familiar to Softrock and RTL-SDR users: a tunable quadrature oscillator mixing RF in a quadrature sampling detector. Output from the QSD is fed to a dual ADC capable of 61.4 megasamples per second. For computers using USB 2.0, expect good performance up to about 3 MSPS and lost samples at higher rates. For better tuning accuracy and stability, the radio really needs a better clock: a TCXO or GPSDO. Perhaps there will eventually be some mods and hacks for this.
Regarding dynamic range and weak signal performance, the PlutoSDR is quite sensitive but prone to RF intermodulation and desensing in strong signal environments. Use a good RF filter for clean, hassle free performance. For details, see this series of 9A4QV Youtube Videos.
There are currently no direct sampling mods for the PlutoSDR. Expect them eventually. It would be nice to have a full DC to 30 MHz capability, though the ability to have a 3, 4, or up to 20 MHz wide IQ stream of HF data would be a welcome added capability. Being a transceiver, a direct sampling mod will require more care than for RTL-SDRs.
PlutoSDR Tweaks and Hacks
First among software mods for the PlutoSDR is the one broadening the operating range from 70 MHz through 6 GHz. Prototypes and early production versions of the SDR used an AD9364 transceiver chip, operating across the full tuning range. Later production runs switched to the AD9363, which was limited by software to the official 325 MHz to 3.8 GHz range. By changing the software, the original limits may be restored, though actual performance may not be as good on radios using the AD9363. Making the change requires making a serial connection to the radio and issuing a set of commands.
The username is root and the password is analog. If the radio contains the AD9363, the commands "fw_printenv attr_name" and "fw_printenv attr_val" both return the error message "not defined" as shown below. Note that the pound sign "#" means "you are the root user":
# fw_printenv attr_name Error: "attr_name" not defined # fw_printenv attr_val Error: "attr_val" not defined
Change the radio's internal configuration to operate as an AD9364 equipped device by setting environmental variables to "compatible" and "ad9364" as shown below:
# fw_setenv attr_name compatible # fw_setenv attr_val “ad9364” # pluto_reboot reset
Check the new configuration by logging in again and sending a query for the environmental variables:
Welcome to Pluto pluto login: root Password: # fw_printenv attr_name attr_name=compatible # fw_printenv attr_val attr_val=ad9364 #
If all is well, send a logout command, disconnect, and enjoy your new fully capable PlutoSDR.
GUI Software for PlutoSDR
User interfaces are small in number due to the PlutoSDR being so new. Expect wider inclusion in the popular SDR interfaces over time. GNU Radio (Linux) and SDR# (Windows) are the main apps to look at for using PlutoSDR devices. Mac users should be able to work out support through Windows or Linux virtualization methods. Below are instructions for Debian / Ubuntu based Linux systems, adaptable to Arch, Slackware, and other Linux flavors.
CubicSDR and other applications using the SoapySDR library can compile support from code on Github. Be sure to install the dependencies libiio, libad9361-iio, and SoapySDR first. Then build the SoapyPlutoSDR plugin:
cd ~ git clone https://github.com/jocover/SoapyPlutoSDR mkdir SoapyPlutoSDR/build cd SoapyPlutoSDR/build cmake .. make sudo make install sudo ldconfig
There is a method of getting Gqrx to work with PlutoSDR hardware for users who have installed Gqrx from the special PPA maintained by Alexandru Csete. John Hagensieker posted a nice tutorial on his blog. The heart of his tutorial is getting dependencies, Gqrx, and gr-iio from PPAs, then compiling gr-osmosdr-gqrx from Csete's git repository. It is simple and works fine.
For using Gqrx to operate a PlutoSDR, follow these steps to get dependencies and build it from source code. Remember that source and prepackaged installations don't coexist well, so do this in a virtual machine or one where Gqrx and its dependencies have been cleanly purged. Begin the process by installing (or reinstalling) tools for handling source code and the prerequisites for building Gqrx:
sudo apt update sudo apt install autoconf git build-essential bison cmake flex qtbase5-dev qt5-default qtscript5-dev libssl-dev qttools5-dev qttools5-dev-tools qtmultimedia5-dev libaio-dev libasound2 libavahi-client-dev libcdk5-dev libqt5svg5-dev libqt5webkit5-dev libsdl2-dev libxml2-dev libxmu-dev libxi-dev freeglut3-dev libasound2-dev libjack-jackd2-dev libserialport-dev libusb-1.0-0-dev libxrandr-dev libqt5xmlpatterns5-dev libqt5xmlpatterns5 libqt5xmlpatterns5-private-dev pulseaudio swig3.0
On some, but not all systems, it may be necessary to get a fresh version of libserialport:
cd~ git clone git://sigrok.org/libserialport pushd libserialport git checkout libserialport-0.1.1 ./autogen.sh ./configure make sudo make install sudo ldconfig
Compile and install libiio:
cd ~ git clone https://github.com/analogdevicesinc/libiio mkdir libiio/build cd libiio/build cmake .. make -j sudo make install sudo ldconfig
Compile and install support for the Analog Devices Systems on Chips:
cd ~ git clone https://github.com/analogdevicesinc/libad9361-iio mkdir libad9361-iio/build cd libad9361-iio/build cmake .. make -j sudo make install sudo ldconfig
cd ~ git clone https://github.com/analogdevicesinc/gr-iio cd gr-iio mv include/gnuradio/iio include/iio rm -r include/gnuradio sed -i 's/gnuradio\/iio/iio/g' CMakeLists.txt sed -i 's/gnuradio\/iio/iio/g' swig/* sed -i 's/gnuradio\/iio/iio/g' include/iio/* sed -i 's/gnuradio\/iio/iio/g' lib/* sed -i 's/gnuradio\/iio/iio/g' python/iio/* sed -i 's/from\ gnuradio\ import\ iio/import\ iio/g' grc/iio_pluto_sink.xml sed -i 's/from\ gnuradio\ import\ iio/import\ iio/g' grc/iio_pluto_source.xml mkdir build cd build cmake .. make -j sudo make install sudo ldconfig
Compile and install GNU Radio OsmoSDR Gqrx support:
cd~ git clone https://github.com/csete/gr-osmosdr-gqrx cd gr-osmosdr-gqrx/ git checkout plutosdr mkdir build cd build/ cmake ../ make sudo make install sudo ldconfig
After the above dependencies are installed, install the experimental branch of Gqrx:
cd~ git clone https://github.com/csete/gqrx cd gqrx.git mkdir build cd build cmake .. make sudo make install
If the "make install" step completes without errors, Gqrx should be ready to run.
There are some interesting uses for the PlutoSDR. One of the more interesting applications is in a coherent, multichannel, software beam forming system. Another is G4GUO's PLUTO-Express digital amateur television project.
If you have installed the software to use the PlutoSDR on a Linux system, then it is just a little bit more work to compile and install Dupmp1090 for following air traffic. For the pretty maps, multiple aggregator feeds, or multilateration, a bit more work is necessary. However, the commands below will result in a working basic dump1090 binary with config files for the PlutoSDR.:
cd~ git clone https://github.com/PlutoSDR/dump1090 cd dump1090 make
This device works fine for more ordinary uses, and does very well indeed on VHF through at least L band without the need for a receive preamplifier. For transmitting, yes, consider amplification to achieve usable power levels. PlutoSDR devices are sensitive enough to receive L band GPS, Wxsats, Iridium, and INMARSAT downlinks from a good antenna. It certainly seems to make a fune ADS-B receiver. With the AD9364 software mod, the PlutoSDR should work fine above 3.8 GHz, though specifications are not guaranteed. Try it and find what works!