В Николаеве работает webSDR-приемник 2метрового диапазона по адресу http://sdr.ur5zhf.com Запущен он на базе OpenWebRX приложения. Подробности настройки можно найти на сайте с исходным кодом https://github.com/simonyiszk/openwebrx

Нас же интересует возможность использования одного sdr-приемника для разных нужд одновременно с работой webSDR сайта. Сегодня попробуем сделать APRS iGate

К счатью ребята из OpenWebRX сделали все правильно и используют микросерверную архитекутру приложения. Если вкратце то софте запускается сервер который потсоединяется по usb к sdr-приемнику и отдает сырые данные по через адрес 127.0.0.1:4951 с помощью netcat, а потом для каждого клиента создается новое соединение в котором декодируется поток в аудиосигнал.

Серверная часть состоит из bash-комманды, где мы видим что слуашается порт 4951 на локальном адресе rtl_sdr -s 2000000 -f 145000000 -p 70 -g 0 -| nmux --bufsize 503808 --bufcnt 100 --port 4951 --address 127.0.0.1

Клиентская часть выглядит сложнее nc -v 127.0.0.1 4951 | csdr convert_u8_f | csdr shift_addition_cc --fifo /tmp/openwebrx_pipe_140160755639360_shift_pipe | csdr fir_decimate_cc 181 0.000828675 HAMMING | csdr bandpass_fir_fft_cc --fifo /tmp/openwebrx_pipe_140160755639360_bpf_pipe 0.0289618970043 HAMMING | csdr squelch_and_smeter_cc --fifo /tmp/openwebrx_pipe_140160755639360_squelch_pipe --outfifo /tmp/openwebrx_pipe_140160755639360_smeter_pipe 5 1 | csdr fmdemod_quadri_cf | csdr limit_ff | csdr old_fractional_decimator_ff 1.00217687075 | csdr deemphasis_nfm_ff 11025 | csdr fastagc_ff 1024 | csdr convert_f_s16 | csdr encode_ima_adpcm_i16_u8

Но принцип простой: `nc -v 127.0.0.1 4951 - открывает соединение с локальным адресом, а дальше через pipe задаются фильтры для DSP библиотеки которая занимается декодирование сырых данных. Подробности комманд можно почитать по адресу https://github.com/simonyiszk/csdr

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

Но прежде нам нужно создать файл sdr.conf к которому будет обращаться direwolf за конфигурацией. Я сохранил его в домашней папке

#
# Sample configuration for SDR read-only IGate. #
# We might not have an audio output device so set to null.
# We will override the input half on the command line. ADEVICE null null
ADEVICE stdin null
ADEVICE - null

CHANNEL 0

# Put your callsign in place of xxx below.
MYCALL YOUR_CALL


# Pick appropriate servers for your geographical region. #
#       noam.aprs2.net
#       soam.aprs2.net
#       euro.aprs2.net
#       asia.aprs2.net
#       aunz.aprs2.net
#

# Change the following line if you are not in North America.
IGSERVER euro.aprs2.net


# You also need to specify your login name and passcode.
# This is the same passcode you would use with any other IGate # application. Contact the author if you can't figure out
# how to generate the passcode.

IGLOGIN YOUR_CALL 123456

# That's all you need for a receive only IGate which relays
# messages from the local radio channel to the global servers.

А вот комманда которая будет слушать эфир и транслировать APRS трафик в интернет.

nc -v 127.0.0.1 4951 | csdr convert_u8_f | csdr shift_addition_cc 0.1 | csdr fir_decimate_cc 181 0.000828675 HAMMING | csdr fmdemod_quadri_cf | csdr limit_ff | csdr deemphasis_nfm_ff 11025 | csdr fastagc_ff | csdr convert_f_s16 | direwolf -c sdr.conf -r 11025 -D 1 -
Запуск DireWolf

Запуск DireWolf

Теперь мы можем из машины по радиостанции транслировать APRS маячок на частоте 144.800МГц и наблюдать такую картинку на сайте http://aprs.fi или любом другом сервисе мониторинга APRS пакетов.