SATSAGEN is a Windows application that allows you to use an SDR device as a Spectrum Analyzer. SATSAGEN supports the ADALM-PLUTO device only, at the moment.

SATSAGEN is provided free of charge to the HAM Radio community, with the hope that SATSAGEN can be appreciated as a useful tool for our radio experimentation.


Download SATSAGEN from this link:

SATSAGEN Download Page

The prerequisites of the application are:

  • OS: From Windows 7 to Windows 10
  • Drivers for ADALM-PLUTO installed: PlutoSDR-M2k-USB-Drivers
  • ADALM-PLUTO device with firmware > = 0.31

WARNING: At the first start, the application will perform on the device the frequency and bandwidth extension needed for the use of the 70MHZ-6000MHZ range, forcing the firmware to “see” the AD9363 transceiver as an AD9364. The extension is required for the application to work, but if you don’t want it to happen, don’t start SATSAGEN.

I would like to thank my friends Gianni IW1EPY, Domenico I1BOC and Mauro IZ1OTT for giving me the idea, the support in every sense, the radio components and the equipment necessary for the realization of the project!

A special thanks goes to Boian Mitov for the GREATS libraries used in SATSAGEN!

Below you will found another valuable contribution by Gianni and at the end of the post you will find a short video that illustrates the application basics.

Alberto IU1KVL

As Adalm Pluto owner I become acquainted to this device using radio programs (SDR Console, SDRAngel) to link Oscar 100.
But for this kind of hardware my asking was for a measurement system. I have test cheap network analyzer in the range of 4,4 GHz, vector analyzer up to 900 MHz and my idea was to set Pluto in this class of instruments using the extended range 70 MHz to 6 GHz.
After some encouraging trials from the RF point of view but disappointing for the measurement time delay in Matlab, I drag my friend Alberto into this adventure to have an acceptable measurement time using C libraries.
Apart the nice Alberto’s program I add some Hardware notes.
Adalm Pluto it is born for sure not for a professional measurement instruments so some drawbacks can be expected.
Due to the large bandwidth usage forced by the program (original Pluto frequency usage spans from 325 MHz to 3,8 GHz) the input and output impedance for sure are not 50 ohms.
A pair of attenuators on input and output mitigate the problem, for sure reducing the usable dynamic range but acceptable for HamRadio users. Using two 10 dB attenuators remain 40 dB down to the calibration level and 20 up in case of insertion of an active device under test.
The missing metal box generate some crosstalk problems in the upper range of frequency specially if Pluto is moved around metal frames or touched by fingers… some people have reboxed it.
The present structure (Pluto plus optional attenuators) allows a direct measurement of transfer function of filters, amplifiers, a directional coupler or a reflection bridge is mandatory for impedance measurement.
Is possible to attach a file to correct the deviation of output power over the frequency sweep, unluckily every Pluto have its own variance. By now I have analyzed 5 devices and the correction curve are available.
With the linearization file the output power can maintain an error of 1 dB versus 10 : 12 dB of the unleveled , most of this nonlinearity is located in the range from 50 to 300 MHz end 4.5 to 6 GHz obviously where Pluto was not designed for.
The receiver gain and the generator attenuator do not increase the linearization error, so one linearization file is enough. Pay attention to not overload the receiver or saturate the generator but this behavior become immediately evident.
To enhance the dynamic linearization is possible to apply a -40 dB calibration using a correct attenuator.
This linearization performs in the range thill -40 db but almost kill the response from -40 to -60, in any case due to cross talk end receiver erroring this range is severely degraded even without this correction.
All the level of the RX Gain and the Output Power and the attenuators that you have inserted at the I/O are programmable.
Any idea of improvement ?
This is the list of future enhancement:
Calibration using a directional coupler or bridge averaging open and short.
Offset between transmitter and receiver in order to test conversion systems.
Harmonic response of devices in order to test amplifiers or multipliers.
Open to suggestions.
I think that Adalm Pluto with SATSAGEN, covering 7 Ham bands, will be useful in designing and testing to every ones involved in RF field.

