SoapySDR Печать
Добавил(а) microsin   

SoapySDR это открытый C/C++ API и runtime-библиотека для подключения к устройствам SDR (Software Defined Radio). С помощью SoapySDR Вы можете создавать соединение с устройством SDR и конфигурировать его, и затем получать потоковые данные SDR (различных условиях рабочего окружения). Через SoapySDR можно подключаться к устройствам osmosdr и uhd. Дополнительно производители могут напрямую поддерживать свою аппаратуру с помощью модулей устройств SoapySDR. Имеются программные обертки для gr-osmosdr, uhd и gr-uhd для обеспечения экосистемы существующих приложений для устройств SoapySDR. И SoapySDR имеет поддержку таких мощных платформ, как GNU Radio и Pothos.

SoapySDR info

Рис. 1. Обзор возможностей и функций библиотеки SoapySDR.

Примечание: это перевод документации [1]. Все непонятные термины и сокращения см. в разделе "Словарик", в конце статьи.

[Философия SoapySDR]

SDR. Существует семейство радиоприемников (и даже радиопередатчиков), известных как SDR, оборудованных антенным входом RF, преобразователями ADC/DAC и интерфейсом с компьютером PC (чаще всего это USB). Цель проекта SoapySDR - поддержка обычных устройств SDR, это не библиотека глобальной абстракции от аппаратуры. Однако с помощью таких интерфейсов для регистров и общих настроек, как SPI, I2C и т. п., библиотека подходит при создании подключений к произвольной аппаратуре или устройствам SoC. Это делается в SoapySDR plugin как удобный способ добиться поддержки сети, языков Python и GO.

SoapySDR не привязана к какому-то определенному поставщику аппаратуры SDR / платформе SDR. Разработчики попытались оформить SoapySDR API таким образом, чтобы обеспечить поддержку большинства устройств, с обеспечением для пользователей средств доступа к функциям устройств, специфических для конкретного производителя. Создатели платформ SDR получили способ разработать поддержку для своего устройства SDR с учетом всех его особенностей.

Архитектура плагина. Поддержка устройств SDR в библиотеке SoapySDR осуществляется через программные модули, загружаемые во время выполнения программы (runtime). Это позволяет пользователям создавать и устанавливать поддержку устройства для существующей установки SoapySDR, не нарушая существующую установку и не требуя перекомпиляции кода платформы. Это позволяет поставщикам поддерживать модуль SoapySDR наряду со своим пакетом сборки драйвера.

Дружественная лицензия. Библиотека SoapySDR публикуется под свободной, бесплатной лицензией (permissive free software license). Это делает SoapySDR применимой как для open-source проектов, так и для коммерческого использования. Независимо от лицензирования SoapySDR соблюдайте правила лицензирования платформы и ПО вендора SDR.

Удаленный доступ. Любое устройство, оснащенное поддержкой SoapySDR, получает прозрачный доступ к своему управлению через локальное сетевое соединение. Это функция может превратить любую аппаратуру SDR в сетевое устройство, что позволяет гладко обойти проблемы сетевого доступа, совместно использовать одно устройство несколькими компьютерами, или упростить разработку встраиваемого устройства. Подробности см. в [2].

На рис. 2 показано взаимодействие SoapySDR с внешними приложениями и программными компонентами.

SoapySDR dependencies

Рис. 2. Общая структура библиотеки SoapySDR.

[Приложения, использующие SoapySDR]

Существует несколько программных платформ, графических или работающих через командную строку, использующих SoapySDR для подключения к экосистеме аппаратуры SDR.

QSpectrumAnalyzer. Это анализатор спектра, написанный на языке Python, использующий языковые привязки SoapySDR к языку Python.

Welle.io DAB/DAB+. Открытое ПО приема DAB и DAB+ с помощью SDR. Поддерживает дисплеи с высоким DPI и дисплеи с тачскрином, и работает даже на дешевых компьютерах наподобие Raspberry Pi 2/3 и China Windows 10 tablet за 100 евро.

Cubic SDR. Кросс-платформенное приложение SDR, осуществляющее навигацию по спектру радиочастот, а также демодуляцию любых наблюдаемых в спектре сигналов.

GQRX. Анализатор спектра, написанный на C++, использующий SoapySDR через привязки в GrOsmoSDR.

SDRangel. Open Source Qt5/OpenGL 3.0+ SDR и анализатор сигнала для различной SDR-аппаратуры.

HABDEC. RTTY-декодер для высотных воздушных шаров (High Altitude Balloon).

LinHPSDR. HPSDR приложение для Linux, основанное на GTK+ 3.

