Антенно-фидерный тракт выглядит сейчас так.

На данный момент установлено низкое разрешение fft (5000 отсчетов), связано это с багом openwebrx при котором при сравнительно высокой нагрузке водопад fft случайным образом смещается в сторону. На моем сервере при fft больше 7000 отсчетов это происходит уже при одновременно работающих трех приемниках. По словам разработчика это связано с переполнением кольцевого буфера, как только это поправят я увеличу разрешение. Также установлена сравнительно низкая скорость fft, 4 строчки в секнду. Это во-первых снижает нагрузку и на сервер, и требуемую скорость интернета для нормальной работы с радио, а во вторых, несмотря на непривычность такой скорости так проще отслеживать источники сигнала ведущие редкую нерегулярную передачу (RDARA, активность радиопиратов, каналы морской связи на кв), тем более что при зуме fft информация в неотображаемых частях спектра не теряется, как у kiwisdr.



Железо
Сначала WEB-SDR работал на raspberry pi 4 и приемнике boss sdr (клоне SDRPlay RSP1a). Использовался готовый образ SD карточки Openwebrx для RPi4.



Практика показала что полоса 8 мгц сжирает 55% мощности для первого клиента + 15% для каждого следующего. То есть 4 клиента, дальше лаги.

Посему решено было поставить миникомпьютер помощнее и дешевле (Rockpi 4a на rk3399) и купить несколько RTL-SDR и выбрать на них наиболее интересные участки кв диапазона шириной по 2,5мгц. На входе стоит апконвертер, его выход идет на трансформаторный делитель на 3 приемника. На данный момент физически подключено 2 РТЛки (что меняет сопротивление нагрузки смесителя и разбалансирует его, но WHO GIVES A SHIT?).








Поскольку RTL-SDR идет с дефолтным серийником 00000001 то при запуске нескольких приемников возникают проблемы.
Можно записать серийники прямо через консоль лнукса на одноплатнике командой rtl_eeprom -s XXXXXXX (x-серийный номер).

В винде можно сменить серийник с помощью rtl1090:
Создаем ярлык для программы, заходим в свойства ярлыка и в поле "объект" дописываем после пробела /EEPROM , сохраняем и запускаем.


Жмыхаем старт






Забиваем приемнику серийник (желательно и в старшх разрядах что-то забть), жмем continue и еще дальше несколько раз "ОК".

Либо на одноплатнике втыкая по одному и забивая командой rtl_eeprom -s XXXXXXXX
Либо если воткнуты через хаб то
rtl_eeprom -d n -s XXXXXXXX где n - порядковый номер, начинается с нуля


И все. Можем пользоваться несколькими одновременно.



Настройка на одноплатнике не совместимом с raspberry pi

Нужен curl
sudo apt install curl

ставим докер
curl -sSL https://get.docker.com | sh

ставим OpenWebRx
sudo docker pull jketterl/openwebrx-full:stable
sudo docker volume create openwebrx-settings

Отключаем мешающие драйвера. Редактируем файл
sudo nano /etc/modprobe.d/blacklist.conf

добавляем в конец строчки
blacklist dvb_usb_rtl28xxu
blacklist sdr_msi3101
blacklist msi001
blacklist msi2500
blacklist hackrf
выход из редактора - Ctrl+O, Enter - сохранить файл, Ctrl+Х закрыть редактор

Чтобы приемник запускался автоматом после включения одноплатника достаточно ввести один раз
sudo docker run --restart always --name OPENWEBRX --device /dev/bus/usb -p 8073:8073 -v openwebrx-settings:/var/lib/openwebrx jketterl/openwebrx-full:stable

перезагружаем
sudo reboot

создаем аккаунт для веб-интерфейса приемника (доступ к настройкам на веб-странице радио)
sudo docker exec -it OPENWEBRX bash
python3 openwebrx.py admin adduser username

На Rock Pi 4 A rtl-sdr полосой 2.8 МГц первый клиент загружает проц на 11%, каждый следующий - 4%
SDRPlay пока не смог запустить, хотя вроде должен.

Несколько одновременно работающих приемников на одном сервере можно сделать настроив отдельные устройства с разными серийными номерами, создав каждому по одному профилю.

Добавляем устройство, в настройках:



Выбираем rtl-sdr через soapy


В настройках приемника Settings/SDR device settings/Device settingsкаждого приемника нужно добавить параметр device identifier.

Additional optional settings>device id вида serial=xxxxxxxx






Одновременная работа двух приемников на одном сервере.


Переключаются приемники в меню приемника, как ни странно


Прикольная фишка Openwebrx-декодирование любительской цифры (не всей, но есть например экзотическая мода FreeDV - цифровая передача голоса)


Показ на карте локаторов в некоторых модах, втч APRS


Прием метеотелетайпа 10100кгц,


