Как из видеоадаптера сделать SDR-передатчик

Как из видеоадаптера сделать SDR-передатчик

Утилита Osmo-fl2k превращает любой адаптер с USB на VGA за 15 долларов в SDR-передатчик, который позволяет вещать в диапазонах FM-радио и телевидения DTV, подделывать сигнал GPS или симулировать базовую станцию UMTS. Хороший инструмент для розыгрыша друзей и других веселых применений. В этой статье мы поговорим о том, как такое вообще возможно, и разберем необходимые шаги, которые позволят из старого видеоадаптера сделать SDR-передатчик, способный захватывать FM и спуфить GPS

В статье были использованны материалы презентации автора утилиты Стива Маркграфа, которую он представил на OsmoDevCon 2018, статьи в вики Osmocom и заметки Томаса Си в блоге Hackernoon. Перевод от Андрея Письменного.

SDR-приемники в последнее время заметно упали в цене, да и SDR с возможностями передатчика тоже дешевеют, но все еще могут обойтись в сотни долларов, как, например, Hack-RF. Инструмент Osmo-fl2k позволяет использовать переходник USB 3.0 на VGA, основанный на чипе Fresco Logic FL2000 в качестве ЦАП общего назначения и SDR-передатчика. Стоят данные переходники в районе 5 долларов за штуку. Благодаря проекту Osmo-FL2K можно генерировать непрерывный поток семплов и избегать интервалов горизонтальной и вертикальной синхронизации.

Несмотря на то что выходной сигнал слаб, его более чем достаточно для того, чтобы захватить частоту FM на расстоянии нескольких метров или изобразить сигнал спутника GPS, который обычно проходит сотни тысяч километров.

Использовать передатчик с FL2000 с незафильтрованным выходом ЦАП и присоединенной антенной за пределами экранированного помещения незаконно без лицензии. Вся ответственность за неосторожное использование описанного устройства будет лежать на вас. Подробнее о предосторожностях — в конце статьи.

Предыстория

За идеей использовать адаптер VGA в качестве передатчика — длинная история.

  • В 2001 году Эрик Тьель выпустил программу Tempest for Eliza, которая передает сигнал в диапазоне AM.
  • В 2005 году Фабрис Беллар использовал видеокарту ATI Radeon 9200SE, чтобы передавать видеосигналы DVB-T, PAL и NTSC.
  • Позже, в 2009 году, Бартек Каниа опубликовал VGASIG — программу, которая позволяет передавать FM-радио в режиме реального времени при помощи SDL и обычной видеокарты.
  • В 2013 году siro использовал все три выхода ЦАП карты VGA и присоединенного модулятора ввода-вывода, чтобы передавать любые сигналы.

Главный недостаток при использовании обычной видеокарты в том, что сигнал, который генерирует RAMDAC, не до конца подконтролен пользователю. Вызывается это тем, что VGA использует горизонтальное и вертикальное запирание, которое прерывает сигнал. В отличие от конкурентов, производящих устройства DisplayLink, которые скорее напоминают обычные видеокарты с интерфейсом USB 2.0/3.0, во Fresco Logic избрали другой подход и, кстати, запатентовали его.

Вместо того чтобы встраивать фреймбуфер для ЦАП VGA в само устройство, они использовали память компьютера и непрерывно посылают данные по USB. Это делает адаптеры особенно дешевыми, поскольку они состоят из единственного чипа без памяти под фреймбуфер. Главный недостаток, конечно, в том, что на это тратятся ресурсы процессора и шина USB оказывается забитой. Это приводит к пропуску кадров и миганию экрана.

Разреверсив USB-протокол FL2000 в 2016 году, Стив Маркграф экспериментальным путем обнаружил, что возможно использовать FL2000 таким образом, чтобы горизонтальная и вертикальная синхронизация отключалась. Это дает возможность слать непрерывный поток семплов. Эта работа и стала основой для Osmo-fl2k, которая позволяет передавать слабосильные сигналы FM, DAB, DVB-T, GSM, UMTS и GPS.

Поддерживаемое железо

Для наших экспериментов, как ты понимаешь, подходит далеко не любой конвертер. Пройдемся по вариантам.

Донглы USB 3.0 на VGA

Поддерживаются только устройства с чипом Fresco Logic FL2000. Обычно они маркируются как адаптеры USB 3.0 на VGA с поддержкой разрешения 1920 × 1080 по USB 3.0 и 800 × 600 по USB 2.0. Иногда бывает написано, что максимальное разрешение — 1920 × 1200, но этот режим работает только с некоторыми контроллерами xHCI при включенной компрессии RLE.

Если на коробке написано, что максимальное разрешение 2048 × 1152, и заявлена поддержка macOS либо только интерфейс USB 2.0, то внутри будет чип DisplayLink, который несовместим с Osmo-fl2k.

Цены на адаптеры с FL2000 варьируются в пределах 5–15 долларов, а девайсы с DisplayLink стоят 25 долларов и более. Также заметь, что в устройствах с коннектором USB-C другой чипсет (например, Realtek RTD2166) и это всего лишь конвертеры с DisplayPort на VGA.

Найти нужный адаптер можно на AliExpress, eBay или Amazon. Устройства бывают разных размеров, иногда заодно поддерживают DVI или HDMI. Ниже — два наиболее типичных вида устройств.
Как из видеоадаптера сделать SDR передатчик

Как из видеоадаптера сделать SDR передатчик

Донглы USB 3.0 на HDMI

Если тебе удалось раздобыть только адаптер VGA с USB 3.0 и HDMI, а внутри у него FL2000-1Q0-DX (тот же чип в более крупном корпусе с 88 ножками и параллельным выводом RGB) и ты не постесняешься припаять контакты к блокам QFN с планарными выводами, то тебе пригодится распиновка ЦАП VGA, приведенная ниже.
Из видеоадаптера сделать SDR