62 thoughts on “SATSAGEN”

  1. Thank you so much for your work, it is the most great softwear for make it a Spectrum I have used.
    Really great work!

  2. Now testing with my GPS-DO modified Pluto. Do you have a linearization file you could send me? And instruction on using the file, hi.

    Thanks for what looks like fine software.

    regards, Roy VE7BPB

    1. Hello Roy,
      thank you for your comment.
      Now you can download the ready linearization files from the Download page (see the bottom of the download page). We created these linearization files from four different ADALM-PLUTO, mainly for TX path.
      You have to put the linearization files on an accessible directory and setup the paths on Settings->Level correction Tab (click Load buttons to refresh)
      Find the most efficient linearization file for your ADALM-PLUTO.
      To create a new linearization file of the TX, it is necessary to derive the curve through a Scalar Network Analyzer. Found the highest point of the curve, this is the zero, where the values ​​will refer to.
      For Example, simplified output from SNA:
      71MHz 3,2dBm
      779MHz 10dBm
      6GHz 1dBm
      translates into:
      71MHz -6,8dBm
      779MHz 0dBm
      6GHz -9dBm
      the linearization file will be:
      SATSAGEN solves the intermediate points by interpolation, but obviously, more detailed files are better!

      Best Regards

      1. Thank you Alberto for the files and very good explanation. I have a DC-10GHz digital wattmeter I can use to compile data for my own file.

        regards, Roy

  3. Very good project.I used it to test a 2.4g cavity filter.There was little difference between the results and those measured by kc901.

  4. Tested the SA functionality only so far, but it looks great !
    420 MHz Span centered on 600 MHz and nearly realtime 🙂

    Thanks a lot !

  5. Alberto, I have some thoughts and suggestions, but rather than getting into a long thread on here perhaps you could start a forum for all the discussion you will no doubt get from all your happy users, hi.

    regards, Roy

  6. A very good piece of Software. Just what I have been looking for.
    I tested my BGA6589 Amplifier on it and I now see a very flat frequency response (I did not know how flat).
    Thank you for your hard work.
    Ideal for any Es’Hail2 DATV/NB/filter work, as well as anything else RF related.

    1. Hello Hiroshi!
      Thank you all so much! I’m very honored!
      I will shortly release an interesting new version of SATSAGEN!
      Stay tuned!
      73 Alberto

  7. SATSAGEN is running on old laptop with Windows 7, runs fine on Windows 10 (borrowed wife pc to check when she was not looking), not able to run under wine on raspberry pi with raspberian YET as compiled for 32 bit windows not ARM uPC. Not tried Wine on Ubuntu PC either.

    I KNOW no source available yet, might be good it it were (or a Linux app image perhaps?).

    Having fun with some end cap pipe filters for 2.4GHz and QO-100.


    1. Hi Dom,
      thank you so much for your interesting info. Yes, I thinking about developing a version for Linux, anyway I tested SATSAGEN on Wine on Ubuntu 19.10 last week and works very well! The only thing to do before power on SATSAGEN on Wine is to set the Fix iio_channel… attribute on page Settings->Extra.

  8. Great work. Very useful tool. You have an account I can deposit some money. I like to support the amateur guys that provide great tools free of charge. It won’t be much but hopefully others will follow and you can add some more features buy some more equipment or just enjoy a beer.

  9. Hi All,

    using Satsagen on MacOSX with wine installed true Macports overall its working very nicely.
    It has very repeatable results. Mainly tested in the 23 and 13 cm bands, to measure filters and antenne’s with a directonal coupler. Did not managed to make jpegs with the makervalue.

    The Fix iio_channel… attribute is also needed for OSX.


    More than one marker
    Trace save button on the main controle surface
    Save Settings
    Recall Settings
    Recall saved trace as background to check for improvement.

    The ADLM internal processing is @ 18Ghz in theory it should be capable to
    recieve even higher frequency as the mixer is driven with a square wave.

    With the right filters and TX multiplier even 10Ghz might be in reach.

    Thanks for creating and sharing this wunderfull appliction.

    1. Hello Rens!
      Excellent news!!!
      Thank you so much for sharing the tests and giving me some useful tips!
      We are working with Gianni IW1EPY to develop version (software and hardware) on harmonic mode with good results.
      Gianni will write the news about harmonic mode on shortly.
      Best Regards,

  10. Hi Alberto,
    this is really an incredible software. Installed and worked all at once. I like it !!

    Thank You so much !!

    Vy 73
    Werner DK1KW

    1. Hi Werner!
      Thank you so much for your compliments and support!!!
      I’m very happy to known it working well!
      Stay tuned for new release that published soon!
      Thank you again
      Best Regards,

  11. Hi Alberto,

    This is a very nice program. I like it.
    Is it possible to add a video filter or some kind of averaging.
    The Y-axis should be fixed for 2, 5 or 10 dB / div. by default.

    Best 73 de HB9DFQ

    1. Hi Paul!
      Thank you for your comment and tips, I will try to add that features in the next releases.

  12. Alberto,
    Any way to add FM deviation to this tool. It could then replace my service monitor in a smaller more convenient package. Cheaper too.
    I love the features so far!

    1. Hello Jim,
      thank you for your interest, I’ll try to implement the delta marker in next releases.
      Stay tuned!
      regards, Alberto

  13. Ciao Alberto !
    nice work and a beautiful interface.
    Is it possible to sum up spectral power density using Satsagen in order to estimate the overall power of the received signal ? if not it would be a nice feature

    1. There are conflicting opinions about it, I am not sure that it can be done in a cheap way, for example without a external reference VCO in order to phase RX and TX.

  14. Hello;
    I work with a pluto ADALM, I want to calibrate pluto because i want to have measurements in dbm, I obtain complex data I / Q. I make a scrypt python, which calculates the power of the values ​​that I receive in dbm (10*log((I^2+Q^2)*10) (dBm)). I send different power from a signal generator but I have a fixed values in my pluto. could you help me to do the calibration; and send how i can do that.

      1. Hello, thanks your for your answer;
        Hello, I’m trying to use a pluto as a spectrum analyser using python and I would like to know if there is a way to get the signal power in dbm.
        Could you help me please ? I’ve got two requests:
        1)I’d like to convert the IQ complex values in P[dBm] values
        2)Could you please send me a Python script to display the spectrum analyzer in P[dBm] values ?
        How to do without ADC calibration ?
        Because for me, it is very hard to understand and to implement this function.
        I am new with the card PLUTO-ADALM, I want to use it as a spectrum analyzer, I sending signals on rx and read the power and see the signal in dbm.
        With the generator, i create signals a different power levels (voltages) then determine what ADC code is produced complexe data I/Q . but i don’t know how translate the ADC codes into voltage and therefore dBm. i put you my srypt python, i get a fixed value for a different power levels.
        could help me please.
        import adi
        import time
        import math
        import matplotlib.pyplot as plt
        import numpy as np
        from scipy import signal

        # Create a device interface
        sdr = adi.Pluto()
        sdr.rx_rf_bandwidth = 1000
        sdr.rx_lo = 758000000

        fs = int(sdr.sample_rate)
        N = 1024
        sdr.rx_enabled_channels = [0]
        gain_control_mode_chan0 = “manuel”
        rx_hardwaregain_chan1 = 0

        # Get complex data back
        x = sdr.rx()
        b = np.arange (1023.5)
        for i in range(0,1024):
        data = x[i]
        I = data.real
        Q = data.imag
        v = 10* (I**2 + Q**2) # voltage
        p = 10 * np.log10(v) # power RMS on dbm
        b[i] = p
        print(“p”, p) # but i get a same value for different power level
        b = b[np.isinf(b)== False]
        pmoy = np.mean(v)
        f, Pxx_den = signal.periodogram(b,fs, scaling= ‘spectrum’)
        plt.xlabel(“frequency [Hz]”)
        plt.ylabel(“P [dBm]”)

          1. Hello Feriel,
            I’m trying to set up a working python environment to test your script, I’m sorry.

    1. Hi Feriel,
      The gain_control_mode_chan0 and rx_hardwaregain_chan0 in my environment don’t works, anyway if I set the gain with another application and start your script, I get I Q values accordly the sample rate of device. I have notice that sample_rate is not initialized in your script, then you should verify that value.
      Cheers, Alberto

  15. great piece of software, Alberto, congrats. Performance is overwhelming, installation a breeze, perfectly done.

    Now running on WinX; will try Wine under Ubuntu 18.04 LTS sson

    Mni tnx
    Guenter DL7LA

  16. Dear Alberto,
    thank you very much for this nice SW.
    I would propose one small addition: I really would appreciate if in the generator you could set the modulation frequency and bandwith freely. Do you think you could add this?


  17. Hi,

    it seems SATSAGEN only supports direct USB-connection. Would it be possible to add also network connectivity? I have my Pluto running with an USB-Ethernet-Adapter in local lan so it would not be easy to connect it via USB…

    73 de Kim

    1. Hi Kim,
      from version of SATSAGEN, you can set an IP address that overrides the direct connection settings. From settings->Devices tab, specify in the Connection string (URI) override field your Pluto IP address like this: ip:x.x.x.x where x.x.x.x is your IP address, eg. ip: (the ip word must be lowercase).
      73 Alberto

  18. Hello Alberto,
    Can we imagine using the Pluto and Satsagen in remote site mode .The Pluto on site A and the visualization on site B

Leave a Reply

Your email address will not be published. Required fields are marked *