И прием метеофаксов


При желании можно запустить несколько серверов.

Для второго делаем
sudo docker volume create openwebrx-settings1

sudo docker run --restart always --name OPENWEBRX1 --device /dev/bus/usb -p 8074:8073 -v openwebrx-settings1:/var/lib/openwebrx jketterl/openwebrx-full:stable

sudo docker exec -it OPENWEBRX1 bash
python3 openwebrx.py admin adduser username

27.01.2023 приемник переделан, изменена схема и частота преобразования апконвертера кв, добавлен диплексер кв-укв, поставлены буфрные усилители на укв и после конвертера.






UPD
Так как укв внутри сдрки оказался невостребован я переделал фильтры. 0-22мгц идет на апконвертер, 25-30 мгц отдельный напрямую на сдрку работающую на сиби, улучшение заметно невооруженным глазом.
КВ фнч


Полосовик си-би


Монтажжжж


Пути развития.
Ну всегда можно купить киви сдр. 30 мгц полосы, но есть не одно но.

1 демодуляция и отризовка FFT производится FPGA, ресурсы которой не бесконечны. Либо 4 пользователя с панорамой, либо 16 без панорамы, если я не ошибаюсь, с кучей вариантов между этими.
2 Стоит почти 40к на алике. При этом админы nothern utah sdr называют приемник чудовищным. 12 бит на 30 мгц полосы-очень смело.

Есть заманчивый вариант купить rx888 (16 бит 128MSPS) и подключить к Openwebrx, но даже для одного пользователя работа приемника потребует чудовищных вычислительных ресурсов, а веб-сдр пользуется обычно не один человек. Хотя стоимость rx888 (12к) плюс какой-нибудь хуанан с серверным камнем, памятью на 16 гигов (от 8к) будут стоить дешевле кивисдр, парадокс!
Но есть еще один минус у rx888. Дров под линукс нет, и с веб-сдр его не скрестить никак. Да и сам вебсдр написан не очень эффективно.


Вариант с поддерживаемым openwebrx redpitaya\trx-duo тоже так себе, судя по всему устройство может одновременно работать в 8 полосах по 192кгц шириной.



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

Также мне не удалось завести AirspyR2 (клон) при полосе 8мгц.

Судя по всему наиболее рациональный вариант сейчас-накупить дешевых клонов rsp1a (штук 6) благо они около 1.1к стоят на алике (были вообще по 700), вот таких:

И воткнуть их через диплексеры с полосой по 6 мгц (у них разрядность зависит от полосы, 10 мгц вообще на 8 бит работает), минус по полмегагерца на скаты встроенных в тюнер фильтров, в итоге 5 мгц полосы на приемник, итого 6 радио перекроют весь кв. 7 тысяч на приемник, плюс на сервер какой-то дешевый пк.
Интересная страничка старого вебсдра, админы описывают железо Northern Utah WebSDR - Landing Page (sdrutah.org)

Процесс пошел, куплен USB3 хаб и 4 клона RSP1a. Посчитан мультиплексер.


Приемник перенесен на x86_64. Четыре приемника rsp1 через вч делитель. Полоса 8msps, 12 bit. Перекрывают от 1,5 до 30 мгц. При старте одного приемника и одного клиента нагрузка на core i3-4130 - 40%, но как ни странно при запуске всех четырех приемников параллельно (по одному пользователю на приемник) возрастает до 70%. Следующий пользователь на уже активном приемнике добавляет 1-2% нагрузки.
Попробую достать xeon на 1150 сокет, интересно как будет параллелитьься нагрузка там.
Нагрузка core i3-4130


для сравнения нагрузка rk3399


core i3-4130, 4g ram
один приёмник нагружает систему на 42%
второй пользователь на приёмнике добавляет 1-2%
четыре приемника нагружают на 77% (но это очень неточно, ингода второй приёмник даже не добавляет нагрузки)

rk3399 4g ram
один приёмник нагружает систему на 38%
второй пользователь добавляет 7-8%
второй приёмник добавляет 39%
три приемника уже тянет с тормозами


Размещение в корпусе


Плата защиты входа и деления сигнала, на входе разрядник на 70 вольт, высоковольтный разделительный конденсатор, затем встречные диоды 1N4001


USB кабели воткнуты в отдельные порты, через хаб приемники не включить - даже для пары приемников не хватит пропускной способности, а USB3 и USB2.0 шины не взаимодействуют, то есть USB3 хаб будет работать с USB2 устройствами как хаб USB2.


Если использовалась убунта с этого сайта то процесс установки нужно пропустить, там уже стоят драйвера и сам openwebrx.