Во всех адаптерах с USB 3.0 на HDMI, основанных на FL2000, стоит регулятор напряжения на 1,2 В, и он, похоже, используется не только чтобы задавать опорное напряжение для ЦАП.
Из видеоадаптера SDR

Сравнение хостовых контроллеров USB

Megasamples показывает, что производительность SDR/ЦАП в секунду зависит от контроллера xHCI на компьютере. Ниже приведены результаты замеров, можешь ими руководствоваться.

Измерить производительность твоего контроллера USB ты можешь командой

В результате получается что-то такое:

В этом примере система не может выдать устройству больше, чем 157 мегасемплов в секунду (если помножить на три канала ЦАП, то выйдет 471 мегасемпл в секунду). Можешь снова запустить fl2k_test, задав более низкую частоту, чем та, что была определена как максимальная, и посмотреть, насколько стабильно все будет работать.

Ниже — таблица с результатами на разных контроллерах.

Контроллер USB 3.0 Достижимая частота семплирования
Intel Corporation 8 Series USB xHCI HC (rev 04) 157 MS/s
Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller (rev 04) 157 MS/s
Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03) 157 MS/s
Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller (rev 21) 155 MS/s
Samsung Galaxy S5 msm-dwc3 (на Synopsys DesignWare USB3.0 IP) 148 MS/s
Odroid XU4 (на Synopsys DesignWare USB3.0 IP) 147 MS/s
ASMedia Technology Inc. ASM1142 USB 3.1 Host Controller 140 MS/s
Fresco Logic FL1100 USB 3.0 Host Controller (rev 10) 140 MS/s
Fresco Logic FL1100 USB 3.0 Host Controller (rev 01) 136 MS/s
Fresco Logic FL1009 USB 3.0 Host Controller (rev 02) 136 MS/s
Etron Technology, Inc. EJ188/EJ198 USB 3.0 Host Controller 129 MS/s
VIA Technologies, Inc. VL805 USB 3.0 Host Controller (rev 01) 123 MS/s
Etron Technology, Inc. EJ168 USB 3.0 Host Controller (rev 01) 117 MS/s
Renesas Technology Corp. uPD720202 USB 3.0 Host Controller (rev 02) 115 MS/s
Intel USB 2.0 EHCI Controller 14 MS/s

Ботлнек PCI Express на старых системах

Если USB 3.0 на твоей машине реализован при помощи какой-то карты, в особенности если это ExpressCard на ноутбуке, то узким местом может быть не USB 3.0, а сама шина PCI-E. Проверить это можно командой lspci -vv.

Вывод будет примерно следующим.

Здесь важно содержимое регистра LnkSta. В этом случае связь PCI Express работает на скорости 2,5 гигатранзакции в секунду вместо полных 5 гигатранзакций в секунду, которые нужны для USB 3.0.

Установка

Чтобы работать с Osmo-fl2k, первым делом скачиваем исходники. Тут есть два варианта:

  • на вебе по адресу http://git.osmocom.org/osmo-fl2k;
  • репозиторий с доступом только на чтение: git://git.osmocom.org/osmo-fl2k.

Чтобы скомпилировать код, нужно сначала поставить заголовки libusb, если у тебя их еще нет в системе. Если у тебя Debian-образный дистрибутив, то пиши

Теперь можно компилировать.

Прежде чем использовать устройство под пользовательским аккаунтом, нужно загрузить правила udev.

Как пользоваться Osmo-fl2k

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

Рилтаймовое вещание WBFM

Благодаря fl2k_fm можно передавать вывод звуковой карты в широком диапазоне FM. Для этого нужно поставить SoX и pv.

Для начала нужно узнать название монитора аудиовыхода:

Результат будет примерно такой:

Чтобы передавать выход аудио как моно WBFM на частоте 95 МГц, можешь ввести такую команду:

SoX будет применять к аудио фильтр нижних частот 15 кГц, конвертировать стерео в моно и обеспечивать предусиление (с фильтром biquad). Утилита pv обеспечивает дополнительную буферизацию — это опциональная вещь.

Чтобы вещать стерео WBFM при помощи RDS, можешь использовать такую команду:

Теперь SoX ресемплирует аудио в 228 кГц — это нужно для модулятора RDS.

Утилита fl2k_fm принимает 16-битные «сырые» семплы PCM.

Трансляция GSM

Потоковые графы GNU Radio, равно как и немодулированные семплы, которые нужны для трансляции GSM и UMTS, можно найти в репозитории fl2k-examples.
Из видеоадаптера SDR

Юридические аспекты (не засоряй частоты!)

Если ты уже используешь любой радиопередатчик, в особенности самодельный или SDR, стоит полагать, что ты знаком с юридическими и этическими аспектами радиопередач. Не используй передатчик, пока у тебя есть сомнения относительно легальности. В большинстве случаев тебе потребуется как минимум радиолюбительская категория.

Сырой, нефильтрованный вывод ЦАП будет содержать многие гармоники, кратные немодулированной частоте. Именно это креативно эксплуатируется в Osmo-fl2k, чтобы генерировать сигнал гораздо более высокой частоты, чем можно было бы получить при помощи ЦАП на 165 МГц без преобразования с повышением частоты. Однако это значит еще и что частотный спектр будет содержать не только нужную гармонику, но и все низшие гармоники, равно как и немодулированную частоту.

Прежде чем что-либо передавать при помощи FL2000, рекомендуем проверить получаемый спектр анализатором и применить фильтрацию, чтобы подавить все частоты, кроме той, на которой предполагается передавать.

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий