Cell tower with a shining light.

How to Construct a Beamformer with the ADALM-PLUTO

In my last blog post, we walked through the basic equations for how to electrically steer a simple antenna arrayAnd we came to understand what kind of phase or time shifting our beamformer hardware would need to perform, in order to accomplish this.  In this post, we’ll gather the hardware to construct one, and get it all set up—except for the software.  That has to be its own post – next time!

ADALM-PLUTO:  The Heart of our Simple Phased Array System

The last few years have been a remarkable time in the radio industry.  You can now do amazing things with a low-cost setup.  Like building a beamforming radio!  This would have been much harder, and much larger, 10 years ago.  And what do we need so that we can build that beamformer?  From our discussion last week, we know we’ll need a signal to detect (that was the incoming wavefront).  Then we’ll need something to receive a signal from at least two antennas.  And then some means of applying a phase shift to those received signals and plotting it all out.   

And for all of that, we can use the very popular, and fairly inexpensive, ADALM-PLUTO: 


 ADALM Pluto

Pluto is an open-source design using the AD9363 zero IF transceiver chipset from Analog Devices.   “Zero IF” means that it mixes directly from RF to baseband in one stage.   By default, Pluto can digitize and transmit RF signals from 325MHz to 3.8 GHz.  However, this can be increased, via a software command, to cover 70 MHz to 6 GHz.  Pluto has one Rx and one Tx channel. But a new board revision to Pluto, called “Rev C”, exposes a second channel of transmit and receive.  You simply open up the case and snap in a u.FL to SMA cable.  And then you tell Pluto that it isn’t the AD9363 chip anymore – it’s the AD9361 chip.    

 AD9361 chip diagram

So that’s a bit of a lie….  But this trick will allow us to communicate with the second receive and transmit ports.  It won’t have the performance of the AD9361 – and none of the specs, or even the functionality, of the second ports, will be guaranteed.  But for our simple experiments, it’ll be ok.   

There are a couple of commands we need to issue to Pluto to make this conversion.  And you can find a complete walk-through of this procedure, and the attached u.FL cables here: 

Gather the Materials for Phased Array Fun! 

Now, with two receive channels, we can make a beamformerAnd it’ll look like this: 

A Beamformer

So what items do we need to shop for?   

  • Antennas:  I found that the omnidirectional stubby antenna included with Pluto works well for the transmitter.  But for the receiver, you’ll benefit from using a more directional antenna.  There are many of this type on Amazon or eBay.  Just search for “Log-Periodic” or “Yagi”, and make sure it covers the frequency range you want to use.  The PCB versions of these antennas are only $10 or $20.   
  • SMA Cables:  We’ll need 3 of them.  The cables for RX1 and RX2 can be short.  But the cable for the TX1 antenna should be longer – like 3-6 ft.  That will give us some flexibility in changing the angle of the incoming signal’s wavefront.   
  • Filters:  We need a low pass filter (LPF) on Pluto’s transmit port (TX1).  Ideally, you would put them on RX1 and RX2 as well.  These filters are around $30 and are available from Digikey, miniCircuits, Mouser, etc.  

Why Do We Need the Low Pass Filters?  

Let me say a bit more about why we need the LPFs on the Tx and Rx ports of Pluto.  Pluto uses a square wave for its LO frequency.  This is the frequency that feeds its direct conversion mixer.  Square waves are great for jitter, and that means things like signal quality (i.e. EVM) are improved.  But square waves are really bad for harmonics.  It means when you program Pluto to output 2.2 GHz, it will also output 2 times that 3 times that, and 4 times that, etc.  Even beyond 10 GHz, these signals are pretty strong.  On the receiving side, the ADCs will also be tuned to all those frequencies.  So it means both Tx and Rx need filters.   

Here's a plot I took of Pluto’s transmit port, set to 2.2 GHz, with no filter attached: 

 Frequency diagram

The only "spike" we want is the 2.2 GHz one.  All the rest are harmonics, and they are not desirable.  But if we use a cheap low-pass filter, then we'll see this:

  Frequency diagram

A much cleaner signal!  And that is going to give us better plots of the antenna gain.


That’s all the hardware you need.  If you want to do a really deep dive into Pluto, check out the resources here.  And if you need any help with Pluto, there is a very lively support forum here:


So now we’ve got a beamformer constructed.  And we know, roughly, how it should work.  In the next blog post, we’ll talk about how to control and plot the data from Pluto.  As always, please post any questions/comments/insights below.