GNU Radio в WebAssembly принял RTL-SDR по WebUSB прямо в браузере
USB-донгл RTL-SDR лежит рядом с ноутбуком, вкладка просит разрешение на доступ к устройству, и через секунду на экране уже течёт waterfall. В той же вкладке можно собрать приёмник, спектроанализатор или ADS-B flowgraph, подать поток с железа и посмотреть созвездие. Независимый тест подтвердил такую работу с RTL-SDR Blog V3 и V4.
Тракт выглядит почти вызывающе коротким: USB SDR → WebUSB → GNU Radio в WebAssembly → DSP-блоки → FFT → waterfall. GNU Radio World исполняет обработку локально в браузерной sandbox: это не удалённый GNU Radio server с веб-панелью. DSP-часть GNU Radio и Qt GUI sinks собраны в WASM, поэтому спектр, водопад и constellation рождаются на машине пользователя.
GNU Radio исполняется внутри вкладки
Редактор открывает и сохраняет обычные .grc-файлы, а рядом с живым USB-входом умеет брать заранее записанные IQ и SigMF. Получается необычный способ передать лабораторную работу: достаточно прислать flowgraph и запись эфира, либо попросить открыть ссылку и выдать странице доступ к донглу. PySDR уже встраивает такие интерактивные схемы в главы про FFT, фильтрацию, цифровые модуляции, RRC и синхронизацию.
Разработчик также заявляет WebUSB-поддержку HackRF и PlutoSDR. Для этих двух устройств независимого аппаратного испытания в доступных материалах пока нет; с RTL-SDR ситуация заметно прочнее, поскольку внешний тест показал приём ADS-B и работу спектроанализатора с V3 и V4. Полной матрицы совместимости по браузерам, ОС, ревизиям SDR, sample rate, режимам TX/RX и длительным USB-потокам проект пока не публикует.
Где WebUSB упирается в песочницу
Цена такого фокуса видна в границах браузерной песочницы. Общего Python runtime здесь нет: Python-only blocks и hierarchical blocks требуют C++-замен, а Embedded Python Block через Pyodide работает с ограничениями, включая отсутствие message handling и stream tags. Блоки, которым нужны сетевые сокеты или произвольный host I/O, исключены либо остаются неактивными; сетевые SDR поэтому пока не входят в этот сценарий.
Производительность тоже остаётся инженерным компромиссом, а не магией вкладки. В авторском сравнении на Ryzen 7 PRO 6850U decimating FIR с 101 tap обработал 12.1 Msps в GNU Radio World против 24 Msps в нативном GNU Radio. Для 1.001 tap получились 1.37 и 4.6 Msps. Это не универсальный benchmark, однако цифры показывают важную границу: браузер уже годится для многих учебных и приёмных задач, а запас нативного тракта всё ещё ощутим на тяжёлой фильтрации.
Ссылка становится частью SDR-стенда
Самая красивая часть проекта лежит между USB-разъёмом и ссылкой. Веб-инструменты давно умеют рисовать кнопки для приборов; здесь вкладка получила доступ к реальному радиотракту и самостоятельно прогоняет IQ через знакомый GNU Radio flowgraph. Для демонстрации алгоритма, лабораторной работы или быстрого RF-эксперимента установка окружения перестаёт быть отдельной задачей.