Rtl_power but for Airspy (mini, R2 ?)

Hi, for years I am running a Python script to create waterfall screens for the radiosonde band (400 - 406 Mhz) and sometimes also for L band satellites or the P-band ( 430 - 440 MHz).

Problem is, running rtl-power with a frequency range ( like 400M:406M ) sets the “number of hops” to 5 and the rtl dongle switches to 2.8 or 2.5 MSPS giving ghost images in my waterfall. Tried several alternatives to find one where I can set the rtl to a fixed (2.048 ) sample rate but no luck. Last try was to set the end frequency of the range to a multiple of 2.048 to make it understand the sample rate could be just 2.048 msps but also no luck, looks a bit random which samplerate is choosen. An example of the output is shown.

Close to my receiver station they have arranged an Tetra transmitter at 408 MHz which gives a lot of harmonics showing in the waterfall. On the same antenna I have an rsp running with 7 MHz and those signals are not in the rx window between 400 and 406 MHz.

So my idea would be to replace the rtl-sdr which is now running the rtl-power for the waterfall script with an airspy mini (or even r2) to catch the complete range in one scan with the fixes samplerate for that device (either 6 or 10 MSPS)

I can not find an alternative for rtl_power to run with the airspy.

Anyone here who can shine a lite ?

A little peek in the command ran:
rtl_power -d 0 -f 430M:440M:4k -g 25.4 -p -4 -i 30 -c 50% |
python2.7 skymonitor.py 430000000 2441.41 4096 8

rtl_power shows a bin size, a number of bins and number of hops which are passed to the python script .

Thanks,
Ben

Have a look at rx_tools and then rx_power.

rx_fm , rx_power , and rx_sdr tools for receiving data from SDRs, based on rtl_fm , rtl_power , and rtl_sdr from librtlsdr, but using the SoapySDR vendor-neutral SDR support library instead, intended to support a wider range of devices than RTL-SDR.

rx_power (based on rtl_power), a simple FFT logger for RTL2832 based DVB-T receivers

Use:	rx_power -f freq_range [-options] [filename]
	-f lower:upper:bin_size [Hz]
	 (bin size is a maximum, smaller more convenient bins
	  will be used.  valid range 1Hz - 2.8MHz)
	[-i integration_interval (default: 10 seconds)]
	 (buggy if a full sweep takes longer than the interval)
	[-1 enables single-shot mode (default: off)]
	[-e exit_timer (default: off/0)]
	[-C channel number (ex: 0)]
	[-a antenna (ex: 'Tuner 1 50 ohm')]
	[-d device key/value query (ex: 0, 1, driver=rtlsdr, driver=hackrf)]
	[-g tuner gain(s) (ex: 20, 40, LNA=40,VGA=20,AMP=0)]
	[-p ppm_error (default: 0)]
	[-S tuner_sleep_usec (default: 5000)]
	[-R tuner_retry_max (default: 3)]
	filename (a '-' dumps samples to stdout)
	 (omitting the filename also uses stdout)

Experimental options:
	[-w window (default: rectangle)]
	 (hamming, blackman, blackman-harris, hann-poisson, bartlett, youssef)
	[-c crop_percent (default: 0%, recommended: 20%-50%)]
	 (discards data at the edges, 100% discards everything)
	 (has no effect for bins larger than 1MHz)
	[-F fir_size (default: disabled)]
	 (enables low-leakage downsample filter,
	  fir_size can be 0 or 9.  0 has bad roll off,
	  try with '-c 50%')
	[-P enables peak hold (default: off)]
	[-D direct_sampling_mode, 0 (default/off), 1 (I), 2 (Q), 3 (no-mod)]
	[-O enable offset tuning (default: off)]

CSV FFT output columns:
	date, time, Hz low, Hz high, Hz step, samples, dbm, dbm, ...

Examples:
	rx_power -f 88M:108M:125k fm_stations.csv
	 (creates 160 bins across the FM band,
	  individual stations should be visible)
	rx_power -f 100M:1G:1M -i 5m -1 survey.csv
	 (a five minute low res scan of nearly everything)
	rx_power -f ... -i 15m -1 log.csv
	 (integrate for 15 minutes and exit afterwards)
	rx_power -f ... -e 1h | gzip > log.csv.gz
	 (collect data for one hour and compress it on the fly)

Convert CSV to a waterfall graphic with:
	 https://raw.githubusercontent.com/keenerd/rtl-sdr-misc/master/heatmap/heatmap.py
1 Like

