# Декодер USP (Спутникс) `satellites/usp_fsk_decoder.grc`, режим `GMSK USP`. Добавлен форком. Декодирует телеметрию аппаратов «Спутникс» в протоколе **USP** (Unified SPUTNIX Protocol). Как и [](geoscan.md), опирается на блоки **gr-satellites**. :::{note} Название «Sputnix» встречается только в сообщениях коммитов. В коде, в имени файла и в строке режима используется «USP». В командной строке режим нужно брать в кавычки — в названии есть пробел: ```sh flowgraph_dispatcher --mode "GMSK USP" --baud 9600 … ``` ::: :::{warning} Требует [gr-satellites](https://github.com/daniestevez/gr-satellites), не объявленного в зависимостях проекта. См. [](../install.md). ::: ## Отличия от Geoscan Файлы структурно идентичны — одинаковый набор параметров, одинаковые переменные, одинаковые ответвления водопада, IQ, UDP и аудио. Различий ровно три: | | Geoscan | USP | |---|---|---| | Дефреймер | `satellites_geoscan_deframer` | `satellites_usp_deframer` | | Порог синхрослова | `threshold=6` | `threshold=8` | | Срез ФНЧ в контуре несущей | `baudrate × 1.75` | `baudrate × 1.5` | | Размер кадра | параметр `frame_size = 74` | не задаётся — определяется протоколом | Всё остальное, включая формулу децимации, тракт аудио и поведение при пустых метаданных, описано на странице [](geoscan.md) и здесь не повторяется. ## Параметры Общий набор (см. [](../dispatcher.md)) плюс `baudrate` (9600) и `rx_freq` (435 МГц). ```python audio_samp_rate = 48000 decimation = max(4, satnogs.find_decimation(baudrate, 2, audio_samp_rate)) ``` Именно ради этого флоуграфа в формулу добавили нижнюю границу `max(4, …)` (коммит «Fix decimation for USP»): без неё при некоторых бодрейтах целочисленная децимация `decimation // 2` в аудио-тракте обращалась в ноль и флоуграф не запускался. Частота после доплеровской компенсации — `baudrate × decimation`. ## Тракт декодирования ``` soapy_source → satnogs_doppler_compensation → doppler_corrected → satellites_fsk_demodulator (iq=1, samp_rate = baudrate·decimation) → satellites_usp_deframer (threshold=8) → zeromq_pub_msg_sink → :zmq_base_port ``` Порог 8 бит несовпадения выше, чем у Geoscan: синхрослово USP длиннее, и более мягкий порог даёт больше захватов при том же уровне ложных срабатываний. ## Формат кадра Как и у Geoscan — только полезная нагрузка: ```json { "pdu": "…base64…" } ``` Дальнейший разбор полей телеметрии — задача принимающей стороны (`soniks-network`), флоуграф отдаёт кадр как есть. ## Отладка ```sh flowgraph_dispatcher --mode "GMSK USP" --baud 9600 --enable-iq-dump=1 \ --iq-file-path=/tmp/.satnogs/data/iq … gr_satellites <имя-спутника> --iq --samp_rate \ --wavfile /tmp/.satnogs/data/iq_cs16_*.raw ``` Прочие типовые отказы — [](../troubleshooting.md).