This version (05 Aug 2019 23:06) was approved by Robin Getz.The Previously approved version (13 Jul 2019 02:23) is available.Diff

Self Reception on the ADALM-PLUTO

Everyone has sung to a song on the radio, and it sounds great, as long as the radio is loud enough to drown out your terrible voice (or is that just me?). This is a phenomenon known as self reception - when the signal you want to receive is being overloaded by something else.

The ADALM-PLUTO can do this too if you are not careful. The device will have Tx LO Leakage, and the receiver will pick that up and may swamp out the signal you desire to actually receive.

Tx On, and sending a signal

It's easy to see this with offset tuning. Here is the ADALM-PLUTO with the Rx set to 2400 MHZ, and the Tx set to 2402 MHz, with the internal DDS, set to 3 MHz, and -30dB down (which would put things at 2405 MHz), with the default antennas connected, and the LTE20 Filters loaded.

This shows the peak at the signal (at 2405 MHz, where we expect it), and a LO leakage at 2402 MHz. It's difficult to see what this really means in terms of signal power, so we can look at the actual gain is set to by the Automatic Gain Control (AGC), and the Receive Signal Strength Indicator (RSSI).

We can see the RSSI is 66.25 dB, and the Hardware Gain is set to 43 dB.

Tx On, and not sending a signal

If we simply disable the DSS, this is what we see:

Now our RSSI has gone to 90.5 dB and the hardware gain is set to 68 dB (which is still not at the max gain of the device), we are listening to our own LO leakage, not the actual RF signal.

Tx Off

If we power down the Tx LO with (0 is on, 1 is powerdown):

# iio_attr -c ad9361-phy TX_LO powerdown 1
dev 'ad9361-phy', channel 'altvoltage1' (output), id 'TX_LO', attr 'powerdown', value '0'
wrote 2 bytes to powerdown
dev 'ad9361-phy', channel 'altvoltage1' (output), id 'TX_LO', attr 'powerdown', value '1'

This is the equivalent C source of:

    /* Create IIO Context */
    ctx = iio_create_context_from_uri("usb:1.3.5");

    /* Find IIO device in current context */
    dev = iio_context_find_device(ctx, "ad9361-phy");

    /* Find the IIO output channel in the current device */
    ch = iio_device_find_channel(dev, "TX_LO", true);

     /* Write a one into the IIO channel attribute */
    ret = iio_channel_attr_write_longlong(dev, "powerdown", 1);

Then we get:

Tx On, but offset more than your channel

If we shift things around a bit - if we configure things for an LTE10 signal, (LTE10 filter, with an LTE10 signal going out the DAC at full scale), and set the Tx and Rx to the same (2400 MHz), we can see this:

By offsetting things in 10 MHz steps, how far do things need to be away, so that it stops affecting the receiver:

offset 0 MHz 10 MHz 20 MHz 30 MHz 40 MHz 50 MHz 60 MHz
RSSI 48.50 dB 86.75 dB 105.00 dB 112.75 dB 116.75 dB 117.00 dB 117.5 dB
ACG Gain 25 dB 32 dB 59 dB 62 dB 67 dB 69 dB 71 dB

This doesn't mean that you can't transmit/receive on adjacent channels, it just means that the receiver noise floor will not be higher and therefore the receiver will not appear as sensitive when you are doing this.


If you aren't using the transmitter - turn it off, your receiver noise floor will decrease, increasing your receive sensitivity, allowing you to pick up smaller signals from the air.

Test Case RSSI AGC Setting
Tx On, with Signal 66.25 dB 43 dB
Tx On, without signal 90.50 dB 68 dB
Tx Off 113.75 dB 71 dB
university/tools/pluto/hacking/listening_to_yourself.txt · Last modified: 05 Aug 2019 23:06 by Robin Getz