Как я пробовал использовать 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 дБ:
Будьте осторожны, во время работы генератор сильно греется.
Прежде, чем перейти к тестированию фильтров, нам нужно записать спектр самого генератора шума безо всяких фильтров, так называемый baseline. Как выяснилось, «The Hobbyist’s Guide to the RTL-SDR» тактично умалчивает о некоторых важных нюансах на этом шаге. Во-первых, аттенюатор нужен обязательно. Без него, по всей видимости, RTL-SDR оказывается перегружен и начинает показывать мусор. Во-вторых, по умолчанию rtl_power использует autogain, то есть, пытается «умно» подстраивать усиление сигнала. Нам это совершенно не подходит, так как в этом случае baseline будет меняться от запуска к запуску.
Экспериментальным образом я выяснил, что при использовании аттенюатора на 20 дБ и gain’е, выставленном в 15 дБ, картинка каждый раз получается более-менее одинаковой:
Сама картинка, построенная в LibreOffice:
Здесь по оси OX — частота в Гц, а по оси OY — мощность в dBm. У вас график может получиться немного другим, в зависимости от версии RTL-SDR, аргументов rtl_power, конкретного экземпляра генератора шума, и других факторов. Главное, чтобы каждый раз она получалась более-менее одинаковой. Как видите, генератор шума заполняет спектр не так уж и равномерно. И/или у RTL-SDR не хватает чувствительности на высоких частотах.
Давайте теперь протестируем какой-нибудь фильтр. Например, такой:
Подключаем его между генератором шума и RTL-SDR, после чего снова запускаем rtl_power. Получаем следующие графики:
Здесь отображен наиболее интересный диапазон частот от 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 функция эта крайне ограниченная, почти что игрушечная. К тому же, полоса пропускания этого осциллографа совершенно не годится для задач, о которых сейчас идет речь.
Метки: SDR, Беспроводная связь, Электроника.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.