Awesome spectrum analyzer from DVB-T tuner

Few weeks ago I stumbled upon some topic on one of FPV forums about checking frequency, spectrum, antennas etc. I realized that people are using cheap DVB-T tuner based on Realtek RTL2832U chip as spectrum analyzer, SDR (software defined radio) and even as osciloscope.
There were many situations in my hobby when this brilliant device could help a lot. This discovery was so hot, so I decided to buy such usb dongle ASAP, even at slightly bigger price (55zł ~ $16) than directly from China. I found it in one shop in my town and next day I became happy owner of this tuner 🙂

This is Lifeview LV5T Deluxe (branded as NOT ONLY TV):

It’s equipped with a little different tuner than described on rtlsdr/osmocomSDR site, Fitipower FC0013 capable of working within 22-1100MHz frequency range:


To be clear: I use Linux 🙂
First step was to download and install rtl-sdr library from . In this package there are also ready made udev rules to install, so root access is not required later for using it.
On this web page one can find also links to some related projects using this library.
Next step was to get pyrtlsdr library for Python as most of these project are written in that language. After installation of few more dependencies as wxPython, numpy, matplotlib etc I started testing software 🙂


My first application was RTLSDR-Scanner. Kind of old school, well known spectrum analyzer:

Easy to operate, with zoom but capable to scan only within range of whole MHz, so scan in narrower range than 1MHz is not possible (you could zoom, but it doesn’t enhance frequency resolution).
So, it was quite good, but I needed more 🙂


Waterfall applications is a real power of computerized spectrum analyzer!
This very easy Python script is more than useful.

For example, scan of commercial FM radio frequencies – all in one:

And situation when waterfall shows it’s power – 433MHz ISM band scan with some devices transmitting only during small window of time (on the left it’s probably wireless sensor for weather station):

And back to R/C 🙂 My 40MHz transmitter:

You could select and measure frequency range, make pan and zoom (but on lower frequencies application crash during zooming), change sesnsitivity of tuner to remove clipping and additional strips caused by this.


Yes, you are reading right: Audacity – well known audio editing program. I made a little patch (not perfect) to allow change sample rate up to 10MHz because default maximum was 100kHz and typical rtl-sdr sample rate is about 2MHz, so selection tool and fft features are not working correctly.
Using rtl_sdr utility from rtl-sdr library, I dumped raw samples near desired frequency and then I imported it as raw 8 bit stereo samples into Audacity. Below are results:-)

My 35MHz transmitter on 71 channel. I have little problems with range on this channel and this picture shows why:

On this image you can see:

  • this is 5 channels radio (6 peaks of synchronization pulses)
  • main frequency is shifted by about 5kHz from sampling base i.e. channel frequency – and it’s cause of poor reception
  • deviation is about 3kHz (to about 8kHz from center of channel)

Using quartz for 63 channel it works much better from my experience and below is proof of this:

Shift from base frequency is less than 3kHz, so it’s better than on 71 channel.

For comparision, my simple 4 channel 40MHz transmitter:

Very tempting looks SDR# (available also on Windows) but require a lot more weird dependencies, so I put it for later.
But I’m sure that this topic will return some day with more new cool informations 🙂

Update 2013.06.22: second part is here.

This entry was posted in Electronics, Linux, R/C and tagged , , . Bookmark the permalink.

