RTLSDR Scanner



Manual (EN) (FR)

Frequently Asked Questions

Screenshot 1

Screenshot 2

Screenshot 3

Screenshot 4

Screenshot 5

Screenshot 6

A cross platform Python frequency scanning GUI for USB TV dongles, using the OsmoSDR rtl-sdr library.

In other words a cheap, simple Spectrum Analyser.

The scanner attempts to overcome the tuner's frequency response by averaging scans from both the positive and negative frequency offsets of the baseband data.

Tested on:

  • Windows 7 (x86 and x64)
  • Ubuntu 12.04 (x86), 12.10 (x64), 13.04 (x64) and 14.04 (x64)
  • OS X Snow Leopard (10.6) and Mountain Lion (10.8)


Download the installer or stand-alone Windows executables from GitHub.

Download the latest source from GitHub.


Installation instructions are here.

The following dependencies are needed:

Linux and Mac users will need to manually install these,  Windows users can use the installer.


A basic manual is available in Portable Document Format.

Quick start

Run 'python -m rtlsdr_scanner'.

To start a scan simple enter the range at the bottom of the window and click 'Start', after a while a plot of signal strengths should be displayed.

'Dwell' controls how long each step is sampled for, longer times will result in more averaging of the signal.

'Continuous update' updates the display on each step. Caution only use this with small scans and low dwell times, otherwise it will become unresponsive.

'Grid' displays a grid on the scan plot.

Auto Calibration

Scans around the frequency specified for the strongest signal and then calculates the error correction of the dongle.

To get the best out of it you really need a continuous signal peak that stands out from the background noise.  If you live near an airport RADAR signals are great for this. Mobile phone signals also work well but you need to know the channel frequencies, making it tricky.  I have had some luck with commercial FM radio but you'll have to set the dwell time to the highest setting to get a usable offset.

Main Window

  • Start - Scan start frequency
  • Stop - Scan stop frequency
  • Mode - Sing or continuous scanning
  • Dwell - Sampling time spent on each step
  • FFT Size - FFT size, greater values result in higher analysis precision (with higher sizes dwell should be increased)
  • Live update - Update the display on each step (caution this can be slow and unpredictable)
  • Grid - Show a grid on the scan
  • Display - Change the plot type

File Menu

  • Open... - Open a saved scan
  • Save As... - Save a scan
  • Export... - Export a scan to a CSV file
  • Properties ... - Scan information

Edit Menu

  • Preferences - Set dongle gain, calibration, Local Oscillator (positive offset for upconverters) and sample bands (see below)

Scan Menu

  • Start - Start a scan
  • Stop - Stop the scan
  • Stop at end - Stop the scan when the current sweep is finished (only in continuous mode)

Tools Menu

  • Compare - Compare two previously saved scans
  • Auto Calibration - Perform a crude calibration of the dongle to a known signal (this should be a continuous, unwavering signal)


Dongles will differ depending on the tuner and circuit that's used, the software allows you to pick the best range that is sampled to give improved results.

Click on View -> Preferences and select the 'Band Offset' for you tuner, next detach the aerial or even better terminate it with a 50 ohm load.  Now click refresh to show the noise floor of the tuner, adjust the offset so the marked bands overlay the flattest areas of the plot and click OK.

I find the following offsets work well (click the offsets for images):

Tuner Offset (kHz)
Elonics E4000 250
Fitipower FC0012 140
Rafael Micro R820T 100

Note the large peak in the middle, this is at 0Hz (i.e. its the DC offset).  On the R820T it is much narrower, this is because it uses an intermediate frequency away from the low frequencies.  In this case the resulting spike is due to the sample length not being infinitely long (imagine taking a complete cycle of a sine wave then chopping the end off, this leaves it unbalanced and its average value is no longer 0, in other words it looks like it has a DC offset), the sample is windowed to reduce this but it's a trade-off between accuracy and frequency response.


Run 'rtlsdr_scan_diag.py', this tests if the correct modules are installed.




Click to view comments

Al's picture

Hi, I'm not sure why it won't install but I'll keep looking into it.

To install it open a command prompt with administrator privileges and change to the 'Scripts' directory of your Python installation. From here run:
pip install Pillow

Hope that helps

Sorry. I have a very basic question. I installed the software and am now trying to run it with a Nooelec RB20T USB receiver. I was able to install the drivers for the receiver OK, but I am not sure how to select it in Edit/Radio Devices. Is it supposed to show up there automatically? I am seeing a "usb open error -5" in the command line window.

What am I missing?


