RTL-SDR

Запуск Windows & x86 SDR декодирующих приложений на Raspberry Pi 3: Unitrunker, WinSTD-C, WXtoIMG, DSDPlus и другое

Есть огромное преимущество использования SDR декодирующих приложений на одноплатном ПК, таком как Raspberry Pi 3. Например, вместо выделения целого ПК под выделенный декодер, можно использовать дешевый Pi 3. Однако, к сожалению, многие декодирующие приложения написаны под архитектуру процессоров x86 и/или Windows, что делает их невозможными для запуска на ARM и/или на в основном Linux-устройствах типа Raspberry Pi 3.

Это если не использовать комбинацию эмуляторов, такую как Eltechs Exagear и Wine. Exagear — эмулятор, который эмулирует среду x86 на устройстве наподобие Raspberry Pi 3, где используется ARM-CPU. Wine — это слой совместимости под Windows, который позволяет запускать x86 Windows-приложения на установке Linux с архитектурой x86. Таким образом, объединяя Exagear и Wine, можно запускать Windows-приложения на ARM Linux-устройствах.

Exagear не является бесплатным (хотя есть бесплатная пробная версия). В настоящий момент стоимость для Pi 3 составляет 22.95 USD за лицензию, для Pi 2 — 16.95 USD, и 11.45 USD для Pi 1/Zero. У них также есть версии для Odroid, Cubieboard, BananaPi, Jetson и многих других ARMv7 и ARMv8-устройств, таких как очень недорогие и мощные Orange Pi. Есть бесплатные альтернативы, например QEMU, однако при тестировании QEMU на Pi 3 он был слишком медленным, чтобы даже запустить блокнот, не говоря уже о декодере. Exagear, с другой стороны, похоже, запускает приложения почти на нативной скорости, без заметной задержки. В этом отношении цена, похоже, оправдывает себя.

Мы решили протестировать комбинацию Exagear + Wine на Pi 3 и успешно запустили ряд приложений, включая Unitrunker, WinSTD-C, WXtoIMG, DSDPlus, PC-HFDL, MultiPSK, Orbitron и Sondemonitor.

Настройка тракинга с Unitrunker на Raspberry Pi 3

С помощью Unitrunker мы смогли настроить полноценную систему тракинга, используя два RTL-SDR-донгла, rtl_fm, rtl_udp и пользовательский скрипт для управления rtl_udp.

Unitrunker, работающий на Raspberry Pi 3
Unitrunker, работающий на Raspberry Pi 3

В будущем мы, возможно, опубликуем полный двусторонний туториал с изображениями, но пока представлен примерно набросанный туториал ниже. Туториал довольно сложный и предполагает достаточный опыт работы с Linux. Туториал начинается с чистой установки Raspbian.

Основная идея работы основана на том, что RTL-SDR не может использоваться напрямую внутри Wine (или, как кажется). Так аудио управляющего сигнала маршрутизируется от rtl_fm, работающего на одном донгле, в Unitrunker в Wine с использованием ALSA loopback. Затем мы используем старый метод Unitrunker remote.dll для генерации файла sdrsharptrunking.log, текстового файла, который содержит текущую частоту, к которой должен настраиваться голосовой приемник. Простой скрипт оболочки постоянно читает этот файл и извлекает частоту, а затем командывает экземпляр rtl_udp, работающий с вторым донглом, на настройку на эту частоту.

  1. Установите драйверы RTL-SDR, используя “sudo apt-get rtl-sdr” или установив из исходников.
     
  2. Сделайте git clone репозитория rtl_udp, затем скомпилируйте код. Возможно, потребуется выполнить apt-get install для установки cmake и libusb-dev и libusb-1.0-dev заранее. Обратите внимание, что мы рекомендуем не использовать make install в качестве финального шага, так как стандартный osmocom rtl_fm, похоже, работает с меньшим количеством аудио-underruns.
     
  3. Приобретите и установите Exagear на вашу систему согласно их инструкциям. Обратите внимание, что мы рекомендуем не включать FullGL по их рекомендациям, так как это может ломать слишком многое.
     
  4. Откройте оболочку Exagear, набрав в обычной оболочке “exagear”.
     
  5. Установите wine командой “sudo apt-get install wine”. Убедитесь, что wine установлен внутри оболочки Exagear, поскольку репозитории Exagear предоставляют специальную версию для Pi.
     
  6. Теперь воспользуйтесь веб-браузером для загрузки последней версии Unitrunker preview. На момент тестирования мы использовали Unitrunker 33.6.
     
  7. Теперь в вашей оболочке Exagear перейдите к файлу .msi и используйте “wine msiexec /i UniTrunker-1.0.33.6.msi” для установки. Теперь вы должны иметь возможность установить его нормально.
     
  8. Далее, если вы запустите Unitrunker прямо сейчас, он, вероятно, будет жаловаться на отсутствующий WinUSB.dll. В веб-браузере перейдите на https://www.dll-files.com/winusb.dll.html и скачайте 32-битную версию winusb.dll. Имейте ввиду, что на этом сайте много вводящих в заблуждение объявлений. Просто прокрутите вниз и нажмите текстовую загрузку, а не изображения.
     
  9. Поместите этот DLL в папку ~/.wine/drive_c/windows/system32.
     
  10. Теперь в вашей оболочке Exagear перейдите в “~/.wine/drive_c/Program Files/Unitrunker” и попробуйте запустить Uniform.exe командой “wine Uniform.exe”. Она может запуститься, или вы можете увидеть ошибки, указывающие на наличие дополнительных отсутствующих dll. Если dll отсутствуют, найдите их на сайте dll-files.com, загрузите 32-битные версии и скопируйте их в папку system32. Как только вы скопируете все эти dll, вы сможете открыть Unitrunker.
     
  11. Но если вы откроете Unitrunker сейчас, кнопки, скорее всего, будут выглядеть неправильно. Это происходит потому, что Unitrunker использует шрифты Wingdings и Webdings для своих иконок. Чтобы исправить это, используйте реальный ПК под Windows для копирования всех шрифтов Wingdings и Webdings на ваш Pi (возможно, вы найдете эти шрифты в интернете). Поместите их в папку ~/.wine/drive_c/windows/Fonts. Теперь, возможно, потребуется перезапустить вашу оболочку Exagear или даже сам Pi, чтобы эти шрифты зарегистрировались.
     
  12. Теперь Unitrunker должен работать, и иконки должны выглядеть нормально.
     
  13. Далее подключите ваши два RTL-SDR, и запустите в обычной оболочке без Exagear “sudo modprobe aloop”; это создаст аудиоустройство обратной связи, подобное Stereo Mix в Windows.
     
  14. Далее установите sox командой “sudo apt-get install sox”
     
  15. В другой не-Exagear оболочке запустите:
    rtl_fm -M fm -f FREQ -s 12.5k -g 20 -F 0 | sox -r 12.5k -t raw -e s -b 16 - -traw -r 48k -e s -b 16 -c 1 - | aplay -r 48k -f S16_LE -t raw -c 1 -D hw:Loopback,0,0", 

    замените FREQ на вашу управляющую частоту. Не забывайте подобрать коэффициент усиления под ваше RF окружение, и при необходимости установить корректировку PPM. Этот командный код берет вывод rtl_fm, конвертирует его в частоту дискретизации 48 кГц и затем отправляет в loopback-устройство бесшумно. Использование стандартного rtl_fm -r с ресэмплером, по-видимому, не работает.
     

  16. Откройте Unitrunker и создайте новый Signal receiver, с аудиовходом как Loopback-устройство. Если вы настроены на валидную управляющую частоту, поле Site должно появиться.
  17. Создайте новый Debug receiver и установите его режим в Voice.
  18. Это должно создать папки в вашей директории “~/.wine/drive_c/users/pi/Application Data/Unitrunker”, которые начинаются с буквы R и имеют несколько цифр после — например “R000001”.
  19. Поместите remote.dll из zip-файла Unilogger 1.5 на этом сайте (прокрутите вниз) в те директории, начинающиеся с R. Это скажет Unitrunker генерировать требуемый файл sdrsharptrunking.log.
  20. После этого возможно потребуется перезапуск Unitrunker, чтобы он увидел dll. После перезапуска подтвердите, что файл sdrsharptrunking.log создан в папке “~/.wine/drive_c/users/pi/Application Data/Unitrunker/”.
  21. Далее в вашей папке rtl_udp создайте shell-скрипт со следующим содержимым (благодаря видео Джека МакХью как общей идее). Измените число после grep -i на первое число в частотах голоса, которые вы контролируете. Сохраните как unitr_rtludp_tune.sh:
    #!/bin/bash lastFreq=0 while true do    freq=$(cat ~/.wine/drive_c/users/pi/Application\ Data/Unitrunker/sdrsharptrunking.log | grep -i 8 | sed 's/[^0-9]*//g' | cut -c1-9)    freq=$((freq+0))    if [ "$lastFreq" -ne "$freq" ]; then       ./udpclient.py freq $freq    fi    lastFreq=$freq done 
  22. В другой не-Exagear оболочке перейдите в каталог “rtl_udp/build/src” и запустите: 
    ./rtl_udp -N -f 416.5875M -g 20 -d 1 -s 15k -l 50 | sox -r 15k -t raw -e s -b 16 -c 1 - -t raw -r 48k -e s -b 16 -c 1 - lowpass 750 vol 5 | aplay -r 48k -f S16_LE -t raw -c 1. 

    Корректность частоты здесь не критична, так как она будет изменена Unitrunker на частоту голоса. Это будет выводить звук на ваши колонки на Pi 3 (HDMI или аналоговый в зависимости от того, что вы выбрали — HDMI будет по умолчанию, если подключен HDMI-монитор).

  23. В другой не-Exagear оболочке перейдите в папку rtl_udp и запустите “sh unitr_rtludp_tune.sh”.

Теперь скрипт должен использовать данные из sdrsharptrunking.log для настройки rtl_udp.

У данного подхода остаются некоторые проблемы. Во-первых, кажется, что экземпляры rtl_fm и rtl_udp дают некоторые underruns, что вызывает прерывистый звук. Они не столь распространены, чтобы прервать декодирование, но могут немного раздражать. Во-вторых, загрузка CPU при полном запуске примерно держится на уровне около 75%. После некоторого времени Pi 3 может нагреваться; верхний правый угол может показывать термометр. Вентилятор или теплоотвод могут быть полезны.

Также должно быть возможно настроить этот набор на взаимодействие с DSD+ для цифровых сигналов P25/DMR и т. п. (DSD+ работает в exagear+wine). Но пока мы не нашли схему маршрутизации аудио для третьей программы. Если кто-то добьется этого, сообщите нам в комментариях. Мы пробовали Pulseaudio, но использование Pulseaudio, похоже, вызывает сбой Unitrunker и препятствует его запуску.

Еще одной возможностью может быть использование этого для потоковой передачи голоса онлайн в RadioReference, Broadcastify и т. п.

Разумеется, в конце концов может оказаться проще использовать SDRTrunk, хотя, похоже, многие по-прежнему предпочитают Unitrunker.

Другое протестированное ПО

WinSTD-C: Мы также смогли запустить декодер Inmarsat STD-C WinSTD-C и декодировать сообщения SafetyNET. Для этого просто включите loopback командой “sudo modprobe snd-aloop”, затем используйте стандартный Osmocom rtl_fm и установите режим на “-m usb”. Последняя версия Osmocom RTL-SDR-пакета даже поддерживает bias tee на нашем RTL-SDR V3 с флагом “-T”, поэтому легко можно использовать L-диапазонный LNA с ним.

./rtl_fm -M fm -f 1541.449M -s 6k -g 40 -T | sox -r 6k -t raw -e s -b 16 - -traw -r 48k -e s -b 16 -c 1 - | aplay -r 48k -f S16_LE -t raw -c 1 -D hw:Loopback,0,0

Мы пробовали Windows-версию декодеров Tekmanoid и inmarsat.com STD-C, но не удалось запустить их на wine. Программа Tekmanoid основана на Java, поэтому она должна работать без эмуляции, но автор еще не выпустил Linux-версию. Пока она может работать и на Wine, но мы ещё не пытались устанавливать Java в Wine.

Ниже изображение программы WinSTD-C, запущенной на Pi 3. Мы использовали активную керамическую антенну Patch Outernet и dongle V3 с байс tee. Насколько нам известно, это единственный способ получить декодирование STD-C на Linux-устройстве, тем более на Pi 3, поскольку все приложения написаны под Windows.

WinSTD-C декодирование Inmarsat STD-C на Raspberry Pi 3
WinSTD-C декодирование Inmarsat STD-C на Raspberry Pi 3

DSDPlus: DSD+ работает хорошо на Exagear + Wine. Чтобы начать, как и в приведенных выше примерах, сначала включите loopback командой “sudo modprobe snd-aloop”. Затем откройте DSDPlus.exe через команду “wine DSDPlus.exe” внутри оболочки Exagear.

Используйте Osmocom rtl_fm, выполнив следующую строку в терминале. Заметьте, что здесь мы использовали флаг -F для повышения качества аудио. В нашем случае на сигнале DMR, запуск с -F 9 кажется необходимым для того, чтобы качество аудио было достаточным для декодирования DSD.

rtl_fm -M fm -f 416.5875M -s 12.5k -g 20 -F 9 | sox -r 12.5k -t raw -e s -b 16 - -traw -r 48k -e s -b 16 -c 1 - | aplay -r 48k -f S16_LE -t raw -c 1 -D hw:Loopback,0,0

WxToIMG: На самом деле существует версия WxToIMG для Linux, но она собрана под архитектуру x86, поэтому обычно не может быть запущена на ARM-устройствах. Но с Exagear она запускается и работает плавно. Мы пока ещё не смогли корректно настроить аудиопайпы, но GUI и версии консоли работают нормально с входом .wav.

MultiPSK: Запускается, но довольно медленно и кажется немного нестабильным.

PC-HFDL: Хорошо работает.

Orbitron: Хорошо работает.

SondeMonitor: Хорошо работает.

SDRSharp: Не удалось запустить. Возможно, потребуется доработка установки Mono.

Orbitron и SondeMonitor запущены
Orbitron и SondeMonitor запущены

Примечания

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

Также возможно использовать Pulseaudio для создания полноценной цифровой системы декодирования с Unitrunker. Но в настоящее время использование Pulseaudio, похоже, приводит к тому, что Unitrunker не открывается.

rtl_fm генерирует некоторые underruns. Однако они происходят только каждые 10–20 секунд и не сильно влияют на цифровое декодирование.

Если у вас есть какие-либо другие Windows-only или x86-only приложения, которые вы хотите, чтобы мы протестировали, сообщите нам в комментариях.


Источник:

Подбираете SDR под задачу?

Опишите, что и где хотите принимать, — подскажем подходящие модели и где их купить.

Похожие материалы

Весь блог