SDR.

Apuntes de Linux - SDR con RTL2832U en Arch Linux

Hoy están de moda entre nosotros los radioaficionados los SDR de bajo coste aprovechando los DVB-T que podemos adquirir baratos, en torno a los 20 euros, en cualquier tienda de informática. En mi caso cuando se implementó la TDT en España años ha adquirí un 'Not Only TV LV5TDLX”, casi que lo que tenían más barato en cuestión de DVB-T USB en la APP de mi pueblo (hi).

Apenas veo la televisión, cuatro o cinco programas contados, por lo tanto lo consideré la mejor opción.

Luego me pasaron enlaces de cómo convertir este dispositivo en un receptor SDR, que en sí mismo ya lo es, pero que pudiese monitorizar otro tipo de frecuencias y tener un 'pequeño scanner' conectado al PC. Ahí comenzó mi calvario.

Dado que en aquellos tiempos el proyecto estaba muy verde, se comenzaba a dar soporte a otros dispositivos, que en principio solamente era destinado para la combinación 'RTL2832U' con el famoso 'E4K' de Elonics y ver que aún no estaba soportado éste (1F4D:B803) me desanimé.

Después de un tiempo y, que viva la cabezonería, volví a mirar los dispositivos soportados comprobando que ahora ya sí que al menos podía intentarlo. No así con las versiones antíguas de 'rtl-sdr' que aunque estuviese en la lista, no funcionaba y me daba error. Hasta que por fín lo conseguí.

- Instalación del hardware en Arch Linux.

Lo primero de todo cuando hablamos de hardware y sobre todo en GNU/Linux es saber que tipo y modelo tenemos instalado en nuestro PC. Yo estoy utilizando Arch Linux pero es más o menos común el procedimiento para todas las distribuciones:

Abrimos un intérprete de comandos y escribimos:

20:14:00 ------:~ > lsusb
Bus 001 Device 002: ID 1f4d:b803 G-Tek Electronics Group Lifeview LV5TDLX DVB-T [RTL2832U]

Con esta información es suficiente para saber que mòdulos hemos de instalar, en mi caso escribiría:

[root@------ ----]# yaourt -Ss rtl2832
community/rtl-sdr 20130201-1
Driver for Realtek RTL2832U, allowing general purpose software defined radio (SDR).
aur/dvb-usb-rtl2832u-dkms 2.2.2-1 (Out of Date) (1)
Linux module for the RTL2832U DVB-T USB2.0 device, dkms version
aur/dvb-usb-rtl2832u-openpli 20130127-1 [installed] (14)
Linux module for the RTL2832U DVB-T USB2.0 device
aur/dvb-usb-rtl2832u-stv20 1.1-1 (1)
Kernel26 module for the RTL2832U, RTL2836U and RTL2838U DVB-T USB2.0 devices, with support for SVEON STV20 device
aur/dvb-usb-rtl2838u-arch 1.1_3.1.5-1 (7)
Kernel module for the RTL2832U, RTL2836U and RTL2838U DVB-T USB2.0 devices
aur/dvb-usb-rtl2838u-lts 1.1_3.0.24-1 (2)
Linux-lts kernel module for the RTL2832U, RTL2836U and RTL2838U DVB-T USB2.0 devices
aur/python2-pyrtlsdr-git 20130309-1 [installed: 20130316-1] (0)
A Python wrapper for librtlsdr (a driver for Realtek RTL2832U based SDR's)
aur/rtl-sdr-git 20120722-3 (16)
Tuner for DVB-T sticks based on the Realtek RTL2832U, which can be used as a cheap SDR, since the chip allows
transferring the raw I/Q samples to the host.
aur/rtl_433-git 20130206-1 (0)
Turns your Realtek RTL2832 based DVB dongle into a 433.92MHz generic data receiver

En este caso vamos a instalar el paquete al que hace referencia esta línea 'aur/dvb-usb-rtl2832u-openpli 20130127-1' :

[root@------ ---]# yaourt -S dvb-usb-rtl2832u-openpli

Una vez instalado podemos probar que los módulos se cargan correctamente:

modprobe dvb_usb_rtl2832u

Observamos la salida de lsmod:

[root@------ ----]# lsmod |grep rtl
dvb_usb_rtl2832u 366371 0
dvb_usb 15171 1 dvb_usb_rtl2832u
usbcore 126796 5 uhci_hcd,dvb_usb_rtl2832u,dvb_usb,usb_storage,ehci_hcd

De esta manera podremos utilizar el dispositivo DVB-T USB para poder seguir viendo la TV. Ahora vamos a lo importante.

- Instalación de RTL-SDR.

En la mayoría de las distribuciones pero en especial las basadas en debian y Arch Linux tenemos un gran número de paquetes de aplicaciones para radioaficionado en los repositorios, en la mayoría de las ocasiones se tratan de paquetes binarios precompilados de versiones estables. Así que descargaremos la última versión de 'rtl-sdr'.

[root@------ ----]# git clone git://git.osmocom.org/rtl-sdr.git
[root@------ ----]# cd rtl-sdr/
[root@------ ----]# mkdir build
[root@------ ----]# cd build
[root@------ ----]# cmake ../
[root@------ ----]# make
[root@------ ----]# make install
[root@------ ----]# ldconfig

Observaremos que se instala la aplicación con el 'path' por defecto que es '/usr/local/bin/' y '/usr/local/lib/' para las librerías empleadas por 'rtl-sdr'.

Para evitar algunos problemas con otras aplicaciones podemos crear enlaces simbólicos que apunten hacia los directorios que normalmente utilizan los paquetes binarios precompilados:

[root@------ ----]# ls -F /usr/local/bin/rtl_*
/usr/local/bin/rtl_adsb* /usr/local/bin/rtl_fm* /usr/local/bin/rtl_tcp*
/usr/local/bin/rtl_eeprom* /usr/local/bin/rtl_sdr* /usr/local/bin/rtl_test*

[root@------ ----]# ls -F /usr/local/lib/librtlsdr.*
/usr/local/lib/librtlsdr.a /usr/local/lib/librtlsdr.so@ /usr/local/lib/librtlsdr.so.0@ /usr/local/lib/librtlsdr.so.0.0.0*

Ahora creamos los enlaces simbólicos:

[root@------ ----]#
ln -s /usr/local/bin/rtl_adsb /usr/bin/rtl_adsb && ln -s /usr/local/bin/rtl_fm /usr/bin/rtl_fm && ln -s /usr/local/bin/rtl_tcp /usr//bin/rtl_tcp && ln -s /usr/local/bin/rtl_eeprom /usr/bin/rtl_eeprom && ln -s /usr/local/bin/rtl_sdr /usr/bin/rtl_sdr && ln -s /usr/local/bin/rtl_test /usr/bin/rtl_test && ln -s /usr/local/lib/librtlsdr.a /usr/lib/librtlsdr.a && ln -s /usr/local/lib/librtlsdr.so /usr/lib/rtlsdr.so && ln -s /usr/local/lib/librtlsdr.so.0 /usr/lib/librtlsdr.so.0 && ln -s /usr/local/lib/librtlsdr.so.0.0.0 /usr/lib/librtlsdr.so.0.0.0

[root@------ ----]# ls -al /usr/bin/rtl_* && ls -al /usr/lib/librtlsdr.*
lrwxrwxrwx 1 root root 23 mar 17 18:47 /usr/bin/rtl_adsb -> /usr/local/bin/rtl_adsb
lrwxrwxrwx 1 root root 25 mar 17 18:47 /usr/bin/rtl_eeprom -> /usr/local/bin/rtl_eeprom
lrwxrwxrwx 1 root root 21 mar 17 18:47 /usr/bin/rtl_fm -> /usr/local/bin/rtl_fm
lrwxrwxrwx 1 root root 22 mar 17 18:47 /usr/bin/rtl_sdr -> /usr/local/bin/rtl_sdr
lrwxrwxrwx 1 root root 22 mar 17 18:47 /usr/bin/rtl_tcp -> /usr/local/bin/rtl_tcp
lrwxrwxrwx 1 root root 23 mar 17 18:47 /usr/bin/rtl_test -> /usr/local/bin/rtl_test
lrwxrwxrwx 1 root root 33 mar 17 18:50 /usr/lib/librtlsdr.0.0.0 -> /usr/local/lib/librtlsdr.so.0.0.0
lrwxrwxrwx 1 root root 26 mar 17 18:49 /usr/lib/librtlsdr.a -> /usr/local/lib/librtlsdr.a
lrwxrwxrwx 1 root root 27 mar 17 18:49 /usr/lib/librtlsdr.so -> /usr/local/lib/librtlsdr.so
lrwxrwxrwx 1 root root 29 mar 17 18:17 /usr/lib/librtlsdr.so.0 -> /usr/local/lib/librtlsdr.so.0

De esa manera comprobamos que apuntan correctamente.

El error que me daba anteriormente a este 'híbrido' con la última versión de 'rtl-sdr' era el siguiente:

Using device 0: GTek T803
usb_claim_interface error -6
Failed to open rtlsdr device #0.

Tras la actualización éste es el resultado:

[root@------ ----]# rtl_test
Found 1 device(s):
0: GTek T803

Using device 0: GTek T803
Detached kernel driver
Found Fitipower FC0012 tuner
Supported gain values (5): -9.9 -4.0 7.1 17.9 19.2

Info: This tool will continuously read from the device, and report if
samples get lost. If you observe no further output, everything is fine.

Reading samples in async mode...

Si nos retorna esta salida tenemos el dispositivo funcionando correctamente.

En esencia 'rtl-sdr' es una aplicación para la línea de comandos para poder utilizar el dispositivo como SDR pero como decían EA1HBX y EA1FBU durante la charla que impartieron en la sede de la Unión de Radioaficionados de Ourense, “trabaja más la vista que el oído”.

Ahora vamos a instalar varias aplicaciones a través de los repositorios de Arch::

- GNU Radio:

[root@------ ----]# yaourt -Ss gnuradio
aur/gnuradio 3.6.3-1 (18)
free software development toolkit that provides the signal processing runtime and processing blocks to implement software
radios using readily-available, low-cost external RF hardware and commodity processors
aur/gnuradio-git 20130211-1 (15)
free software development toolkit that provides the signal processing runtime and processing blocks to implement software
radios using readily-available, low-cost external RF hardware and commodity processors

E instalamos 'gnuradio' con sus dependencias adicionales que son:

==> dependencias de gnuradio:
- fftw (ya instalado)
- python2-numpy (ya instalado)
- cppunit (ya instalado)
- swig (ya instalado)
- gsl (ya instalado)
- blas (ya instalado)
- guile (ya instalado)
- boost-libs (ya instalado)
- libuhd (ya instalado)
- git (ya instalado)
- boost (ya instalado)
- cmake (ya instalado)

Tardará bastante en compilar todos los módulos ya que casi son 300MB y una vez terminada la instalación continuamos instalando 'gqrx'.

- GQRX.

[root@------ ----]# yaourt -Ss gqrx
aur/gqrx 2.1.148-3 (4)
Control and SDR application for the Funcube Dongle software defined radio receiver.
aur/gqrx-git 20130310-1 (7)
Control and SDR application for the Funcube Dongle software defined radio receiver.

En este caso instalamos gqrx-git y eliminamos la dependencia de 'rtl-sdr' en el 'PKGBUILD' de gr-osmosdr-git editando el fichero antes de proceder a compilarlo.

[root@------ ----]# yaourt -S gqrx-git

'PKGBUILD de gr-osmosdr-git'

url="http://sdr.osmocom.org/trac/"
license=('GPL')
depends=('gnuradio' 'swig' 'libuhd')
makedepends=('git' 'cmake')

Una vez hecho esto tendremos ya un front-end para nuestro DVB-T basado en 'gnuradio'.

- SDRSharp.

De igual manera tenemos varias opciones por las que decantarnos y otra de las mejores es 'SDRSharp'.

Para compilarlo en Arch Linux solamente debemos teclear en el intérprete de comandos la siguiente orden:

[root@------ ----]# yaourt -Ss sdrsharp
aur/sdrsharp-svn 1119-1 [installed: 1122-1] (2)
A high performance Software Defined Radio application

[root@------ ----]# yaourt -S sdrsharp-svn

En el 'PKGBUILD' de SDRSharp también eliminaremos el comentario que hace referencia a 'rtl-sdr' como dependencia del mismo:

url="http://sdrsharp.com/"
license=('MIT' 'MS-RSL')
depends=('mono' 'portaudio')
makedepends=('subversion' 'monodevelop' 'icoutils')
source=('sdrsharp.desktop' 'sdrsharp.sh')

Una vez instalado su directorio por defecto se encuentra en la ruta '/opt/sdrsharp' y como dá error de escritura hemos de darle los permisos adecuados para que escriba las configuraciones que deseemos emplear.

Como comentarios adicionales es muy interesante trabajar con aplicaciones sobre radios definidas por software a través de 1/Q ya que nos dan mucho juego, por ejemplo este sencillo comando y sus derivados. De ahí la imaginación de cada uno para aplicarlos:

rtl_fm -f 186285000 -s 22050 - | ./multimonNG -a POCSAG512 -a POCSAG1200 -f alpha -t raw /dev/stdin

--

Sólamente nos queda ya iniciar las aplicaciones y disfrutar de nuestro “nuevo” SDR.

Enlaces de interés:

http://wiki.wifi.ee/index.php/RTL2832U_SDR
http://qi.reddit.com/r/RTLSDR/comments/13l3c4/librtlsdr_recently_added_a...
http://www.kf5dtn.net/?p=2471
http://www.rtlsdr.com/about-rtl-sdr/
http://sdr.osmocom.org/trac/wiki/rtl-sdr
http://inst.eecs.berkeley.edu/~ee123/fa12/rtl_sdr.html
http://rtlsdr.org/softwarelinux
http://sdr.osmocom.org/trac/wiki/rtl-sdr#Buildingthesoftware
http://sdrsharp.com/