Оригинал инструкции OpenWebRX+ Package Repository | ppa (luarvique.github.io)
Установка
sudo su
apt install gpg (вроде его в убунте нет по дефолту)
Добавляем репозитории
wget -O - https://luarvique.github.io/ppa/openwebrx-plus.gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/openwebrx-plus.gpg
echo "deb [signed-by=/etc/apt/trusted.gpg.d/openwebrx-plus.gpg] https://luarvique.github.io/ppa/ubuntu ./" > /etc/apt/sources.list.d/openwebrx-plus.list
apt update
wget -O - https://repo.openwebrx.de/debian/key.gpg.txt | gpg --dearmor -o /usr/share/keyrings/openwebrx.gpg
echo "deb [signed-by=/usr/share/keyrings/openwebrx.gpg] https://repo.openwebrx.de/ubuntu/ jammy main" > /etc/apt/sources.list.d/openwebrx.list
apt update
apt install openwebrx
В процессе установки система попросит поставить пароль к веб-интерфейсу настроек приемника, имя пользователя сменить сейчас нельзя.

Блокируем драйвера
nano /etc/modprobe.d/blacklist.conf
добавляем в конец открывшегося файла строчки
blacklist dvb_usb_rtl28xxu
blacklist sdr_msi3101
blacklist msi001
blacklist msi2500
blacklist hackrf
сохраняем
ctrl+o
enter
закрываем редактор
ctrl+x

установка драйвера sdrplay
wget https://www.sdrplay.com/software/SDRplay_RSP_API-Linux-3.07.1.run
chmod 755 ./SDRplay_RSP_API-Linux-3.07.1.run
./SDRplay_RSP_API-Linux-3.07.1.run
apt install soapysdr-module-sdrplay3

необязательно, удаление модуля miri (старый linux драйвер для тв-тюнеров на базе микросхем на которых делается SDRPlay)
apt purge soapysdr0.8-module-mirisdr

Проверим видит ли soapy наш sdrplay
SoapySDRUtil --find
Пример вывода с обрезанной лишней информацией, подключено 3 устройства, серийный номер при работе soapy зависит от того к какому порту подключен клон sdrplay
.......
Found device 6
  driver = sdrplay
  label = SDRplay Dev0 RSP1 B0003P0001
  serial = B0003P0001

Found device 7
  driver = sdrplay
  label = SDRplay Dev1 RSP1 B0003P0003
  serial = B0003P0003

Found device 8
  driver = sdrplay
  label = SDRplay Dev2 RSP1 B0003P0002
  serial = B0003P0002

Все, стоит сохранить серийники (если приемников больше одного) и идти в веб-интерфейс настраивать радио.

Дополнительно.
Если компьютер будет работать именно как сервер, и рабочий стол не нужен то можно управлять загрузкой графической оболочки командами ниже (требуется перезагрузка)
отключение рабочего стола (консоль будет доступна)
sudo systemctl set-default multi-user
вернуть рабочий стол
sudo systemctl set-default graphical

У меня была проблема: openwebrx теряет приемник после выключения\включения питания но после перезагрузки sudo reboot - работает.
Проблема оказалась где-то на стыке usb3 драйверов, sdrplay и soapy. Если я отключал в BIOS XHCI полностью - радио работало после выключения-включения питания, но нельзя было одновременно запустить приемники включенные в соседние порты на материнке (на ней всего 2 EHCI контроллера, и их пропускной способности хватает только на 2 приемника в режиме 8MSPS 12 bit). Если я включах XHCI в любом режиме (enabled, manual, auto, smar auto) и с любым режимом XHCI hand-off  все четыре приемника могли работать одновременно, но при пропадании и восстановлении питания терялись, lsusb устройства видел, SoapySDRUtil --find же устройств не видел. Но если после включения питания перезагрузить машину sudo reboot, все работало. Я оставил XHCI включенным, не покупать же еще два pci-express>usb контроллера, и добавил в crontab ежесуточную перезагрузку ночью, на всякий.

21 апреля 23 года-добавлен блок УКВ. RTL на 144МГц, Hackrf на UHF-SATCOM и RSP1 клон на 435МГц. Вот оно в новом корпусе с материнкой Dell optiplex 3070 и core i5. Производительности процессора хватает на одновременную работу пяти rsp1 со скоростью оцифровки по 8MSPS каждая.


Модуль отдельно, крепится на отверстия крепления 2,5 дюймового hdd.


Антенный ввод общий, разделен через диплексер. На кв фнч до 33мгц


На укв сначала фвч от 120мгц, а после фнч до 440 мгц, получается полосовой фильтр отрезающий ФМ радио и DVB-T2

В один кабель сводит все простой диплексер.


И установлен блок диплексеров на кв приемники вместо делителя.


Установлен Xeon E3-1270v3 и две планки памяти в двухканал. Теперь одновременная работа пяти RSP1a на 8 мгц полосы и хакрф на 20 мгц нагружает сервер примерно на 60%.
Процессор при этом не особо то и греется (стоковый рабиатор для lga1500 на несколько градусов теплее руки, при том что вентилятор запитан от 5-ти вольт и не шумит вообще).