I have build from source and tried to following with a Airspy R2
The SoapAirspy drivers also needs to present on the system.

SoapySDRUtil --probe="driver=airspy"

######################################################
##     Soapy SDR -- the SDR abstraction library     ##
######################################################

Probe device driver=airspy

----------------------------------------------------
-- Device identification
----------------------------------------------------
  driver=Airspy
  hardware=Airspy
  serial=744c60c8214bb14f

rx_power -d driver=airspy -f 400M:404M:25k

Number of frequency hops: 2
Dongle bandwidth: 2000000Hz
Downsampling by: 1x
Cropping by: 0.00%
Total FFT bins: 256
Logged FFT bins: 256
FFT bin size: 15625.00Hz
Buffer size: 16384 bytes (4.10ms)
Reporting every 10 seconds
Using device Airspy: serial=744c60c8214bb14f 
Found 1 channel(s) :
Channel 0 :
  Found 1 antenna(s): RX 
  Found 3 gain(s): LNA MIX VGA 
  Found 1 frequencies: RF 
  Found 2 sample rates: 10000000 2500000 
  Found 0 bandwidths: 
[INFO] Using format CS16.
2025-06-16, 15:40:47, 400000000, 402000000, 15625.00, 48384, -15.31, -14.13, -14.38, -13.74, -13.62, -13.41, -13.25, -13.20, -13.20, -13.19, -13.25, -13.37, -13.42, -13.53, -13.60, -13.71, -13.74, -13.83, -13.92, -13.98, -14.00, -14.09, -14.13, -14.18, -14.14, -14.17, -13.64, -14.12, -14.20, -14.30, -14.29, -14.34, -14.24, -14.22, -14.26, -14.34, -14.23, -14.19, -14.23, -14.30, -14.37, -14.31, -14.29, -14.37, -14.37, -14.32, -14.24, -14.33, -14.42, -14.35, -14.36, -14.41, -14.52, -14.50, -14.43, -14.40, -14.58, -14.54, -14.46, -14.52, -14.62, -14.62, -14.58, -14.60, -14.58, -14.58, -14.66, -14.54, -14.58, -14.51, -14.58, -14.48, -14.44, -14.56, -14.54, -14.46, -14.34, -14.29, -14.39, -14.26, -14.12, -13.95, -14.15, -14.25, -13.99, -13.90, -14.01, -14.15, -13.92, -13.61, -13.86, -14.17, -14.07, -13.24, -13.75, -14.14, -14.05, -14.05, -14.06, -14.15, -14.19, -14.13, -14.08, -14.17, -13.99, -13.77, -14.09, -14.15, -14.17, -14.10, -13.96, -13.68, -13.67, -13.81, -13.50, -13.38, -12.94, -13.40, -13.36, -12.78, -12.04, -12.24, -12.31, -10.77, -10.47, -12.26, -13.31, -12.56, -12.56
2025-06-16, 15:40:47, 402000000, 404000000, 15625.00, 48384, -15.33, -13.99, -14.26, -13.69, -13.66, -13.45, -13.32, -13.20, -13.24, -13.26, -13.34, -13.35, -13.45, -13.53, -13.60, -13.66, -13.67, -13.82, -13.84, -13.88, -13.96, -14.00, -13.99, -14.01, -14.01, -14.03, -13.46, -14.01, -14.07, -14.06, -14.09, -14.10, -13.98, -14.05, -14.07, -14.09, -14.01, -13.94, -14.05, -14.15, -14.05, -13.99, -14.02, -14.12, -14.06, -14.05, -13.99, -14.05, -14.12, -14.09, -14.05, -14.16, -14.20, -14.19, -14.10, -14.13, -14.26, -14.23, -14.14, -14.18, -14.28, -14.28, -14.30, -14.29, -14.25, -14.25, -14.28, -14.21, -14.23, -14.19, -14.21, -14.18, -14.06, -14.17, -14.21, -14.13, -13.96, -13.96, -14.12, -13.97, -13.82, -13.61, -13.80, -13.88, -13.64, -13.57, -13.68, -13.86, -13.58, -13.33, -13.50, -13.77, -13.67, -12.93, -13.47, -13.81, -13.67, -13.71, -13.71, -13.83, -13.85, -13.77, -13.69, -13.89, -13.65, -13.43, -13.77, -13.84, -13.82, -13.80, -13.59, -13.27, -13.32, -13.39, -13.12, -13.00, -12.62, -13.01, -13.00, -12.44, -11.71, -11.91, -12.00, -10.42, -10.17, -12.06, -12.99, -12.40, -12.40