Как я пробовал использовать RTL-SDR в качестве дешевого анализатора спектра

11 апреля 2018

После прочтения книжки «The Hobbyist’s Guide to the RTL-SDR» мне особенно запомнился эксперимент с RTL-SDR и генератором шума. По сути, эксперимент этот описывает, как можно использовать RTL-SDR в качестве очень дешевого анализатора спектра. В этом режиме устройство может решать задачи вроде проверки фильтров или определения частоты, на которую рассчитана антенна. Соответствующая глава книги доступна онлайн в блоге rtl-sdr.com. Здесь я коротко перескажу идею и поделюсь своими личными впечатлениями от использования RTL-SDR таким образом. Описанные действия с тем же успехом можно повторить для HackRF, LimeSDR и других Software Defined Radio.

Примечание: Если вдруг вы пропустили вводную статью про Software Defined Radio, вот она: Начало работы с LimeSDR, Gqrx и GNU Radio.

Идея заключается вот в чем. Когда вы запускаете Gqrx, то видите в нем какую-то часть спектра. При этом, в один момент времени можно смотреть только на небольшой отрезок частот. Этот отрезок называется полосой пропускания, или bandwidth, и для RTL-SDR составляет 2.4 МГц. А что, если по очереди посмотреть на разные части спектра, и затем склеить результат в одну картинку? Если действовать достаточно быстро, чтобы спектр не успел сильно поменяться, мы увидим весь диапазон доступных нашему устройству частот. Соответствующее сканирование частот с помощью RTL-SDR выполняет утилита rtl_power из пакета rtl-sdr. Для всех остальных SDR существует утилита rx_power из пакета rx_tools.

Хорошо, но причем тут какие-то генераторы шума? А вот причем. Цель этих устройств — достаточно равномерно заполнить весь спектр шумом. А если поставить между генератором и RTL-SDR какой-то фильтр, то мы узнаем, какую часть спектра этот фильтр глушит, и насколько сильно. Подходящий для наших целей генератор можно найти на eBay по запросу «bg7tbl noise source». Цена устройства составляет около 18$.

Дополнение: См также заметку Генератор шума: теория и практика.

На следующем фото показан генератор шума, подключенный к RTL-SDR v3 через аттенюатор на 20 дБ:

RTL-SDR v3 соединенный с генератором шума

Будьте осторожны, во время работы генератор сильно греется.

Прежде, чем перейти к тестированию фильтров, нам нужно записать спектр самого генератора шума безо всяких фильтров, так называемый baseline. Как выяснилось, «The Hobbyist’s Guide to the RTL-SDR» тактично умалчивает о некоторых важных нюансах на этом шаге. Во-первых, аттенюатор нужен обязательно. Без него, по всей видимости, RTL-SDR оказывается перегружен и начинает показывать мусор. Во-вторых, по умолчанию rtl_power использует autogain, то есть, пытается «умно» подстраивать усиление сигнала. Нам это совершенно не подходит, так как в этом случае baseline будет меняться от запуска к запуску.

Экспериментальным образом я выяснил, что при использовании аттенюатора на 20 дБ и gain’е, выставленном в 15 дБ, картинка каждый раз получается более-менее одинаковой:

rtl_power -f 24M:1766M:1M -1 -g 15 baseline.csv

Сама картинка, построенная в LibreOffice:

Baseline генератора шума

Здесь по оси OX — частота в Гц, а по оси OY — мощность в dBm. У вас график может получиться немного другим, в зависимости от версии RTL-SDR, аргументов rtl_power, конкретного экземпляра генератора шума, и других факторов. Главное, чтобы каждый раз она получалась более-менее одинаковой. Как видите, генератор шума заполняет спектр не так уж и равномерно. И/или у RTL-SDR не хватает чувствительности на высоких частотах.

Давайте теперь протестируем какой-нибудь фильтр. Например, такой:

Bandstop фильтр от RTL-SDR.com

Подключаем его между генератором шума и RTL-SDR, после чего снова запускаем rtl_power. Получаем следующие графики:

Ослабление сигнала bandstop фильтром

Здесь отображен наиболее интересный диапазон частот от 40 МГц до 160 МГц, так как на другие частоты, как выяснилось, фильтр особо не влияет. Вверху показаны данные, полученные с помощью rtl_power без фильтра (синим цветом) и с фильтром (красным цветом), а внизу — разность двух графиков. Вроде, получилось похоже на правду, фильтр действительно должен вырезать частоты где-то в этом диапазоне. Как я понимаю, RTL-SDR не видит ничего, что ниже -35 dBm, поэтому график получился со срезанной верхушкой.

Из статьи на rtl-sdr.com вы также узнаете, как сделать notch filter для заданной частоты из куска коаксиального кабеля, как определить коэффициент укорочения использованного вами кабеля, и как определить частоту, на которую настроенна антенна, при помощи направленного ответвителя (directional coupler).

Для себя же я пришел к следующему выводу. Лабораторная работа получилась занятной, но постоянно пользоваться RTL-SDR в таком режиме решительно неудобно. Один запуск rtl_power занимает около двух минут. Затем еще нужно открыть LibreOffice, построить в нем графики, понять, что получается какая-то ерунда, и повторить все с другими аргументами. Есть интересный проект qspectrumanalyzer, который пытается автоматизировать часть этих действий. Но на момент написания этих строк программа работала так нестабильно, что проще уж через rtl_power.

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

Fun fact! Некоторые осциллографы, в частности, Rigol DS1054Z, умеют делать преобразование Фурье (FFT), что тоже показывает спектр. Увы, конкретно в DS1054Z функция эта крайне ограниченная, почти что игрушечная. К тому же, полоса пропускания этого осциллографа совершенно не годится для задач, о которых сейчас идет речь.

А используете ли вы анализаторы спектра, КСВ-метры или что-то подобное, и если да, то какие?

Метки: , , .