wiki:rtl-sdr

rtl-sdr

DVB-T dongles based on the Realtek RTL2832U can be used as a cheap SDR, since the chip allows transferring the raw I/Q samples to the host, which is officially used for DAB/DAB+/FM demodulation. The possibility of this has been discovered by Eric Fry (History and Discovery of RTLSDR). Antti Palosaari has not been involved in development of rtl-sdr.

Specifications

The RTL2832U outputs 8-bit I/Q-samples, and the highest theoretically possible sample-rate is 3.2 MS/s, however, the highest sample-rate without lost samples that has been tested so far is 2.56 MS/s. The frequency range is highly dependent of the used tuner, dongles that use the Elonics E4000 offer the widest possible range (see table below).

TunerFrequency range
Elonics E400052 - 2200 MHz with a gap from 1100 MHz to 1250 MHz (varies)
Rafael Micro R820T24 - 1766 MHz
Rafael Micro R828D24 - 1766 MHz
Fitipower FC001322 - 1100 MHz (FC0013B/C, FC0013G has a separate L-band input, which is unconnected on most sticks)
Fitipower FC001222 - 948.6 MHz
FCI FC2580146 - 308 MHz and 438 - 924 MHz (gap in between)

Supported Hardware

Note: Many devices with EEPROM have 0x2838 as PID and RTL2838 as product name, but in fact all of them have an RTL2832U inside.
Realtek never released a chip marked as RTL2838 so far.

The following devices are known to work fine with RTLSDR software:

VIDPIDtunerdevice name
0x0bda0x2832all of themGeneric RTL2832U (e.g. hama nano)
0x0bda0x2838E4000ezcap USB 2.0 DVB-T/DAB/FM dongle
0x0ccd0x00a9FC0012Terratec Cinergy T Stick Black (rev 1)
0x0ccd0x00b3FC0013Terratec NOXON DAB/DAB+ USB dongle (rev 1)
0x0ccd0x00d3E4000Terratec Cinergy T Stick RC (Rev.3)
0x0ccd0x00e0E4000Terratec NOXON DAB/DAB+ USB dongle (rev 2)
0x185b0x0620E4000Compro Videomate U620F
0x185b0x0650E4000Compro Videomate U650F
0x1f4d0xb803FC0012GTek T803
0x1f4d0xc803FC0012Lifeview LV5TDeluxe
0x1b800xd3a4FC0013Twintech UT-40
0x1d190x1101FC2580Dexatek DK DVB-T Dongle (Logilink VG0002A)
0x1d190x1102?Dexatek DK DVB-T Dongle (MSI DigiVox? mini II V3.0)
0x1d190x1103FC2580Dexatek Technology Ltd. DK 5217 DVB-T Dongle
0x04580x707f?Genius TVGo DVB-T03 USB dongle (Ver. B)
0x1b800xd393FC0012GIGABYTE GT-U7300
0x1b800xd394?DIKOM USB-DVBT HD
0x1b800xd395FC0012Peak 102569AGPK
0x1b800xd39dFC0012SVEON STV20 DVB-T USB & FM

If you don't know where to buy one or if you are just looking for a trustworthy source, try http://shop.sysmocom.de/products/tv28-r820t-bulk

People over at reddit are collecting a list (v2) of other devices that are compatible.

If you find a device that is not yet in the device list but should be supported, please send the VID/PID and additional info (used tuner, device name) to our mailing list.

This is the PCB of the ezcap-stick:

top view of the ezcap PCB
More pictures can be found here.

Software

Much software is available for the RTL2832. Most of the user-level packages rely on the librtlsdr library which comes as part of the rtl-sdr codebase. This codebase contains both the library itself and also a number of command line tools such as rtl_test, rtl_sdr, rtl_tcp, and rtl_fm. These command line tools use the library to test for the existence of RTL2832 devices and to perform basic data transfer functions to and from the device.

Because most of the RTL2832 devices are connected using USB, the librtlsdr library depends on the libusb library to communicate with the device.

At the user level, there are several options for interacting with the hardware. The rtl-sdr codebase contains a basic FM receiver program that operates from the command line. The rtl_fm program is a command line tool that can initialize the RTL2832, tune to a given frequency, and output the received audio to a file or pipe the output to command line audio players such as the alsa aplay or the sox play commands. There is also the rtl_sdr program that will output the raw I-Q data to a file for more basic analysis.

For example, the following command will do reception of commercial wide-band FM signals:

rtl_fm -f 96.3e6 -M wbfm -s 200000 -r 48000 - | aplay -r 48k -f S16_LE

