Direct Sampling в rtl_tcp на Linux ARM.

Автор: Administrator вкл. . Опубликовано в RTL-SDR

После успешной настройки сервера и анализа некоторых значимых моментов все же хотелось запустить Direct Sampling. Лично у меня вопросов было два:

1 - Как выбирать этот режим в клиентских программах, если в меню управления rtl_tcp нет соответствующих пунктов?

2 – Как запустить серверную часть, если среди возможных ключей запуска нет никаких, связанных с режимом Direct Sampling?

Все описанные ниже тесты проводились на Orange Pi One с ОС Armbian 5.59, Armbian 5.60 и Armbian 5.70 в роли сервера. В роли клиента был ПК с ОС Win 8.1 x64 и программами SDRSharp, SDR Console и HDSDR v2.76a.

Вот возможные ключи для запуска серверной части rtl_tcp, установленной командой - git clone git://git.osmocom.org/rtl-sdr.git

 

А вот менюшка настройки подключения к серверу в программе SDRSharp v 1700.

 

А это в SDR Console v 3.0.4. В других менюшках тоже ничего похожего на выбор режима Direct Sampling обнаружить не удалось. Причем, минимальную полосу обзора можно выбрать в 2 МГц, что, на мой взгляд, довольно странно, ведь полоса пропускания в LAN составит около 35 Мбит/сек, исходя из моих измерений тут, но, тем не менее, это работает.

 

Поразмыслив, решил начать с серверной части, т.к., вероятно, задав режим работы сервера на клиентах (SDRSharp и SDR Console) менять ничего не потребуется.

Поиски в интернете привели к трем вариантам серверной части. Два в виде исходников на github, а один в виде архива с исходниками.

1 - https://github.com/SUWS/librtlsdr

2 - https://github.com/keenerd/rtl-sdr

3 - https://www.rtl-sdr.com/wp-content/uploads/2018/01/rtl-sdr-driver-patched-by-PieterTjerk.zip

Самым явным указанием на необходимый дистрибутив с поддержкой Direct Sampling была страница руководства на RTL-SDR.COM v.3.

 

Что ж, я решил попробовать, и, забегая вперед, скажу, что этот вариант не заработал на Orange Pi One с Armbian_5.59, и даже обновленным до версии 5.60. Попытки скомпилировать исполняемые файлы были неудачными, то из-за неверных путей, а после исправления – из-за неподходящих зависимостей. Я упираться не стал и решил просто попробовать другие варианты. На текущей (начало 2019 года) версии Armbian 5.70 (и выше) пробовать уже не стал, т.к. нашлось другое решение.

Далее, на форуме http://www.cqham.ru/forum/showthread.php?22261-RTL2832/page249 было найдено упоминание дистрибутива https://github.com/SUWS/librtlsdr

 

Поскольку на Orange Pi One у меня уже установлены драйверы командой «git clone git://git.osmocom.org/rtl-sdr.git», то сперва надо удалить этот драйвер и исполняемые файлы для RTL-SDR.

cd rtl-sdr/

cd build/

sudo make uninstall

sudo ldconfig

sudo reboot 0

 

 

После перезагрузки надо удалить папку «rtl-sdr»:

rm -rf rtl-sdr/

А дальше установка SUWS проходит точно так, как было мною расписано вот здесь, с той лишь разницей что вместо «git clone git://git.osmocom.org/rtl-sdr.git» надо использовать «git clone https://github.com/SUWS/librtlsdr.git»

git clone https://github.com/SUWS/librtlsdr.git

cd librtlsdr/

mkdir build

cd build

cmake ../ -DINSTALL_UDEV_RULES=ON -DDETACH_KERNEL_DRIVER=ON

make

sudo make install

sudo ldconfig

 

И теперь, в выводе возможных ключей запуска rtl_tcp можно увидеть искомый - «enable direct sampling».

 

 

Запуск сервера в режиме Direct Sampling производится командой

sudo rtl_tcp -a 192.168.3.106 -p 3476 -q 2

 

Где параметр «-q 2» выбирает пин Q, задействованный в приемнике rtl-sdr.com v3. Для других вариаций исполнения режима Direct Sampling в других версиях приемника RTL SDR может потребоваться выбор пина I, т.е. «-q 1».

Для запуска обычного режима по-прежнему используется команда

sudo rtl_tcp -a 192.168.3.106 -p 3476

В некоем выводе служебной информации после запуска сервера можно видеть строку «Enabled direct sampling mode, input 2», что говорит о работающем режиме Direct Sampling.

 

 

После подключения клиентом SDRSharp. Видно, что от клиента нет команды на выбор режима (Direct Sampling или НЕ Direct Sampling).

 

После подключения клиентом SDR Console. Видно, что от клиента нет команды на выбор режима (Direct Sampling или НЕ Direct Sampling).

 

Собственно говоря, можно исправить скрипт (который я описывал ранее тут) для автозапуска сервера (строка теперь должна выглядеть так - «/usr/local/bin/rtl_tcp -a 192.168.3.108 -p 3476 -q 2») и пользоваться rtl-sdr.com v3 в режиме Direct Sampling без конвертера посредством клиентских программ SDRSharp и SDR Console подключаясь к rtl_tcp-серверу.

 

 

 

Еще на просторах интернета я наткнулся на упоминание о dll-файле для программы HDSDR, который дает возможность выбора режима Direct Sampling при подключении к rtl_tcp-серверу. После скачивания и установки самой программы, надо скачать и добавить нужный dll.

 

