SDR-- превращает вчерашний эфир в тест, который ловит поломки DSP
После правки FIR вчерашний AIS-фрагмент перестал декодироваться. Поймать ровно ту же передачу, с тем же уровнем, замиранием, частотной ошибкой и соседними помехами, уже нельзя: эфир ушёл дальше. SDR-- предлагает сохранить этот момент как файл и сделать его постоянным свидетелем ошибки.
В проекте IQ-запись проходит через тот же тракт, что и поток от приёмника. Файл SigMF становится virtual device: дальше его можно подать в DDC, демодулятор и декодер, сравнив результат с заранее известным набором сообщений. Это физически содержательный тестовый стимул, где в одном файле остаются реальные помехи, форма сигнала и дефекты конкретного приёма. В fixtures уже есть 200-миллисекундная запись ADS-B, принятая RTL-SDR с частотой дискретизации 2 MS/s. Для FT8 тест сверяется с 20 сообщениями эталонного декодера; текущая интеграция извлекает 19 из 20. Неполное совпадение здесь выглядит полезнее красивой галочки: граница известна и останется видимой после следующей правки.
Тот же IQ, тот же тракт, другой день
SDR-- строится вокруг Rust-сервера, который держит приёмник и исполняет DSP, и клиента на React. Сервер можно запустить рядом с антенной либо на той же машине, а интерфейс открыть в браузере; desktop-версия использует тот же сервер через Tauri WebView. На Patch canvas пользователь протягивает связи от device IQ к каналу, аудио, событиям или видео. В Rack view остаются закреплённые ручки частоты, усиления, фильтров и других нужных параметров. Такой рисунок полезен не декоративностью: он показывает, где один широкий IQ-поток раздваивается на несколько независимых каналов с собственными DDC и декодерами.
Внутри графа данные не должны бесконтрольно накапливаться. Документация описывает ограниченные очереди и backpressure, а для горячего DSP-пути заявлены отсутствие выделений памяти и I/O. Управляющие сообщения идут отдельно от потока данных, браузерное аудио передаётся через Opus. Есть native backends для RTL-SDR, HackRF, Airspy, AD936x через iiod, SDRplay и других устройств, также предусмотрены SoapySDR, rtl_tcp и SpyServer. Записывать можно device IQ, baseband канала и аудио.
У эфира появляется память
Самая сильная часть проекта — не графический патчинг, хотя он делает сложный тракт читаемым. Это fixture-first отношение к приёмнику. DSP проверяется analytic и golden vectors, декодеры — записанным IQ с ожидаемым выходом, затем virtual-device тесты собирают путь целиком. Документированы команды для проверки, тестов и browser smoke flow. Редкая для SDR деталь превращает фразу «у меня вчера декодировалось» в воспроизводимый артефакт, который можно положить в CI.
Графу ещё нужны измерения
Готовность каналов пока разная. ADS-B и POCSAG помечены как проверенные в эфире; AIS, APRS, FT8, SSTV и ряд других режимов прошли fixture-проверки; DAB, DATV, DRM, GNSS и часть навигационных декодеров остаются экспериментальными. Fixture не моделирует весь набор неприятностей реального радиоканала: доплер, многолучёвость, перегрузку фронтенда и случайную рассинхронизацию. Заявлений о числе параллельных каналов, CPU load, задержке и предельной полосе автор пока не подкрепил независимыми измерениями.
Графу ещё нужны измерения
Релиз v1.1.3 от 15 сентября 2026 года уже содержит пакеты для Windows, Linux и macOS. Есть и ранние сообщения о проблемах совместимости под Windows с отдельными RTL-SDR и SoapySDR-устройствами. Поэтому SDR-- рано считать универсальной заменой зрелым монолитным приёмникам. Зато он показывает более интересную инженерную форму SDR: приёмник становится сетевым DSP-узлом, его соединения видны на экране, а кусок настоящего эфира способен навсегда остаться тестом для будущего кода.