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 ([http://rtlsdr.org/#history_and_discovery_of_rtlsdr 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.4 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)'''.

'''Note:''' Many devices with EEPROM have 0x2838 as PID and RTL2838 as product name, but in fact all of them have an RTL2832U inside.[[br]]
Realtek never released a chip marked as RTL2838 so far.[[br]][[br]]
The following devices are known to work fine with RTLSDR software:

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

People over at reddit [http://www.reddit.com/r/RTLSDR/comments/s6ddo/rtlsdr_compatibility_list_v2_work_in_progress/ are collecting a list (v2)] of other devices that are compatible.

Other dongles based on the RTL2832U might be added in the future as well.

This is the PCB of the ezcap-stick:[[br]][[br]]
[[Image(ezcap_top.jpg,50%)]][[br]]
More pictures can be found [http://www.steve-m.de/pictures/rtl-sdr/ 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:

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 on http://cgit.osmocom.org/cgit/rtl-sdr/

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 [http://sdr.osmocom.org/trac/wiki/GrOsmoSDR GNU Radio source block] for [http://sdr.osmocom.org/trac/ 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: [mailto:osmocom-sdr@lists.osmocom.org].

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.

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
}}}

'''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 [https://sdr.osmocom.org/trac/wiki/GrOsmoSDR 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
}}}

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 [https://sites.google.com/site/embrtlsdr/ here].

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:[[br]]
[[br]][[Image(rtl2832-cfile.png)]][[br]][[br]]
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 [http://thread.gmane.org/gmane.linux.drivers.video-input-infrastructure/44461/focus=44525 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):
[[br]][[br]][[Image(osmosource.png)]][[br]]

What has been successfully tested so far is the reception of [https://www.cgran.org/browser/projects/multimode/trunk Broadcast FM and air traffic AM] radio, [http://tetra.osmocom.org/ TETRA], [http://gmr.osmocom.org/ GMR], [http://svn.berlin.ccc.de/projects/airprobe/ GSM], [https://www.cgran.org/wiki/gr-air-modes ADS-B] and [https://github.com/smunaut/osmo-pocsag 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):

[[br]]
Using our lib? Tell us! Don't? Tell us why! :)
[[br]][[br]][[br]]
[[Image(rtl-sdr-gmr.png)]][[br]]
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.