On a Mac, a similar command that works is as follows. This assumes that the sox package is installed, 'port install sox':

rtl_fm -f 90100000 -M wbfm -s 200000 -r 48000 - | play -r 48000 -t s16 -L -c 1  -

If you want to do more advanced experiments, the GNU Radio collection of tools can be used to build custom radio devices. GNU Radio can be used both from a GUI perspective in which you can drag-and-drop radio components to build a radio and also programmatically where software programs written in C or Python are created that directly reference the internal GNU Radio functions.

The use of GNU Radio is attractive because of the large number of pre-built functions that can easily be connected together. However, be aware that this is a large body of software with dependencies on many libraries. Thankfully there is a simple script that will perform the installation but still, the time required can be on the order of hours. When starting out, it might be good to try the command line programs that come with the rtl-sdr package first and then install the GNU Radio system later.

The rtl-sdr code can be checked out with:

git clone git://git.osmocom.org/rtl-sdr.git

It can also be browsed via cgit, and there's an official mirror on github that also provides packaged releases.

If you are going to "fork it on github" and enhance it, please contribute back and submit your patches to: osmocom-sdr at lists.osmocom.org

A GNU Radio source block for OsmoSDR and rtlsdr is available. Please install a recent gnuradio (>= v3.6.4) in order to be able to use it.

Mailing List

We discuss both OsmoSDR as well as rtl-sdr on the following mailing list: osmocom-sdr@….

You can subscribe and/or unsubscribe via the following link: http://lists.osmocom.org/mailman/listinfo/osmocom-sdr

Building the software

rtlsdr library & capture tool

You have to install development packages for libusb1.0 and can either use cmake or autotools to build the software.

Please note: prior pulling a new version from git and compiling it, please do a "make uninstall" first to properly remove the previous version.

Building with cmake:

cd rtl-sdr/
mkdir build
cd build
cmake ../
make
sudo make install
sudo ldconfig

In order to be able to use the dongle as a non-root user, you may install the appropriate udev rules file by calling cmake with -DINSTALL_UDEV_RULES=ON argument in the above build steps.

cmake ../ -DINSTALL_UDEV_RULES=ON

Building with autotools:

cd rtl-sdr/
autoreconf -i
./configure
make
sudo make install
sudo ldconfig

The built executables (rtl_sdr, rtl_tcp and rtl_test) can be found in rtl-sdr/src/.

In order to be able to use the dongle as a non-root user, you may install the appropriate udev rules file by calling

sudo make install-udev-rules

pre-built Windows version

Gnuradio Source

The Gnu Radio source requires a recent gnuradio (>= v3.7 if building master branch or 3.6.5 when building gr3.6 branch) to be installed.

The source supports direct device operation as well as a tcp client mode when using the rtl_tcp utility as a spectrum server.

Please note: prior pulling a new version from git and compiling it, please do a "make uninstall" first to properly remove the previous version.

Please note: you always should build & install the latest version of the dependencies (librtlsdr in this case) before trying to build the gr source. The build system of gr-osmosdr will recognize them and enable specific source/sink components thereafter.

Building with cmake (as described in the gr-osmosdr wiki page):

git clone git://git.osmocom.org/gr-osmosdr
cd gr-osmosdr/

If you are building for gnuradio 3.6 series, you have to switch to the gr3.6 branch as follows

git checkout gr3.6

then continue with

mkdir build
cd build/
cmake ../

Now cmake should print out a summary of enabled/disabled components. You may disable certain components by following guidelines shown by cmake. Make sure the device of your interest is listed here. Check your dependencies and retry otherwise.

-- ######################################################
-- # gr-osmosdr enabled components                         
-- ######################################################
--   * Python support
--   * Osmocom IQ Imbalance Correction
--   * sysmocom OsmoSDR
--   * FunCube Dongle
--   * IQ File Source
--   * Osmocom RTLSDR
--   * RTLSDR TCP Client
--   * Ettus USRP Devices
--   * Osmocom MiriSDR
--   * HackRF Jawbreaker
-- 
-- ######################################################
-- # gr-osmosdr disabled components                        
-- ######################################################
-- 
-- Building for version: 4c101ea4 / 0.0.1git
-- Using install prefix: /usr/local

Now build & install

make
sudo make install
sudo ldconfig

NOTE: The osmocom source block (osmocom/RTL-SDR Source) will appear under 'Sources' category in GRC menu.

For initial tests we recommend the multimode receiver gnuradio companion flowgraph (see "Known Apps" table below).

You may find more detailed installation instructions in this recent tutorial.

Automated installation

