Быстрый старт с RTL-SDR в Linux

Сегодня рассмотрим вариант быстрого старта с RTL-SDR донглами на базе RTL2832 в Linux, немного коснемся софта, сделаем проект простого FM приемника в GNU Radio Companion и рассмотрим некоторые варианты доработок и хаков данного приемника. Знаю, что таких статей в интернете немало, но большинство из них обрывочны или не касаются работы в Linux, так что пусть в блоге будет данный материал как напоминалка, если я что-то забуду со временем.

Небольшая ремарка, я пользуюсь дистрибутивом Elementary OS 5.0 Juno на базе Ubuntu 18.04.2 LTS, поэтому все ниже описываемое будет работать для любых Ubuntu-based дистрибутивов.

Для начала рассмотрим технические характеристики RTL-SDR приемника и как его заставить работать в Linux как можно быстрее. Начнем.

Технические характеристики

  • Частоты приема от 24МГц до 1766МГц
  • 8-битный АЦП
  • Частота дискретизации 3.2MS/s
  • Полоса пропускания 2.4МГц

Установка драйвера для работы RTL-SDR

  • Открываем терминал и переходим в домашнюю директорию пользователя.
  • Обновляем репозитории sudo apt update
  • Устанавливаем необходимые утилиты для сборки драйвера
sudo apt-get install git
sudo apt-get install cmake
sudo apt-get install build-essential
  • Устанавливаем libusb-1.0-0-dev библиотека C, дающая общий доступ к USB устройствам
sudo apt install libusb-1.0-0-dev
  • Получаем и собираем драйвер RTL2832U Osmocom
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr/
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
make
sudo make install
sudo ldconfig
sudo cp ../rtl-sdr.rules /etc/udev/rules.d/
  • Далее нужно внести в blacklist драйвер по умолчанию, который загружается для TV устройства, т.к. он не работает как SDR и будет конфликтовать с новым драйвером. В директории /etc/modprobe.d создаем новый файл blacklist-rtl.conf с одной строкой blacklist dvb_usb_rtl28xxu. После чего необходимо перезагрузить компьютер.
  • Теперь можно проверить работу донгла командой rtl_test -t и получим в терминале вот такую картинку:

Запускаем Gqrx для приема сигналов эфира

Установить программу весьма несложно, инструкция здесь. Настройки приемника максимально простые, я не буду подробно останавливаться на их назначении, потому что данная программа использовалась мной лишь для теста. Просто приложу здесь скриншот настроек:

gqrx rtl sdr

Проверяем на FM диапазоне, если у вас все как на этой картинке, то приемник работает, только не забудьте подключить антенну 🙂

Интересный факт, Gqrx не работает с приемником, включенным через USB2.0 хаб, почему я не выяснил.

В общем то из интересного здесь то, что Gqrx работает на базе GNU Radio — open source инструментария для цифровой обработки сигналов.

Собираем FM приемник в gnuradio-companion

Gnuradio companion (GRC) это программа, которая позволяет в визуальном редакторе собрать схемы обработки сигналов с приемника и прикрутить к ним интерфейс на базе wxWidgets или Qt. Сборка схемы осуществляется базовыми блоками программы. На скриншоте ниже показана, собранная мной, схема обработки сигнала FM и его вывода на звуковую карту моего ноутбука:

Рассмотрим ее немного более подробно. Картинка кликабельна.

Первый блок, который следует добавить в любую схему обработки сигнала, это конечно источник сигнала, из которого будут выбираться отсчеты с определенной частотой дискретизации. Для радиосигнала, это конечно же I и Q квадратуры. В моем случае это RTL-SDR source из категории Sources в правой панели GRC. Настраивается блок двумя переменными samp_rate — частота выборок сигнала, равная 2MS/s, и freq — это частота несущей входного сигнала, я настроился на 102.8МГц.

Настройки блока RTL-SDR source

Для того, чтобы звуковая карта могла что-то принять надо понижать частоту выборок до допустимого значения и делать мы это будем последовательно в нескольких блоках и начнем с блока Rational Resampler (передискретизация с рациональным коэффициентом, находится в разделе resamplers). Понижение частоты выборок осуществляется коэффициентом Decimation (Децимация).

Материал из Википедии

Децима́ция (от лат. decimatio, от decem — «десять») — уменьшение частоты дискретизации дискретного во времени сигнала путём прореживания его отсчётов.

В данном случае будет использоваться коэффициент int(samp_rate/500e3) и в результате получим коэффициент 4. Значение 500e3 было выбрано, исходя из параметра Quadrature Rate демодулятора FM (который устанавливается далее), равного 500ks/s.

Настройки блока Rational Resampler

Далее в категории Filters ищем блок Low Pass Filter (фильтр нижних частот) и вставляем его в нашу схему. Устанавливаем частоту среза в 100кГц с помощью переменной cutoff.

Настройки блока Low Pass Filter

Теперь подключаем демодулятор сигнала FM из категории modulators, который называется WBFM Receive. В нем по умолчанию параметр Quadrature Rate равен 500кГц, таким его и оставим. Также в этом блоке производится еще раз децимация с коэффициентом 10, что уменьшает частоту выборок до 50ks/s.

После демодулятора нужно передать поток данных в звуковую карту, для этого надо уменьшить частоту выборок сигнала до 48кГц, это тот поток, который может обработать любая современная звуковая карта. И снова для этого будем использовать блок Rational Resampler, только теперь также используем параметр Interpolation (интерполяция, предварительное умножение со сглаживанием) с коэффициентом 48.

Multiply Const (умножитель на константу, находится в разделе math operators) позволяет регулировать громкость, путем изменения параметра Constant, который будет связан с графическим элементом QT GUI Range через его id volume.

Настройки QT GUI Range

И последний блок это Audio Sink, принимает в себя поток данных с определенным Sample Rate и выдает их в звуковую карту компьютера.

Я сперва заметил, но не мог понять, почему некоторые коннекторы блоков синие, а некоторые оранжевые, после нашел почему. Синие относятся к комплексным данным (Complex data, которые имеют реальную и мнимую составляющие). Оранжевые коннекторы показывают тип данных Float. И что самое интересное, в настройках блоков можно явно преобразовывать типы данных.

После запуска схемы получаем вот такой интерфейс нашего приемника:

Максимально простой, но послушать радио уже можно.

Некоторые варианты доработок и хаков с RTL-SDR

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

http://superkuh.com/rtlsdr.html — большая подборка всевозможных доработок и хаков.

https://eax.me/r820t2-module/ — использование тюнера R820T2 в своих проектах.

https://tleconte.github.io/R820T/r820IF.html — эксперименты с промежуточной частотой (IF) R820T.

https://eax.me/rtlsdr-spectrum-analyzer/ — используем RTL-SDR в качестве дешевого анализатора спектра.

https://eax.me/rtlsdr-mod/ — здесь описаны несколько очень простых модификаций приемника.

Подписывайтесь на мой канал в telegram, чтобы следить за новыми анонсами, ну и там в целом больше постов, чем в блоге.

4 Ответов в “Быстрый старт с RTL-SDR в Linux

  1. Статья понравилась своей доходчивостью. Хотел подписаться в телеграмме — но не смог.

  2. Для Ubuntu (а может и остальных дистрибутивов) начиная с 20.04 надо не забывать теперь устанавливать sudo apt-get install pkg-config
    Иначе дрова для rtl-sdr не компилируются.

  3. Отличная статья, с пол пинка всё под Debian завелось. Спасибо 🙂

Комментарии отключены.