Программно-определяемая радиосвязь

Наблюдение за эфиром: панорама, водопад и автоматический поиск сигналов

Spectro Monitor — приложение для приёма и анализа радиоэфира на SDR-плате. Весь тракт считается локально: от сырых отсчётов до спектра, детектора и записанного фрагмента.

Без облаков и внешних сервисов. Плата отдаёт поток I/Q, всё остальное — на компьютере.

Что умеет

Полный цикл: увидеть, найти, записать, прослушать.

Отображение

Панорама и водопад

Спектр в dBFS с накоплением и режимом максимума, водопад с прокруткой истории. Масштаб по частоте и уровню настраивается на лету.

Поиск

Автоматический детектор

Порог считается не от кадра целиком, а от местного шума вокруг каждого бина — поэтому в находке честно видно, на сколько дБ сигнал выше шума.

Запись

Запись фрагментов

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

Звук

Демодуляция

NFM, WFM и AM. Перенос в основную полосу двухступенчатой децимацией, фильтрация, деэмфазис и подавление постоянной составляющей.

Точность

Калибровка уровня

Опорный тон уводится от собственной линии настройки приёмника, чтобы не мерить юбку собственного гетеродина. Результат — поправка в dBFS.

Диагностика

Журнал и счётчики

Счётчики потока раз в секунду, первые байты до и после преобразователя, предупреждение о пустом фрагменте с уровнем входа.

Как устроен тракт

Отсчёты от платы до звука и файла — четыре ступени.

1

Приём

Плата отдаёт блоки I/Q фиксированного размера. Блоки сразу расходятся двум потребителям: запись берёт их напрямую, обработка — через кольцевой буфер.

2

Спектр

Собственное БПФ по основанию два с окном Ханна: крупное полотно для экрана и компактное для детектора — чтобы поиск не отставал от отрисовки.

3

Детектор

Шум оценивается по процентилю бинов, каждый бин сравнивается с шумом рядом с ним. Находки объединяются по частоте и времени.

4

Обработка

Перенос в основную полосу, фильтрация, демодуляция и запись. Форматы — отсчёты I/Q, звук и спектр.

Из журнала разработки

Реальные истории из отладки — все заметки.

Почему запись приносила одни нули

Поток живой, вход полон отсчётов, а на выходе ноль. Оказалось — шаг гетеродина оставался единицей.

Поиск не видел сильный сигнал

Обход диапазона выбрасывал четверть блока вокруг центра. Разбор сырых блоков показал, что линия центра занимает один бин.

Сорок семь находок вместо одной

Порог считался от кадра целиком, а шум по полосе стоял на десять-двадцать дБ выше. Лечится оценкой местного шума.