Marcus D. Leech has kindly integrated the forementioned build steps into his gnuradio installation script at http://www.sbrac.org/files/build-gnuradio. This is the most user-friendly option so far.

Usage

rtl_sdr

Example: To tune to 392.0 MHz, and set the sample-rate to 1.8 MS/s, use:

./rtl_sdr /tmp/capture.bin -s 1.8e6 -f 392e6

to record samples to a file or to forward the data to a fifo.

If the device can't be opened, make sure you have the appropriate rights to access the device (install udev-rules from the repository, or run it as root).

rtl_tcp

Example:

rtl_tcp -a 10.0.0.2 [-p listen port (default: 1234)]
Found 1 device(s).
Found Elonics E4000 tuner
Using Generic RTL2832U (e.g. hama nano)
Tuned to 100000000 Hz.
listening...
Use the device argument 'rtl_tcp=10.0.0.2:1234' in OsmoSDR (gr-osmosdr) source
to receive samples in GRC and control rtl_tcp parameters (frequency, gain, ...).

use the rtl_tcp=... device argument in gr-osmosdr source to receive the samples in GRC and control the rtl settings remotely.

This application has been successfully crosscompiled for ARM and MIPS devices and is providing IQ data in a networked ADS-B setup at a rate of 2.4MSps. The gr-osmosdr source is being used together with an optimized gr-air-modes version (see Known Apps below). It is also available as a package in OpenWRT.

A use case is described here.

rtl_test

To check the possible tuning range (may heavily vary by some MHz depending on device and temperature), call

rtl_test -t

To check the maximum samplerate possible on your machine, type (change the rate down until no sample loss occurs):

rtl_test -s 3.2e6

A samplerate of 2.4e6 is known to work even over tcp connections (see rtl_tcp above). A sample rate of 2.88e6 may work without lost samples but this may depend on your PC/Laptop's host interface.

Using the data

To convert the data to a standard cfile, following GNU Radio Block can be used:



The GNU Radio Companion flowgraph (rtl2832-cfile.grc) is attached to this page. It is based on the FM demodulation flowgraph posted by Alistair Buxton on this thread.

Please note: for realtime operation you may use fifos (mkfifo) to forward the iq data from the capture utility to the GRC flowgraph.

You may use any of the the following gnuradio sources (they are equivalent):

gr-osmosdr sources

What has been successfully tested so far is the reception of Broadcast FM and air traffic AM radio, TETRA, GMR, GSM, ADS-B and POCSAG.

Tell us your success story with other wireless protocols in ##rtlsdr channel on freenode IRC network.

Known Apps

The following 3rd party applications and libraries are successfully using either librtlsdr directly or the corresponding gnuradio source (gr-osmosdr):

