I am using RTLSDR on macOS with Cubic SDR, it works great and is very intuitive.

Now I want to do a frequency envelope analysis where I need to basically 3-d plot intensity versus frequency and time. I can probably figure out the math to do that part (or get help). But I need data.

The data I need is 1-second samples across the entire frequency range. What tools are available for loop over the frequency range and save the samples for each band?

  • $\begingroup$ What do you mean "entire frequency range"? The range of the rtl-sdr bandwidth setting (240kHz to 2.4MHz)? Or the frequency range of the tuner (25 MHz to 1.6 GHz)? $\endgroup$
    – hotpaw2
    Oct 11 '19 at 19:02
  • $\begingroup$ That sounds very much like what SETI@home did when I first started running it -- they had special hardware to sample a very broad frequency range. $\endgroup$
    – Zeiss Ikon
    Oct 11 '19 at 19:17
  • $\begingroup$ The entire tuner range. $\endgroup$ Oct 15 '19 at 19:15

It depends on what you mean by "the entire frequency range".

If you mean the bandwidth supported by the rtlsdr (2.4 MHz), then all you need is the raw output (IQ samples). Performing a windowed FFT on the data, moving the window forward in time, and converting the samples to squared magnitude (power), will get you "intensity versus frequency and time". This is what every SDR application's "waterfall plot" does.

If you want to cover the entire tunable frequency range, you cannot do this all at once — the hardware is not capable of that. Instead, you must tune, take some data, and repeat, stepping across the range. Conveniently, there is already a tool which will do this for you in the rtl_sdr driver package — it is called rtl_power. It will output a CSV file with the data already arranged in columns by frequency and rows by time.


The rtl_sdr command-line tool can capture a file of IQ samples of a specified (on the command line) duration, file name, center frequency, gain, and sampling bandwidth, from a connected RTL-SDR device. You could write a script to step between your frequency limits by a delta frequency step slightly less than the bandwidth or sample rate, sequentially execute the rtl_sdr command with that set of parameters, and thus capture a set of IQ files covering your full desired frequency range. Rinse and repeat to cover a larger time range as well.

Another method might be to use a bunch of RTL-SDR peripherals (maybe connected to a farm of Raspberry Pi's) and collect IQ samples from a range of frequency bands at the same time.

  • $\begingroup$ Thank you! So basically: rtl_sdr -f FREQ -s 2048000 -n 2048000 FREQ.bin $\endgroup$ Oct 15 '19 at 19:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.