Project

General

Profile

Rtl-sdr » History » Version 158

Anonymous, 02/19/2016 10:51 PM
Added simple example for FM reception.

1 1 steve-m
[[PageOutline]]
2
= rtl-sdr =
3
4 30 horiz0n
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 the V4L/DVB kernel developer [http://thread.gmane.org/gmane.linux.drivers.video-input-infrastructure/44461/focus=44461 Antti Palosaari].
5 1 steve-m
6
== Specifications ==
7
8 151 steve-m
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)'''.
9 1 steve-m
10 136 steve-m
||'''Tuner'''||'''Frequency range'''||
11
||Elonics E4000|| 52 - 2200 MHz with a gap from 1100 MHz to 1250 MHz (varies)||
12
||Rafael Micro R820T||24 - 1766 MHz||
13
||Fitipower FC0013||22 - 1100 MHz (FC0013B/C, FC0013G has a separate L-band input, which is unconnected on most sticks)||
14
||Fitipower FC0012||22 - 948.6 MHz||
15
||FCI FC2580||146 - 308 MHz and 438 - 924 MHz (gap in between)||
16
17 1 steve-m
== Supported Hardware ==
18
19 141 steve-m
'''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]]
20
Realtek never released a chip marked as RTL2838 so far.[[br]][[br]]
21 45 horiz0n
The following devices are known to work fine with RTLSDR software:
22 1 steve-m
23 43 steve-m
||'''VID'''||'''PID'''||'''tuner'''||'''device name'''||
24 42 Hoernchen
||0x0bda||0x2832||all of them||Generic RTL2832U (e.g. hama nano)||
25
||0x0bda||0x2838||E4000||ezcap USB 2.0 DVB-T/DAB/FM dongle||
26
||0x0ccd||0x00a9||FC0012||Terratec Cinergy T Stick Black (rev 1)||
27 49 Hoernchen
||0x0ccd||0x00b3||FC0013||Terratec NOXON DAB/DAB+ USB dongle (rev 1)||
28 42 Hoernchen
||0x0ccd||0x00d3||E4000||Terratec Cinergy T Stick RC (Rev.3)||
29
||0x0ccd||0x00e0||E4000||Terratec NOXON DAB/DAB+ USB dongle (rev 2)||
30
||0x185b||0x0620||E4000||Compro Videomate U620F||
31
||0x185b||0x0650||E4000||Compro Videomate U650F||
32
||0x1f4d||0xb803||FC0012||GTek T803||
33
||0x1f4d||0xc803||FC0012||Lifeview LV5TDeluxe||
34
||0x1b80||0xd3a4||FC0013||Twintech UT-40||
35
||0x1d19||0x1101||FC2580||Dexatek DK DVB-T Dongle (Logilink VG0002A)||
36
||0x1d19||0x1102||?||Dexatek DK DVB-T Dongle (MSI DigiVox mini II V3.0)||
37
||0x1d19||0x1103||FC2580||Dexatek Technology Ltd. DK 5217 DVB-T Dongle||
38
||0x0458||0x707f||?||Genius TVGo DVB-T03 USB dongle (Ver. B)||
39
||0x1b80||0xd393||FC0012||GIGABYTE GT-U7300||
40
||0x1b80||0xd394||?||DIKOM USB-DVBT HD||
41
||0x1b80||0xd395||FC0012||Peak 102569AGPK||
42
||0x1b80||0xd39d||FC0012||SVEON STV20 DVB-T USB & FM||
43 14 steve-m
44 117 horiz0n
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
45 38 Hoernchen
46 31 horiz0n
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.
47 2 steve-m
48 30 horiz0n
Other dongles based on the RTL2832U might be added in the future as well.
49 5 steve-m
50
This is the PCB of the ezcap-stick:[[br]][[br]]
51
[[Image(ezcap_top.jpg,50%)]][[br]]
52
More pictures can be found [http://www.steve-m.de/pictures/rtl-sdr/ here].
53 2 steve-m
54
== Software ==
55
56 157 steve-m
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.
57 1 steve-m
58 157 steve-m
Because most of the RTL2832 devices are connected using USB, the librtlsdr library depends on the libusb library to communicate with the device.
59
60
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.
61
62 158 steve-m
For example, the following command will do reception of commercial wide-band FM signals:
63
64
{{{
65
rtl_fm -f 96.3e6 -W -s 200000 -r 48000 - | aplay -r 48k -f S16_LE
66
}}}
67
68 157 steve-m
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.
69 158 steve-m
70
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.
71 157 steve-m
72
The rtl-sdr code can be checked out with:
73 2 steve-m
{{{
74
git clone git://git.osmocom.org/rtl-sdr.git
75
}}}
76 35 horiz0n
77 1 steve-m
It can also be browsed on http://cgit.osmocom.org/cgit/rtl-sdr/
78 45 horiz0n
79 48 horiz0n
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
80 1 steve-m
81 56 horiz0n
A [http://cgit.osmocom.org/cgit/gr-osmosdr/ GNU Radio source block] for [http://sdr.osmocom.org/trac/ OsmoSDR] '''and rtlsdr''' is available. '''Please install a recent gnuradio (>= v3.5.3) in order to be able to use it.''' 
82 41 horiz0n
83 131 laforge
=== Mailing List ===
84
85
We discuss both OsmoSDR as well as rtl-sdr on the following mailing list: [mailto:osmocom-sdr@lists.osmocom.org].
86
87
You can subscribe and/or unsubscribe via the following link: [http://lists.osmocom.org/mailman/listinfo/osmocom-sdr]
88
89 1 steve-m
=== Building the software ===
90
91 27 horiz0n
==== rtlsdr library & capture tool ====
92 1 steve-m
93 29 horiz0n
'''You have to install development packages for libusb1.0''' and can either use cmake or autotools to build the software.
94 27 horiz0n
95
Please note: prior pulling a new version from git and compiling it, please do a "make uninstall" first to properly remove the previous version.
96
97 19 steve-m
Building with cmake:
98
{{{
99 1 steve-m
cd rtl-sdr/
100 20 horiz0n
mkdir build
101
cd build
102
cmake ../
103 19 steve-m
make
104 33 steve-m
sudo make install
105 130 horiz0n
sudo ldconfig
106 19 steve-m
}}}
107
108 130 horiz0n
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.
109
{{{
110
cmake ../ -DINSTALL_UDEV_RULES=ON
111
}}}
112
113 19 steve-m
Building with autotools:
114
{{{
115
cd rtl-sdr/
116
autoreconf -i
117
./configure
118 33 steve-m
make
119 19 steve-m
sudo make install
120 130 horiz0n
sudo ldconfig
121 19 steve-m
}}}
122 1 steve-m
123 130 horiz0n
The built executables (rtl_sdr, rtl_tcp and rtl_test) can be found in rtl-sdr/src/.
124 1 steve-m
125 130 horiz0n
In order to be able to use the dongle as a non-root user, you may install the appropriate udev rules file by calling
126
{{{
127
sudo make install-udev-rules
128
}}}
129
130 148 Hoernchen
[attachment:RelWithDebInfo.zip pre-built Windows version] using libusbx 33ba1231a1b07425eaa83935f84b2e4b7f904f35 and pthreads-win32 cvs
131 72 horiz0n
132 1 steve-m
==== Gnuradio Source ====
133 27 horiz0n
134 29 horiz0n
'''The gnuradio source requires the rtl-sdr package and a recent gnuradio (>= v3.5.3) to be installed.'''
135 56 horiz0n
136 54 horiz0n
The source supports direct device operation as well as a tcp client mode when using the rtl_tcp utility as a spectrum server.
137 27 horiz0n
138
Please note: prior pulling a new version from git and compiling it, please do a "make uninstall" first to properly remove the previous version.
139 92 horiz0n
140
Please note: you always should build & '''install the latest version of the dependencies (librtlsdr in this case)''' before trying to build the gr source.
141 27 horiz0n
142
Building with cmake:
143
{{{
144
git clone git://git.osmocom.org/gr-osmosdr
145
cd gr-osmosdr/
146 1 steve-m
mkdir build
147 27 horiz0n
cd build/
148 130 horiz0n
cmake ../
149 1 steve-m
make
150
sudo make install
151
sudo ldconfig
152
}}}
153
154 101 horiz0n
NOTE: The source block (osmosdr/rtlsdr Source) will appear under 'Sources' category in GRC menu.
155 1 steve-m
156 84 horiz0n
For initial tests we recommend the multimode receiver gnuradio companion flowgraph (see "Known Apps" table below).
157
158 104 horiz0n
You may find more detailed installation instructions in this recent [http://blog.opensecurityresearch.com/2012/06/getting-started-with-gnu-radio-and-rtl.html tutorial].
159 103 horiz0n
160 1 steve-m
==== Automated installation ====
161
162 101 horiz0n
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.
163
164 1 steve-m
=== Usage ===
165
166 78 horiz0n
==== rtl_sdr ====
167
168 1 steve-m
Example: To tune to 392.0 MHz, and set the sample-rate to 1.8 MS/s, use:
169
170
{{{
171
./rtl_sdr /tmp/capture.bin -s 1.8e6 -f 392e6
172 74 horiz0n
}}}
173
174
to record samples to a file or to forward the data to a fifo.
175
176 90 horiz0n
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).
177 74 horiz0n
178 78 horiz0n
==== rtl_tcp ====
179
180 80 horiz0n
Example:
181
182 1 steve-m
{{{
183 79 horiz0n
rtl_tcp -a 10.0.0.2 [-p listen port (default: 1234)]
184
Found 1 device(s).
185
Found Elonics E4000 tuner
186
Using Generic RTL2832U (e.g. hama nano)
187
Tuned to 100000000 Hz.
188
listening...
189
Use the device argument 'rtl_tcp=10.0.0.2:1234' in OsmoSDR (gr-osmosdr) source
190
to receive samples in GRC and control rtl_tcp parameters (frequency, gain, ...).
191 74 horiz0n
}}}
192 79 horiz0n
193 76 horiz0n
use the rtl_tcp=... device argument in gr-osmosdr source to receive the samples in GRC and control the rtl settings remotely.
194 1 steve-m
195 103 horiz0n
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).
196 85 steve-m
You can find a Makefile for OpenWRT [http://steve-m.de/projects/rtl-sdr/Makefile here].
197 76 horiz0n
198 110 horiz0n
A use case is described [https://sites.google.com/site/embrtlsdr/ here].
199
200 1 steve-m
==== rtl_test ====
201 90 horiz0n
To check the possible tuning range (may heavily vary by some MHz depending on device and temperature), call
202 74 horiz0n
{{{
203
rtl_test -t
204 1 steve-m
}}}
205 90 horiz0n
206
To check the maximum samplerate possible on your machine, type (change the rate down until no sample loss occurs):
207 74 horiz0n
{{{
208
rtl_test -s 3.2e6
209 1 steve-m
}}}
210 90 horiz0n
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.
211 2 steve-m
212
== Using the data ==
213
214 3 steve-m
To convert the data to a standard cfile, following GNU Radio Block can be used:[[br]]
215
[[br]][[Image(rtl2832-cfile.png)]][[br]][[br]]
216 2 steve-m
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].
217 6 steve-m
218 22 horiz0n
Please note: for realtime operation you may use fifos (mkfifo) to forward the iq data from the capture utility to the GRC flowgraph.
219
220 115 horiz0n
You may use any of the the following gnuradio sources (they are equivalent):
221
[[br]][[br]][[Image(osmosource.png)]][[br]]
222
223 59 horiz0n
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].
224 32 horiz0n
225
Tell us your success story with other wireless protocols in ##rtlsdr channel on freenode IRC network.
226
227 61 horiz0n
== Known Apps ==
228 60 horiz0n
229 81 horiz0n
The following 3rd party applications and libraries are successfully using either librtlsdr directly or the corresponding gnuradio source (gr-osmosdr):
230 60 horiz0n
231
||'''Name'''||'''Type'''||'''Author'''||'''URL'''||
232 88 horiz0n
||gr-pocsag||GRC Flowgraph||Marcus Leech||[https://www.cgran.org/browser/projects/gr-pocsag/trunk]||
233 106 horiz0n
||multimode RX (try first!)||GRC Flowgraph||Marcus Leech||[https://www.cgran.org/browser/projects/multimode/trunk]||
234 89 steve-m
||simple_fm_rvc||GRC Flowgraph||Marcus Leech||[https://www.cgran.org/browser/projects/simple_fm_rcv/trunk]||
235 60 horiz0n
||python-librtlsdr||Python Wrapper||David Basden||[https://github.com/dbasden/python-librtlsdr]||
236 63 horiz0n
||pyrtlsdr||Python Wrapper||Roger||[https://github.com/roger-/pyrtlsdr]||
237 60 horiz0n
||rtlsdr-waterfall||Python FFT GUI||Kyle Keen||[https://github.com/keenerd/rtlsdr-waterfall]||
238 67 horiz0n
||Wireless Temp. Sensor RX||Gnuradio App||Kevin Mehall||[https://github.com/kevinmehall/rtlsdr-433m-sensor]||
239 1 steve-m
||!QtRadio||SDR GUI||Andrea Montefusco et al.||[http://napan.ca/ghpsdr3/index.php/RTL-SDR]||
240 88 horiz0n
||gqrx (fork)||SDR GUI||Alexandru Csete||[https://github.com/mathisschmieder/gqrx]||
241 116 horiz0n
||rtl_fm||SDR CLI||Kyle Keen||merged in librtlsdr master||
242 119 horiz0n
||SDR#||SDR GUI||Youssef Touil||[http://sdrsharp.com/] and [http://rtlsdr.org/softwarewindows Windows Guide] or [http://rtlsdr.org/softwarelinux Linux Guide]||
243 109 horiz0n
||tetra_demod_fft||Trunking RX||osmocom team||[http://cgit.osmocom.org/cgit/osmo-tetra/tree/src/demod/python/osmosdr-tetra_demod_fft.py osmosdr-tetra_demod_fft.py] and the [http://tetra.osmocom.org/trac/wiki/osmo-tetra#Quickexample HOWTO] ||
244 128 horiz0n
||gqrx (original)||SDR GUI||Alexandru Csete||[https://github.com/csete/gqrx]||
245
||airprobe||GSM sniffer||osmocom team et al||[http://git.gnumonks.org/cgi-bin/gitweb.cgi?p=airprobe.git]||
246
||gr-smartnet (WIP)||Trunking RX||Nick Foster||[http://www.reddit.com/r/RTLSDR/comments/us3yo/rtlsdr_smartnet/][[br]][http://www.reddit.com/r/RTLSDR/comments/vbxl0/attention_grsmartnet_users_or_attempted_users/ Notes from the author]||
247
||gr-air-modes||ADS-B RX||Nick Foster||[https://www.cgran.org/wiki/gr-air-modes] call with --rtlsdr option||
248
||Linrad||SDR GUI||Leif Asbrink (SM5BSZ)||[http://www.nitehawk.com/sm5bsz/linuxdsp/hware/rtlsdr/rtlsdr.htm][[br]]DAGC changes were applied to librtlsdr master||
249
||gr-ais (fork)||AIS RX||Nick Foster[[br]]Antoine Sirinelli[[br]]Christian Gagneraud||[https://github.com/chgans/gr-ais]||
250 137 horiz0n
||GNSS-SDR ||GPS RX (Realtime!)||Centre Tecnològic de[[br]]Telecomunicacions de Catalunya||[http://www.gnss-sdr.org/documentation/gnss-sdr-operation-realtek-rtl2832u-usb-dongle-dvb-t-receiver Documentation] and [http://www.gnss-sdr.org]||
251 145 steve-m
||LTE-Cell-Scanner ||LTE Scanner / Tracker||James Peroulas[[br]]Evrytania LLC||[http://www.evrytania.com/lte-tools][[br]][https://github.com/Evrytania/LTE-Cell-Scanner]||
252 146 horiz0n
||Simulink-RTL-SDR ||MATLAB/Simulink[[br]]wrapper||Michael Schwall[[br]]Sebastian Koslowski[[br]]Communication Engineering Lab (CEL)[[br]]Karlsruhe Institute of Technology (KIT)||[http://www.cel.kit.edu/simulink_rtl_sdr.php]||
253 145 steve-m
||gr-scan ||Scanner||techmeology||[http://www.techmeology.co.uk/gr-scan/]||
254 146 horiz0n
||kalibrate-rtl||calibration tool||Joshua Lackey[[br]]Alexander Chemeris[[br]]Steve Markgraf||[https://github.com/steve-m/kalibrate-rtl], [http://rtlsdr.org/files/kalibrate-win-release.zip Windows build]||
255
||pocsag-mrt||Multichannel Realtime[[br]]Decoder||iZsh||[https://github.com/iZsh/pocsag-mrt]||
256 152 horiz0n
||adsb# ||ADS-B RX||Youssef Touil[[br]]Ian Gilmour||[http://sdrsharp.com/index.php/a-simple-and-cheap-ads-b-receiver-using-rtl-sdr]||
257
||osmo-gmr-rtl||GMR1 RX||Dimitri Stolnikov||[http://gmr.osmocom.org/trac/wiki/GettingStarted#RTLSDRdongles]||
258
||rtl_adsb||ADS-B RX||Kyle Keen||comes with the library||
259
||dump1090||ADS-B RX||Salvatore Sanfilippo||[https://github.com/antirez/dump1090]||
260 153 horiz0n
||rtl_433||Temperature Sensor[[br]]Receiver||Benjamin Larsson||[https://github.com/merbanan/rtl_433]||
261
||randio||Random number generator||Michel Pelletier||[https://github.com/michelp/randio]||
262
||gr-wmbus||m-bus (EN 13757-4) RX||oWCTejLVlFyNztcBnOoh||[https://github.com/oWCTejLVlFyNztcBnOoh/gr-wmbus]||
263
||ec3k||EnergyCount 3000 RX||Tomaž Šolc||[https://github.com/avian2/ec3k]||
264 156 horiz0n
||RTLSDR-Scanner||Radio Scanner||EarToEarOak||[https://github.com/EarToEarOak/RTLSDR-Scanner]||
265 149 horiz0n
||simple_ra '''(NEW)'''||Radio Astronomy App||Marcus Leech||[https://cgran.org/wiki/simple_ra]||
266 1 steve-m
||rtlizer '''(NEW)'''||Spectrum analyzer||Alexandru Csete||[https://github.com/csete/rtlizer]||
267 152 horiz0n
||FS20_decode '''(NEW)'''||FS20 Decoder||Thomas Frisch||[https://github.com/eT0M/rtl_sdr_FS20_decoder]||
268 154 horiz0n
||OpenLTE '''(NEW)'''||LTE Toolkit||Ben Wojtowicz||[http://sourceforge.net/p/openlte/home/Home/]||
269 1 steve-m
||rtltcpaccess '''(NEW)'''||DAB compatibility layer||Steve Markgraf||[https://github.com/steve-m/rtltcpaccess]||
270 156 horiz0n
||SDR-J '''(NEW)'''||"Analog" SDR & DAB||Jan van Katwijk||[http://www.sdr-j.tk]||
271 98 steve-m
272 91 horiz0n
[[br]]
273 60 horiz0n
Using our lib? Tell us! Don't? Tell us why! :)
274 91 horiz0n
[[br]][[br]][[br]]
275 6 steve-m
[[Image(rtl-sdr-gmr.png)]][[br]]
276
Multiple GMR-carriers can be seen in a spectrum view with the full 3.2 MHz bandwidth (at 3.2 MS/s).
277 132 laforge
278
== Credits ==
279
280 133 horiz0n
rtl-sdr is developed by Steve Markgraf and Dimitri Stolnikov, with contributions by Kyle Keen, Hoernchen, Christian Vogel and Harald Welte.
Add picture from clipboard (Maximum size: 48.8 MB)