Al's picture


If you're using Windows have you run zadig or blocked the default driver on Linux?  Otherwise try plugging it into a different USB port.

You can run 'rtl_test' from the command line to quickly test your device.

Hi there and thanks for the excellent program! Looks like there are a million uses out there based on some of the comments so far. I'm not surprised - this package has a simple interface but excellent functionality. I am using your software for wideband scanning (currently 18-88MHz) to pick up spectral signatures of solar flare activity. So I am mostly interested in running LONG scans and looking for visual artifacts first up, that I can then correlate with other data sources. I'm basically running into memory problems due to the immense amount of data. I'm wondering if you'd be interested in adding some functionality to help out? I think from 2 angles, first to apply some sampling/averaging or sweep delays to reduce the data density and possibly ability to do continuous scans for time periods from the command line. This way I can automate the data collection process and manage the data size. I imagine if I get more data this may kill the graphics too... not sure. Would be great to hear your comments! In the mean time I'll keep scanning - thanks! Tony

Al's picture

Hi, Thanks I'm glad you like it.

Just a word of warning; without an up-convertor, modding your dongle or using an experimental driver you are unlikely to properly tune below about 24MHz at best (with a R802T tuner).

Thanks for the suggestions for reducing data, I hadn't thought about adding a delay between the sweeps, I'll add this soon(ish).

You can reduce the graphics load by setting the 'Display' (bottom right of the main screen) to 'Status' which is significantly lighter, or using it from the command line.

I've been thinking about adding some sort of scheduled scanning for some time now, thanks to conversations with other radio astronomers. Until I implement this I recommend you use your operating systems scheduler (it's different on each one) to run the scanner and use the '--sweeps' switch to specify the number of sweeps. You can then use the scanner in GUI mode to merge these together ('File -> Merge' will merge a file with the currently loaded one).
  Remember to give each scheduled run a different output filename.

Hope that helps.

i have been trying your software and it is amazing. I am totally new in this things. i want to ask can i make simple real-time spectrum analyzer?? I want to see DVB-T frequency spectrum (8 MHz). Thanks Al.

Al's picture

Thanks very much.

Unfortunately 'realtime' scanning costs a lot more!

To look at DVB-T this site may help you find which channels are used near you (mainland Europe only), once you have a channel number look here to find the frequencies it occupies.  For example channel 45 ranges from 662 to 670MHz so I'd scan the range 661 to 671MHz.


Hi - thank you for a very useful looking program. VirusTotal (link above) gave 1 possible malware report
"VBA32 suspected of Trojan.Downloader.gen " .
It is probably a false alarm but have you seen this problem before or on previous versions?

Al's picture

Thanks Andrew,
I'll look into that, my guess is it is 'suspected' as the installer does some downloading. I once did have some trouble with Avast so I submitted the file and they cleared it a couple of days later.

I've performed a full scan on my machine then rechecked with Virus Total and VBA32 still reports it as suspect. Personally I'd agree that this is a false alarm as 56 other AV packages are fine with it.

First: Thanks for the great software!
Is there a way to put across the frequency spectrum markers with known frequencies?

Al's picture

Thanks Markus, good idea - I'll think of a way to implement it and add it soon.


First of all, a big thanks for this. Truly a nice piece of software!

Im not sure if it was intended this way but when i open a saved scan (.rfs) the plot headline does not match the opened file. Im not sure its the intention but i wanted to check if this is a bug or not, as it seems its not updated with the file opened.

Here is a saved scan from 131-136 MHz but the headline states 87-108. Minor detail but nice if there was a fix for it.


Running the latest version (installed today feb 14:th, showing 02/09/15 02:04:58 under "about") on Windows 7 64 bit.

Al's picture

Thanks very much, it's always good to see it's useful for people.

I'd completley missed the headline problem, thanks for pointing it out - I'll try and fix this soon(ish)!

Al's picture


The plot title should now work properly, thanks again for pointing it out.


Bought a GPS and have started to fiddle with signal mapping... Again very impressed with your software showing alot of potential...

But im having issues with the exported mesh when its shown in Google Earth. Its not the correct position and/or size

Overlay before re-scaling

Same .kmz with correct overlay using locations as guides (re-scaled in Google Earth)

Is this a bug perhaps? I have tested on two different computers.
Still running the latest version (showing 02/09/15 02:04:58 under "about") on Windows 7 64 bit.

To add is that when exporting positions to gpx, positions are OK and shows exactly as i drove.

I can supply scans for troubleshooting if needed.

Al's picture