NameTypeAuthorURL
gr-pocsagGRC FlowgraphMarcus Leechhttps://www.cgran.org/browser/projects/gr-pocsag/trunk
multimode RX (try first!)GRC FlowgraphMarcus Leechhttps://www.cgran.org/browser/projects/multimode/trunk
simple_fm_rvcGRC FlowgraphMarcus Leechhttps://www.cgran.org/browser/projects/simple_fm_rcv/trunk
python-librtlsdrPython WrapperDavid Basdenhttps://github.com/dbasden/python-librtlsdr
pyrtlsdrPython WrapperRogerhttps://github.com/roger-/pyrtlsdr
rtlsdr-waterfallPython FFT GUIKyle Keenhttps://github.com/keenerd/rtlsdr-waterfall
Wireless Temp. Sensor RXGnuradio AppKevin Mehallhttps://github.com/kevinmehall/rtlsdr-433m-sensor
QtRadioSDR GUIAndrea Montefusco et al.http://napan.ca/ghpsdr3/index.php/RTL-SDR
gqrxSDR GUIAlexandru Csetehttps://github.com/csete/gqrx
rtl_fmSDR CLIKyle Keenmerged in librtlsdr master
SDR#SDR GUIYoussef Touilhttp://sdrsharp.com/ and Windows Guide or Linux Guide
tetra_demod_fftTrunking RXosmocom teamosmosdr-tetra_demod_fft.py and the HOWTO
airprobeGSM snifferosmocom team et alhttp://git.gnumonks.org/cgi-bin/gitweb.cgi?p=airprobe.git
gr-smartnet (WIP)Trunking RXNick Fosterhttp://www.reddit.com/r/RTLSDR/comments/us3yo/rtlsdr_smartnet/
Notes from the author
gr-air-modesADS-B RXNick Fosterhttps://www.cgran.org/wiki/gr-air-modes call with --rtlsdr option
LinradSDR GUILeif Asbrink (SM5BSZ)http://www.nitehawk.com/sm5bsz/linuxdsp/hware/rtlsdr/rtlsdr.htm
DAGC changes were applied to librtlsdr master
gr-ais (fork)AIS RXNick Foster
Antoine Sirinelli
Christian Gagneraud
https://github.com/chgans/gr-ais
GNSS-SDR GPS RX (Realtime!)Centre Tecnològic de
Telecomunicacions de Catalunya
Documentation and http://www.gnss-sdr.org
LTE-Cell-Scanner LTE Scanner / TrackerJames Peroulas
Evrytania LLC
http://www.evrytania.com/lte-tools
https://github.com/Evrytania/LTE-Cell-Scanner
LTE-Cell-Scanner
OpenCL accelerated (new)
LTE Scanner / TrackerJiao Xianjunhttps://github.com/JiaoXianjun/LTE-Cell-Scanner
Simulink-RTL-SDR MATLAB/Simulink
wrapper
Michael Schwall
Sebastian Koslowski
Communication Engineering Lab (CEL)
Karlsruhe Institute of Technology (KIT)
http://www.cel.kit.edu/simulink_rtl_sdr.php
gr-scan Scannertechmeologyhttp://www.techmeology.co.uk/gr-scan/
kalibrate-rtlcalibration toolJoshua Lackey
Alexander Chemeris
Steve Markgraf
https://github.com/steve-m/kalibrate-rtl, Windows build
pocsag-mrtMultichannel Realtime
Decoder
iZshhttps://github.com/iZsh/pocsag-mrt
adsb# ADS-B RXYoussef Touil
Ian Gilmour
http://sdrsharp.com/index.php/a-simple-and-cheap-ads-b-receiver-using-rtl-sdr
osmo-gmr-rtlGMR1 RXDimitri Stolnikovhttp://gmr.osmocom.org/trac/wiki/GettingStarted#RTLSDRdongles
rtl_adsbADS-B RXKyle Keencomes with the library
dump1090ADS-B RXSalvatore Sanfilippohttps://github.com/antirez/dump1090
rtl_433Temperature Sensor
Receiver
Benjamin Larssonhttps://github.com/merbanan/rtl_433
randioRandom number generatorMichel Pelletierhttps://github.com/michelp/randio
gr-wmbusm-bus (EN 13757-4) RXoWCTejLVlFyNztcBnOohhttps://github.com/oWCTejLVlFyNztcBnOoh/gr-wmbus
ec3kEnergyCount? 3000 RXTomaž Šolchttps://github.com/avian2/ec3k
RTLSDR-ScannerRadio ScannerEarToEarOak?https://github.com/EarToEarOak/RTLSDR-Scanner
simple_raRadio Astronomy AppMarcus Leechhttps://cgran.org/wiki/simple_ra
rtlizerSpectrum analyzerAlexandru Csetehttps://github.com/csete/rtlizer
FS20_decodeFS20 DecoderThomas Frischhttps://github.com/eT0M/rtl_sdr_FS20_decoder
OpenLTELTE ToolkitBen Wojtowiczhttp://sourceforge.net/p/openlte/home/Home/
rtltcpaccessDAB compatibility layerSteve Markgrafhttps://github.com/steve-m/rtltcpaccess
SDR-J"Analog" SDR & DABJan van Katwijkhttp://www.sdr-j.tk
RTLTcpSourcesource for redhawk
SDR framework
Michael Ihderedhawk Docs page RTLTcpSource
gortlsdrGolang wrapperJoseph Poirierhttps://github.com/jpoirier/gortlsdr
gr-rds (fork)RDS + WBFM receiverDimitrios Symeonidis et alhttps://github.com/bastibl/gr-rds
NRF24-BTLE-DecoderDecoder for 2.4 GHz NRF24 & Bluetooh LEOmri IluzCode Blog post
acarsdecACARS decoderThierry Lecontehttp://sourceforge.net/projects/acarsdec/


Also take a look at the applications which use rtl-sdr through gr-osmosdr.

Using our lib? Tell us! Don't? Tell us why! :)


spectrum view of GMR carriers
Multiple GMR-carriers can be seen in a spectrum view with the full 3.2 MHz bandwidth (at 3.2 MS/s).

Credits

rtl-sdr is developed by Steve Markgraf, Dimitri Stolnikov, and Hoernchen, with contributions by Kyle Keen, Christian Vogel and Harald Welte.

Last modified 7 weeks ago Last modified on Jun 3, 2014, 1:19:55 PM

Attachments (8)