К вебсдр это не относится, но если есть пара (десятков) сдр приемников то можно организовать нехилый виртуальный онлайн-радар для кораблей и самолетов.
Virtual radar server
Linux - Virtual Radar Server
Программа создает веб-страничку с картой, принимает от разных декодеров данные и отображает на карте самолеты.

 
Принимать данные может через UART, TCP, UDP порты.

HFDL
Для линукс есть консольный декодер HFDL который может обработать столько каналов HFDL сколько позволяет полоса SDR и мощность компьютера, а потом скормить декодированные данные в Virtual Radar Server или подобный софт.
Установка требует компиляции самого dumphfdl и еще нескольких софтин.
GitHub - szpajder/dumphfdl: Multichannel HFDL decoder
Локальная копия исходников (сохранена на случай вторжения некронов)
Пример запуска с отправкой декодированного на виртуальный радар по TCP
dumphfdl --soapysdr driver=sdrplay --gain-elements IFGR=40,RFGR=0 --sample-rate 6000000 8825 8834 8843 8885 8886 8894 8912 8921 8927 8936 8939 8942 8948 8957 8977 10027 10060 10063 10066 10075 10081 10084 10087 10093 11306 11312 11318 11321 11327 11348 11354 11384 11387 11184 11306 13264 13270 13276 13303 13312 13315 13321 13324 13342 13351 13354 --freq-as-squawk --output decoded:basestation:tcp:address=127.0.0.1,port=20005 --system-table /home/aholt/dumphfdl/etc/systable.conf

Пример трехчасового мониторинга на нескольких диапазонах


Помните только что у SDRPlay от семплрейта зависит разрядность, и соответственно динамический диапазон.
14bit 2MSPS – 6.048MSPS
12bit 6.048MSPS – 8.064MSPS
10bit 8.064MSPS – 9.216MSPS
8bit >9.216MSPS

ADS-B
Антенна

В случае с ADS-B всю работу делает программа dump1090. При запуске командой dump1090 --interactive --net --net-http-port 8080 (возможно если хотите еще прием AIS с картой запилить стоит сменить порт) читает с rtl-sdr, декодирует, создает веб-сервер и рисует карту с самолетами на веб-страничке. Карта по умолчанию работает по адресу localhost:8080
Опции программы
 rtlsdr-specific options (use with --device-type rtlsdr)
--device <index|serial> select device by index or serial number
--enable-agc enable digital AGC (not tuner AGC!)
--ppm <correction> set oscillator frequency correction in PPM
--direct <0|1|2> set direct sampling mode


modesdeco2 - еще один декодер ADS-B A/C с виртуальным радаром
карта на порту 8585


ACARS
Данные системы acars тоже можно скормить виртуальному радару.
Программа acarsdeco2 или acarsdec
GitHub - TLeconte/acarsdec: ACARS SDR decoder

VDL MODE 2
Смена акарсу, но оказалась особо никому не нужна, мало кто ей пользуется.
декодер vdl mode 2 для линукс, правда с отправкой данных в VRS непонятки, вот  plane plotter поддерживается.
GitHub - szpajder/dumpvdl2: VDL Mode 2 message decoder and protocol analyzer

ADS-C
JAERO декодер нескольких систем работающих через спутники inmarsat, для радаров интересна ADS-C
thebaldgeek | C-Band ADSC aka Satellite ADSB
Для приема нужна тарелка под два метра и конвертер C-диапазона


JAERO тоже умеет отправлять декодированное в виртуальный радар, радиус действия такого наблюдения - обзор с геостационарного спутника, почти половина земного шара.

IRIDIUM-ACARS
Iridium ACARS Decoding. | thebaldgeek.github.io
ACARS сообщения также пердаются через спутники IRIDIUM. Декодер иридиума умеет парсить акарс сообщения, но вот для отправки данных в виртуальный радар используется дополнительный скрипт на питоне.

AIS
Антенна

Чтение с rtl-sdr и декодирование - aisdeco2
Запуск приложения sudo aisdeco2 --udp 127.0.0.1:10110
AIS Dispatcher - free AIS data sharing tool | AISHub
За веб-сервер с картой отвечает  AIS Dispatcher
wget https://www.aishub.net/downloads/dispatcher/install_dispatcher
chmod 755 install_dispatcher
sudo ./install_dispatcher
Заходим в настройки
http://IPADDRESS:8080
Username: admin
Password: admin
Заходим в конфиг


настраиваем передачу данных из UDP порта указанного при запуске.


сохраняем настройки, запускаем сервер и смотрим на кораблики (если подключили приемник с антенной и находимся рядом с судоходным водоемом, лол)