Есть огромное преимущество использования 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.

В будущем мы, возможно, опубликуем полный двусторонний туториал с изображениями, но пока представлен примерно набросанный туториал ниже. Туториал довольно сложный и предполагает достаточный опыт работы с Linux. Туториал начинается с чистой установки Raspbian.
Основная идея работы основана на том, что RTL-SDR не может использоваться напрямую внутри Wine (или, как кажется). Так аудио управляющего сигнала маршрутизируется от rtl_fm, работающего на одном донгле, в Unitrunker в Wine с использованием ALSA loopback. Затем мы используем старый метод Unitrunker remote.dll для генерации файла sdrsharptrunking.log, текстового файла, который содержит текущую частоту, к которой должен настраиваться голосовой приемник. Простой скрипт оболочки постоянно читает этот файл и извлекает частоту, а затем командывает экземпляр rtl_udp, работающий с вторым донглом, на настройку на эту частоту.
- Установите драйверы RTL-SDR, используя “sudo apt-get rtl-sdr” или установив из исходников.
- Сделайте git clone репозитория rtl_udp, затем скомпилируйте код. Возможно, потребуется выполнить apt-get install для установки cmake и libusb-dev и libusb-1.0-dev заранее. Обратите внимание, что мы рекомендуем не использовать make install в качестве финального шага, так как стандартный osmocom rtl_fm, похоже, работает с меньшим количеством аудио-underruns.
- Приобретите и установите Exagear на вашу систему согласно их инструкциям. Обратите внимание, что мы рекомендуем не включать FullGL по их рекомендациям, так как это может ломать слишком многое.
- Откройте оболочку Exagear, набрав в обычной оболочке “exagear”.
- Установите wine командой “sudo apt-get install wine”. Убедитесь, что wine установлен внутри оболочки Exagear, поскольку репозитории Exagear предоставляют специальную версию для Pi.
- Теперь воспользуйтесь веб-браузером для загрузки последней версии Unitrunker preview. На момент тестирования мы использовали Unitrunker 33.6.
- Теперь в вашей оболочке Exagear перейдите к файлу .msi и используйте “wine msiexec /i UniTrunker-1.0.33.6.msi” для установки. Теперь вы должны иметь возможность установить его нормально.
- Далее, если вы запустите Unitrunker прямо сейчас, он, вероятно, будет жаловаться на отсутствующий WinUSB.dll. В веб-браузере перейдите на https://www.dll-files.com/winusb.dll.html и скачайте 32-битную версию winusb.dll. Имейте ввиду, что на этом сайте много вводящих в заблуждение объявлений. Просто прокрутите вниз и нажмите текстовую загрузку, а не изображения.
- Поместите этот DLL в папку ~/.wine/drive_c/windows/system32.
- Теперь в вашей оболочке Exagear перейдите в “~/.wine/drive_c/Program Files/Unitrunker” и попробуйте запустить Uniform.exe командой “wine Uniform.exe”. Она может запуститься, или вы можете увидеть ошибки, указывающие на наличие дополнительных отсутствующих dll. Если dll отсутствуют, найдите их на сайте dll-files.com, загрузите 32-битные версии и скопируйте их в папку system32. Как только вы скопируете все эти dll, вы сможете открыть Unitrunker.
- Но если вы откроете Unitrunker сейчас, кнопки, скорее всего, будут выглядеть неправильно. Это происходит потому, что Unitrunker использует шрифты Wingdings и Webdings для своих иконок. Чтобы исправить это, используйте реальный ПК под Windows для копирования всех шрифтов Wingdings и Webdings на ваш Pi (возможно, вы найдете эти шрифты в интернете). Поместите их в папку ~/.wine/drive_c/windows/Fonts. Теперь, возможно, потребуется перезапустить вашу оболочку Exagear или даже сам Pi, чтобы эти шрифты зарегистрировались.
- Теперь Unitrunker должен работать, и иконки должны выглядеть нормально.
- Далее подключите ваши два RTL-SDR, и запустите в обычной оболочке без Exagear “sudo modprobe aloop”; это создаст аудиоустройство обратной связи, подобное Stereo Mix в Windows.
- Далее установите sox командой “sudo apt-get install sox”
- В другой не-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 с ресэмплером, по-видимому, не работает.
- Откройте Unitrunker и создайте новый Signal receiver, с аудиовходом как Loopback-устройство. Если вы настроены на валидную управляющую частоту, поле Site должно появиться.
- Создайте новый Debug receiver и установите его режим в Voice.
- Это должно создать папки в вашей директории “~/.wine/drive_c/users/pi/Application Data/Unitrunker”, которые начинаются с буквы R и имеют несколько цифр после — например “R000001”.
- Поместите remote.dll из zip-файла Unilogger 1.5 на этом сайте (прокрутите вниз) в те директории, начинающиеся с R. Это скажет Unitrunker генерировать требуемый файл sdrsharptrunking.log.
- После этого возможно потребуется перезапуск Unitrunker, чтобы он увидел dll. После перезапуска подтвердите, что файл sdrsharptrunking.log создан в папке “~/.wine/drive_c/users/pi/Application Data/Unitrunker/”.
- Далее в вашей папке 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
- В другой не-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-монитор).
- В другой не-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.

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.

Примечания
Exagear доступен также для Android, так что возможно, что некоторые из этих приложений также смогут работать на Android-смартфонах и планшетах.
Также возможно использовать Pulseaudio для создания полноценной цифровой системы декодирования с Unitrunker. Но в настоящее время использование Pulseaudio, похоже, приводит к тому, что Unitrunker не открывается.
rtl_fm генерирует некоторые underruns. Однако они происходят только каждые 10–20 секунд и не сильно влияют на цифровое декодирование.
Если у вас есть какие-либо другие Windows-only или x86-only приложения, которые вы хотите, чтобы мы протестировали, сообщите нам в комментариях.
Источник:
