Страницы

четверг, 30 января 2014 г.

Проба программного приёмника (SDR) из DVB-T адаптера Realtek RTL2832U в Ubuntu

SDR-приёмник - перспективная технология цифрового радио.
Простым пользователям, с некоторых пор, можно недорого попробовать программное радио в работе, благодаря делам энтузиастов.

На аукционе ebay.com (как теперь покупать?) был год назад куплен приёмник цифрового телевидения DVB-T именно для целей программного радио. Можно найти на aliexpress.com и у других китайских товарищей.

Теперь дошла очередь до подключения RTL-SDR к Linux. Проведу несколько экспериментов.

Подключение в Ubuntu 13.10


Как устройство определяется в Ubuntu 13.10:

$ dmesg

...
[34983.059051] usb 3-1: new high-speed USB device number 3 using xhci_hcd
[34983.090097] usb 3-1: New USB device found, idVendor=0bda, idProduct=2838
[34983.090104] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[34983.090108] usb 3-1: Product: RTL2838UHIDIR
[34983.090111] usb 3-1: Manufacturer: Realtek
[34983.090114] usb 3-1: SerialNumber: 00000000
[34983.168308] usb 3-1: dvb_usb_v2: found a 'Realtek RTL2832U reference design' in warm state
[34983.169246] usbcore: registered new interface driver dvb_usb_rtl28xxu
[34983.241594] usb 3-1: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer
[34983.241627] DVB: registering new adapter (Realtek RTL2832U reference design)
[34983.253899] usb 3-1: DVB: registering adapter 0 frontend 0 (Realtek RTL2832 (DVB-T))...
[34983.259745] r820t 8-001a: creating new instance
[34983.272964] r820t 8-001a: Rafael Micro r820t successfully identified
[34983.280850] Registered IR keymap rc-empty
[34983.281011] input: Realtek RTL2832U reference design as /devices/pci0000:00/0000:00:10.0/usb3/3-1/rc/rc0/input11
[34983.281127] rc0: Realtek RTL2832U reference design as /devices/pci0000:00/0000:00:10.0/usb3/3-1/rc/rc0
[34983.287250] IR RC5(x) protocol handler initialized
[34983.287699] IR NEC protocol handler initialized
[34983.292724] IR RC6 protocol handler initialized
[34983.293159] IR JVC protocol handler initialized
[34983.293592] usb 3-1: dvb_usb_v2: schedule remote query interval to 400 msecs
[34983.293794] IR Sony protocol handler initialized
[34983.293857] input: MCE IR Keyboard/Mouse (dvb_usb_rtl28xxu) as /devices/virtual/input/input12
[34983.294358] IR MCE Keyboard/mouse protocol handler initialized
[34983.295742] IR SANYO protocol handler initialized
[34983.298048] lirc_dev: IR Remote Control driver registered, major 250
[34983.300295] rc rc0: lirc_dev: driver ir-lirc-codec (dvb_usb_rtl28xxu) registered at minor = 0
[34983.300299] IR LIRC bridge handler initialized
[34983.308456] usb 3-1: dvb_usb_v2: 'Realtek RTL2832U reference design' successfully initialized and connected


$ lsusb

Bus 003 Device 003: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T

где - "0bda" (VID - vendor id) и "2838" (PID - product id).



Установка GnuRadio


$ sudo apt-get install gnuradio

Также можно установить из исходных кодов, но я выбрал из репозитория, что быстрее.

Сборка из исходных кодов RTL-SDR


Перед сборкой rtl-sdr надо установить пакет libusb-1.0-0-dev, а также иметь установленной утилиту git.

$ sudo apt-get install libusb-1.0-0-dev

Подробно сборка RTL-SDR описана в [1]. Здесь кратко.

Загрузка исходных кодов RTL-SDR. Можно проделать в домашней директории, либо в директории для проектов (у меня ~/dev )

~/dev$ git clone git://git.osmocom.org/rtl-sdr.git
~/dev$ cd rtl-sdr/
~/dev$ mkdir build
~/dev$ cd build
~/dev$ cmake ../
~/dev$ make
~/dev$ sudo make install
~/dev$ sudo ldconfig


Тестирование после сборки

$ sudo rtl_test -t
Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000013

Using device 0: Generic RTL2832U OEM

Kernel driver is active, or device is claimed by second instance of librtlsdr.
In the first case, please either detach or blacklist the kernel module
(dvb_usb_rtl28xxu), or enable automatic detaching at compile time.

usb_claim_interface error -6
Failed to open rtlsdr device #0.

Надо выгрузить модули ядра, привязанные к устройству (это всё же телеприёмник):

$ sudo rmmod dvb_usb_rtl28xxu
$ sudo rmmod rtl2830
$ sudo rmmod dvb_usb_v2

После он напишет:

$ sudo rtl_test -t
Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000000

Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
Sampling at 2048000 S/s.
No E4000 tuner found, aborting.

Откуда становиться понятно, что тюнер "Rafael Micro R820T". Это один из поддерживаемых тюнеров, с диапазоном 24 - 1766 МГц.


Простейшее прослушивание УКВ-радио (FM)


RTL-FM - консольная программа для декодирования FM. Aplay - консольное проигрывание звука.

$ sudo rtl_fm -f 91.5e6 -s 200000 -r 48000 - | aplay -r 48k -f S16_LE

Вывод команды:

Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000000

Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Tuner gain set to automatic.
Tuned to 91800000 Hz.
Oversampling input by: 6x.
Oversampling output by: 1x.
Buffer size: 6.83ms
Sampling at 1200000 S/s.
Output at 200000 Hz.
Воспроизведение Сырые данные 'stdin' : Signed 16 bit Little Endian, Частота 48000 Гц, Моно
недобор!!! (не менее 108,415 мс длинной)

В Петербурге слышно радио на частоте 91.5МГц.


Выводы

- Пока просто приём радио. Что-то больше - это уже радиолюбительство.
- Можно записывать эфир в файл.
- Есть графические программы такие как SDR#, Linradio.


Ресурсы


- Сборка RTL-SDR (en). http://sdr.osmocom.org/trac/wiki/rtl-sdr
- Сборка SDR# (en). http://www.rtlsdr.org/softwarelinux
- Использование программы rtl-fm. http://kmkeen.com/rtl-demod-guide/
- Некоторая техническая информация о микросхеме RTL2832U . http://www.linuxtv.org/wiki/index.php/RealTek_RTL2832U

- Установка и настройка RTL SDR УКВ приёмника в Windows (рус.). http://ua6hjq.qrz.ru/sdr/rtlsdr.htm
- Небольшой план частот. http://ua6hjq.qrz.ru/sdr/rtl-freq.htm

- Встроенные жучки в ноутбуки. http://dangerousprototypes.com/2013/09/04/hp-laptop-security-flaw-discovered-using-rtl-sdr/

1 комментарий:

whatiswrong комментирует...

Отличное введение!