11 Responses to Awesome spectrum analyzer from DVB-T tuner

  1. Curt says:

    I am so struggling with this…
    How can I contact you directly ?
    I can’t even understand what the errors are trying to tell me…

    Latitude ~$/tmp/rtlsdr_scanner
    /tmp/rtlsdr_scanner?17368/matplotlib/ UserWarning: Could not find matplotlibrc; using defaults
    /tmp/rtlsdr_scanner?17368/matplotlib/ UserWarning: could not find rc file; returning defaults
    Traceback (most recent call last):
    File “”, line 37, in
    File “/opt/pyinstaller/PyInstaller/loader/”, line 386, in importHook
    File “/opt/pyinstaller/PyInstaller/loader/”, line 480, in doimport
    File “/mnt/hgfs/Documents/Programs/Python/rtl-sdr-scanner/build/pyi.linux2/rtlsdr_scan/out00-PYZ.pyz/matplotlib.backends.backend_wxagg”, line 20, in
    File “/opt/pyinstaller/PyInstaller/loader/”, line 386, in importHook
    File “/opt/pyinstaller/PyInstaller/loader/”, line 480, in doimport
    File “/mnt/hgfs/Documents/Programs/Python/rtl-sdr-scanner/build/pyi.linux2/rtlsdr_scan/out00-PYZ.pyz/matplotlib.figure”, line 18, in
    File “/opt/pyinstaller/PyInstaller/loader/”, line 386, in importHook
    File “/opt/pyinstaller/PyInstaller/loader/”, line 480, in doimport
    File “/mnt/hgfs/Documents/Programs/Python/rtl-sdr-scanner/build/pyi.linux2/rtlsdr_scan/out00-PYZ.pyz/matplotlib.axes”, line 14, in
    File “/opt/pyinstaller/PyInstaller/loader/”, line 386, in importHook
    File “/opt/pyinstaller/PyInstaller/loader/”, line 480, in doimport
    File “/mnt/hgfs/Documents/Programs/Python/rtl-sdr-scanner/build/pyi.linux2/rtlsdr_scan/out00-PYZ.pyz/matplotlib.axis”, line 10, in
    File “/opt/pyinstaller/PyInstaller/loader/”, line 386, in importHook
    File “/opt/pyinstaller/PyInstaller/loader/”, line 480, in doimport
    File “/mnt/hgfs/Documents/Programs/Python/rtl-sdr-scanner/build/pyi.linux2/rtlsdr_scan/out00-PYZ.pyz/matplotlib.font_manager”, line 1325, in
    File “/mnt/hgfs/Documents/Programs/Python/rtl-sdr-scanner/build/pyi.linux2/rtlsdr_scan/out00-PYZ.pyz/matplotlib.font_manager”, line 1275, in _rebuild
    File “/mnt/hgfs/Documents/Programs/Python/rtl-sdr-scanner/build/pyi.linux2/rtlsdr_scan/out00-PYZ.pyz/matplotlib.font_manager”, line 962, in __init__
    File “/mnt/hgfs/Documents/Programs/Python/rtl-sdr-scanner/build/pyi.linux2/rtlsdr_scan/out00-PYZ.pyz/posixpath”, line 68, in join
    AttributeError: ‘NoneType’ object has no attribute ‘endswith’
    Latitude ~$

    • majek says:

      Hello Curt,

      do you have matplotlib and other libaries installed as I noted in my post (section Software)?

  2. madobebo says:

    ps i want software support usb dvd-t it9135 as spectrum analyzer

  3. Dominik says:

    Witam, czy posiada pan wciąż ten tuner? Jeśli tak to czy mógłby pan przesłać mi oznaczenia prawdopodobnie tranzystora który zaznaczyłem na zdjęciu:

  4. poro renagi says:

    Please send a quote for this unit
    and also the site to order.

    • majek says:

      You could buy it on for about $10 (including shipping). If you need 0.9-1.7GHz band, but without lower frequencies (tens of MHz), search for R820T. Otherwise search for RTL2832U with FC0013 tuner.

  5. kucrut says:

    I want to buil my own spectrum analyzer, but i dont know where i must start. Can you help me, since you build your simple spectrum analyer on your own. Thanks for your help.


  6. Radek says:

    Witam, zainstalowałem RTLSDR-Scanner, ale nie mogę nic z nią zrobić. Mam tunerek NotOnly LV5HD. Czy idzie jakoś sparować tą aplikacje z tym tunerem?
    Będę wdzięczny za jakąś wskazówkę.
    Artykół super:-)


    • majek says:

      A pod jakim systemem próbujesz to uruchomić? Pod Linuxem trzeba najpierw zainstalować bibliotekę rtl-sdr i regułki do udev-a. Pod Windowsem nie mam pojęcia.

Leave a Reply

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