Hi, I'm still looking into this. With any luck I'll have an update soon.

Good evening,

I have used your software almost two years, every day all 24 hours a day. Now I decided to change my RTLSDR Stick for a better variant, the ELAD FDM-S2. I find no way to wirte a DLL. Are you planning creating support for this SDR? Or, could you help me to know what I have to do to implement a way for doing RTLSDR Scanner compatible with the FDM-S2?
Thank you very much.

Best regards,
Maria Jesus Sogorb Amoros

Al's picture

I wish I could but I just don't have access to one and it's out of my price range. Does look like a nice bit of kit though.

Hello Al. Wondering if there is ANY way to use an Airspy with RTLSDR Scanner. I read on rtl-sdr.com that the Airspy uses the same R820t tuner as, say, the Rafael Micro R820T (I've successfully used the Rafael Micro with RTLSDR Scanner). Any info would be greatly appreciated.

Al's picture

Unfortunately not, I'll need to get my hands on one as it uses a different driver although the tuner itself is the same.

Does this work with the Experimental HF mod driver for RTL ?? IT would be nice if I can use this for building BPFs and LPFs for HF transceiver with this.

Al's picture

As yet I haven't had any time to play with the new drivers, but it is on my (very long) list!

Hi and thanks for a really nice program.
I am testing on Raspberry Pi with Adafruit 2.8" display. For convenience I use Kali-Linux 1.1 where it is included
In the Kali-Linux-sdr. My problem is that with the 2.8" display I need to make the Plot with less height, ie around half height.
Another option would be to make the Plot "Full screen".
The half height solution could be a one-line patch(?) but I can't find the "vertical height" value.
/ Regards Tommy

Al's picture

Hi, thanks for the complement.

I haven't really thought about running it on a 320x240 display and I do like the 'fullscreen' idea. I'll look into it and see if it's feasible.

In the meantime you could put a # in front of line 187 in main_window.py, so it reads:
#self.SetMinSize((displaySize[0] / 4, displaySize[1] / 4))

This will allow the window to be resized.

Al's picture

I've just pushed an update which will allow you to toggle full screen mode, it's available under the view menu or by pressing F11.

There's also a fix to allow the plot to size down correctly - I've tested it by setting my monitor down to 640x480 and it seems to work.

Thanks for info and the new version. I found out that the version in Kali 1.1 was from August! You have made a LOT of new things since then. It looks very nice on a big screen but I think to be useful on the PiTft another approach is needed.
Starting up you only really need menu, frequency buttons and start button and when the scan is finished the full screen mode to show result. Maybe another option under "view" for a mini screens.
/ regards Tommy

Al's picture

Good idea Tommy, I've added it to the the list but it may be a while before I get round to it.

Hi al, i want to ask how to make flat spectrum, since you used matplotlib.mlab.psd.... I have been search of it and havent found yet...

thanks for your explain, please help me..

Al's picture

Hi, are you looking for it in the source code? If so it's at line 171 in scan.py.
I'm not sure what you mean by 'flat' spectrum?

I mean if I use psd it has windowing and it doesnt show the flat spectrum, but in your RTL SDR Scanner it show us flt spectrum and can clear the windowing. Thanks AL.

Al's picture

I see, it doesn't use the full spectrum but two segments from either side of centre.

You can see this by selecting Edit -> Radio devices then clicking on the 'Band Offset' cell in the table (defaults to 250). Click refresh to see the spectrum, the green bands indicate the frequency range that is used.
The two bands are then averaged to produce something close to a flat response.

Hope that helps

oke thanks al, if i have more question I will ask you again, many thanks to you all..

Hello, I am using eartoearoak on my PC and this is quite excellent except I cannot display the data in the table under frequency in MHz, where am I wrong ? I use win 7 64 bits and TRL dongle.

I would like to translate the manual in french, do you have it in doc format, this is more easy for me to insert the french text between the picture than playibg with a pdf and asking you to do the job. I already made the translation (free of charge of course) of HDSDR, Airscout and another one (I forget). You can check on these site the results.

Last but not least, does the version for linux Debian works on Raspi 2 with a tft ? I would like to build a spectrum analyser with a 7" screen and your soft for my radio astronomy uses.

Thank you anyway for your software, I will do a donation later, for the moment I ma moving from my house to another one and I am a little bit dry.

Best regards from britany, France

Jean Marie

Al's picture


Thanks for your generous offer to translate the manual, I do seem to have quite a few French users so this will be very useful. The source document is contained inside the PDF, you can use Libre Office Writer to open and edit it.

To use the table select an range of frequencies by using the middle mouse button to drag a selection in the plot view.

I updated the software a while ago to work with smaller screens as someone was try to get it working properly on the RPi2 with an 7" TFT.  You can now press F11 to go full screen, AFAIK it worked for him.

Good luck with the move, hope it goes smoothly.




Hi There,

I'm a wildlife researcher trying to use the gps "heatmap" function of RTLSDR scanner to track some birds wearing vhf transmitters (150-152 mhz). I went with an airspy receiver over a tv dongle to get the higher sound quality and avoid the overheating issue. I can't seem to get RTLSDR scanner to recognize the airspy as a radio device. Is airspy compatible with RTLSDR scanner?

Al's picture

Unfortunately not as I don't have access to an AirSpy so I haven't added it.

On a side note I'm working on a project which will help you tracking those VHF transmitters, might be a month or so off but I'll try and remember to email you when it's ready. It will be posted on this site if I forget...

Thanks for the answer. I'm really excited to see your vhf tracking tool when it's ready!

would it be possible to scan not once, but n passes with n different gain settings and after that putting together the data for a graph with increased signal dynamics between real noise floor and clipping?

Al's picture

An interesting idea, I'll have a play about with that and see if I get anywhere.

Do you have some progress on this topic?

Al's picture

Sorry I just haven't had time so far, but I'll email you if I get anywhere with it.

I've installed the rtlsdr scanner under Linux Mint 17.2 but I do't know how to run it.

T60 rtlsdr # python rtlsdr_scan.py
python: can't open file 'rtlsdr_scan.py': [Errno 2] No such file or directory

T60 rtlsdr # python rtlsdr.py
Traceback (most recent call last):
File "rtlsdr.py", line 20, in
try: from librtlsdr import librtlsdr, p_rtlsdr_dev, rtlsdr_read_async_cb_t
File "/root/build/pyrtlsdr/rtlsdr/librtlsdr.py", line 52, in
f = librtlsdr.rtlsdr_get_device_count
File "/usr/lib/python2.7/ctypes/__init__.py", line 378, in __getattr__
func = self.__getitem__(name)
File "/usr/lib/python2.7/ctypes/__init__.py", line 383, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: python: undefined symbol: rtlsdr_get_device_count

Please help.


I can run
python demo_waterfall.py

but there is no rtlsdr_scan.py on my computer

python rtlsdr_scan.py
python: can't open file 'rtlsdr_scan.py': [Errno 2] No such file or directory

T60 / # find / -name rtlsdr_scan.py
T60 / #

Al's picture


If you can run 'demo_waterfall.py' you're in the pyrtlsdr directory rather than the application directory. The second time you ran it you were in the correct location.

The Traceback you see is due to a problem with the rtlsdr library, try installing it again:

mkdir build
cd build
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr
mkdir build
cd build
cmake ..
sudo make install

Hope that helps.

I realize it would be an entirely different program, but do you think this project will support hackrf in the future?

Al's picture

HackRF and AirSpy support is on the list and should be possible without too much modification, although the 'RTLSDR' part of the name is a bit trickier...

I have installed last version of rtlsdr scanner on my Win7 64 bit, and all seem to be working, but some questions:
1- I tried to install the x64 version, but the only Win installer I found is "rtlsdr_scanner-setup-win32.exe (4,99MB)". Does the installer check the system and automatically installs the appropriate version? Have I the x64 version installed?
2- in the View menu I checked "Show measurements", but no data appear in the table below the plot window. What have I missed?

Great software ! Many thanks.

Al's picture


1) The installer only supports 32 bit, if you want to use a 64 bit version you can download the stand-alone version.  Currently either version doesn't support the preview display though.
The other option is to install it manually, but use for the 64 bit versions of all the dependencies - this is a bit more time consuming unfortunately.
As the installer cannot download the 64 bit libraries there's not going to be a 64 bit installer for the foreseeable future.

2) To get measurements you have to select a range of the spectrum by dragging an area with the middle mouse button.

Thanks very much, glad you like it!

Caracterizing filters need to compare the level of the direct noise generator scan with the level trough the filter under test, and then plot the difference between the two levels. This can be done in the compare window of the tool tab. But this mean I must save each scan and then reload them for comparing, loosing the display settings of the main window. A process improvement could be done by comparing the two levels directly in the main window, scanning and saving for first the noise generator level as a baseline reference, and then scan filtered levels, directly plotting the difference. I think this will improve the tuning process of filter. Is it possible?


Click to add a comment