На странице http://www.hdsdr.de/hardware.html есть ссылка для скачивания нужной dll - https://github.com/hayguen/extio_rtl_tcp/releases/ точнее, даже так - https://github.com/hayguen/extio_rtl_tcp/releases/download/2016-3/ExtIO_RTL_TCP_2016-3.zip

 

Про «установку» dll написано следующее:

 

А точнее – поместить «ExtIO_RTL_TCP.dll» в «c:\Program Files (x86)\HDSDR\»

 

После запуска программы HDSDR доступ к настройкам подключения к серверу rtl_tcp можно получить путем нажатия на кнопку «ExtIO»

 

И тут можно увидеть желанный пункт – «Sampling mode», в котором доступны варианты как для обычного режима, так и для выбора двух пинов I или Q. В «логах» сервера при этом отчетливо видно, какой режим работы задается клиентом.

 

 

 

Да-да, HDSDR может задавать режим работы сервера. Но с одной оговоркой – только если сервер запущен командой без ключа «q», т.е. параметр для Direct Sampling-а не указан никак:

sudo rtl_tcp -a 192.168.3.106 -p 3476

 

А если параметр q задан на сервере жестко:

sudo rtl_tcp -a 192.168.3.106 -p 3476 -q 2

то настройки в HDSDR не оказывают никакого действия. Иными словами – у настроек сервера приоритет над настройками клиента.

В общем и целом, драйвер SUWS позволил запустить rtl_tcp с ключом «q». При подключении к такому серверу программами SDRSharp, SDR Console и HDSR все заработало в режиме Direct Sampling. Ответы на вопросы, фигурирующие в начале статьи, найдены.

 

 

------------------------------------------------------

 

Но все же надо еще посмотреть, что умеет драйвер от keenerd.

Собственно, процедура ровно та же, что и в начале статьи – удалить существующий драйвер для rtl_sdr (в моем случае это SUWS), перезагрузится, удалить папку с исходниками только что удаленного драйвера. А потом установить интересующий нас драйвер.

cd librtlsdr/

cd build/

sudo make uninstall

sudo ldconfig

sudo reboot 0

После перезагрузки надо удалить папку «librtlsdr»:

rm -rf librtlsdr/

 

Установка keenerd:

git clone https://github.com/keenerd/rtl-sdr.git

cd rtl-sdr/

mkdir build

cd build

cmake ../ -DINSTALL_UDEV_RULES=ON -DDETACH_KERNEL_DRIVER=ON

make

sudo make install

sudo ldconfig

Оказалось, что у драйвера от keenerd нет ключей запуска сервера rtl_tcp в режиме Direct Sampling.

 

Поэтому сервер можно запустить только такой командой:

sudo rtl_tcp -a 192.168.3.106 -p 3476

Однако параметры. Заданные в HDSDR оказывают влияние на работу сервера и возможна его работа в режиме Direct Sampling! Чудеса!

 

Более того, последний заданный режим работы сервера из HDSDR сохраняется и можно подключиться SDRSharp или SDR Console для прослушивания приемника в режиме Direct Sampling (хотя он и не был задан нигде на стороне сервера). После перезапуска сервера (sudo reboot) эта магическая настройка теряется, нужно снова задать ее через HDSDR, подключиться к серверу, отключиться, закрыть HDSDR и подключаться другими клиентскими программами. Ну, или через HDSDR пользоваться.

 

 

 

-----------------------------------------------------

 

 

Сей факт натолкнул на мысль о проверке влияния настроек HDSDR на сервер с обычным драйвером от Osmocom.

Удаление текущего драйвера и установка другого уже описана здесь по тексту выше, так что повторять не буду.

Итак, удалил, установил, проверил – результат удивил, т.к. поведение оказалось ровно таким же, как и в случае с драйвером от keenerd. Иными словами – вся «магия» в dll для HDSDR, который позволяет задавать режим работы для сервера rtl_tcp. И оказалось, что никакие другие драйверы-то и не надо было ставить, все работает и с «родным»…

Как это возможно, я так и не понял…. Но факт остается фактом.

 

 

Выводы:

1 - HDSDR с «ExtIO_RTL_TCP.dll» позволяет переключать сервер rtl_tcp в режим Direct Sampling с любым из трех рассмотренных драйверов. После такого переключения можно другими программами (SDRSharp, SDR Console) продолжать использовать режим Direct Sampling до перезапуска сервера.

2 - Если нужно жестко задать режим работы сервера, то надо использовать драйвер от SUWS с ключом «-q 2».

 

 

 

 

 

--------------------------------------------------------------

Попутно меня не покидали надежды запустить сервер на базе ARM x64 (Orange Pi PC 2) с которым не сложилось ранее.

На момент пробы уже вышел образ «Armbian_5.65_Orangepipc2_Debian_stretch_next_4.14.78.img» который был поновее предыдущего (сперва не заработало на Armbian_5.59).

Что ж, видимо исправили чего-то в образе ОС и rtl_tcp от osmocom завелся и на этой плате.

 

Проверил с SUWS – тоже все заработало, в директ семплинге в том числе!

Проверил с keenerd – тоже все заработало, в директ семплинге в том числе!

На момент окончания написания статьи (январь 2019г.) уже вышла версия 5.73 Armbian. Перепроверил три версии драйвера на этом образе – все три заработали так, как описывал выше по тексту.

 

 

 

Прочие статьи про RTL-SDR.