RTLSDR-Airband. Принимает по радио голосовые audio-каналы и генерирует audio-потоки, которые можно маршрутизировать на различные выходы.

RTL433 project. Программа для декодирования трафика широковещательных устройств (наподобие сенсоров температуры) на частоте 433.9 МГц.

Rx Tools project. Набор утилит командной строки для SoapySDR. Утилиты реализуют базовую обработку DSP, и позволяют соединять друг с другом данные через стандартные каналы (pipe samples from stdout), так что отдельные команды можно соединять в цепочку, чтобы одна утилита получала RF-данные от другой (применяется стандартный принцип обработки команд UNIX command piping).

HackTV. Аналоговый TV-передатчик, работающий с SoapySDR.

ODR-DabMod. DAB-модулятор, совместимый с ETSI EN 300 401.

Pothos это проект потоковой обработки данных, использующий источник данных SDR и функциональные блоки.

Основная страничка проекта Pothos: https://github.com/pothosware/PothosCore/wiki
Взаимодействие Pothos/SoapySDR: https://github.com/pothosware/PothosSoapy/wiki

Pothos SDR blocks

Рис. 3. Блоки Pothos.

gr-soapy. Блоки источника/обработки данных (source/sink blocks), набор нейтральных к производителю блоков для GNU Radio. Они упрощают разработчикам GNU Radio поддержку компонента, и производители могут продолжать обновлять модули и поддерживать новое оборудование.

GrOsmoSDR. Также предоставляет набор SoapySDR-совместимых source/sink блоков вместе с обертками для множества различной аппаратуры для GNU Radio. GrOsmoSDR предоставляет способ поддержки аппаратуры для ПО GQRX. Для использования устройств SoapySDR в GrOsmoSDR просто выполните сборку с поддержкой SoapySDR, и добавьте пару key/value "soapy=0" в список аргументов устройства.

SoapyUHD. Это плагины SoapySDR для устройств UHD, так что устройства, поддерживаемые SoapySDR, могут использоваться source/sink-блоками gr-uhd. Пользователи должны гарантировать, что модуль поддержки SoapyUHD установлен в путях поиска модуля UHD. См. также wiki#soapy-devices-in-uhd.

[Использование SoapySDR]

Сама по себе библиотека SoapySDR имеет очень мало внешних зависимостей. Для сборки SoapySDR необходим только компилятор C++ и CMake. Однако могут широко меняться отдельные зависимости от определенных производителей. Также опциональные привязки к языку Python включают некоторые дополнительные зависимости.

Установка. Можно загрузить готовый двоичный код библиотеки по ссылке [4]. Альтернативно можно следовать руководству для компиляции и установки SoapySDR из исходного кода [5].

Есть несколько видов программного интерфейса (API), через которых пользователи и разработчики платформ пишут свое ПО, использующее устройство SDR:

1. C++ API через класс SoapySDR::Device (doxygen).
2. C API через обертку SoapySDRDevice. Базовый пример кода.
3. Python API через модуль SoapySDR Python. Пример модуля SoapySDR Python.
4. Привязка к языку GO.

С помощью API драйвера пишут код поддержки для своего оборудования SDR. Подробную информацию см. в документации по драйверу Driver Guide. Чтобы реализовать поддержку аппаратуры в SoapySDR, выполните следующее:

1. Скопируйте ExampleDriver в дерево сборки своих устройств.
2. Переименуйте файлы "MyDevice" и классы для своего продукта.
3. Реализуйте перегрузки для пользовательского класса SoapySDR::Device.
4. Реализуйте функцию discovery для обнаружения устройств в системе.
5. Реализуйте функцию factory для создания объекта устройства.
6. Дополнительное чтение: Stream status indicators.

[Словарик]

DAB, DAB+ Digital Audio Broadcast, цифровое радиовещание (подробнее см. Википедию).

DDC, DUC аббревиатуры от Digital Down Conversion и Digital Up Conversion [3].

HPSDR High Performance Software Defined Radio, высокопроизводительное SDR.

RTTY радио-телетайп, система для передачи текстовой информации по радио (подробнее см. Википедию).

SDR Software-Defined Radio, радиоприемник, где вся основная обработка сигнала (демодуляция, фильтрация, подавление шума) происходит с помощью алгоритмов DSP.

source/sink источник/потребитель, условное обозначение иерархии функциональных блоков GNU Radio.

[Ссылки]

1. SoapySDR project site:github.com.
2. Remote support for Soapy SDR site:github.com.
3. Difference between DUC and DDC site:rfwireless-world.com.
4. PothosCore Downloads and binary installers site:github.com.
5. SoapySDR BuildGuide site:github.com.