SDRSharp (SDR#) – Одна из удобных и бесплатных программ для работы с различными SDR-приемниками.  Благодаря открытому API, она позволяет дополнять ее различными плагинами. Данная программа позволяет слушать различные радиостанции совместно с Airspy и RTL-SDR донглов. Она так же работает с HackRF One, который может не только принимать радиосигналы, но и передавать. Однако, на просторах Интернета, я не смог найти ни одно дополнение к SDR#, который бы позволял использовать HackRF как трансивер. Но все же, на основе того, что сумел найти, получилось кое-как разобраться с библиотекой HackRF.DLL и добавить возможность передачи  радиосигналов через HackRF к SDR#. Это реализовано внедрением промежуточного слоя между SDR# и библиотекой HackRF.DLL, который подготовлен с таким же интерфейсом, что и стандартная библиотека HackRF.DLL, только добавлена форма и несколько функций для формирования сигнала и модуляции в него звука из микрофона. Пока реализована только частотная модуляция.

Для установки данного «дополнения» в SDR#, достаточно переименовать HackRF.DLL, находящийся в папке SDRSharp на UHackRF.DLL, и добавить файл HackRF.DLL из данного проекта.

После этого, при запуске SDR# и выборе HackRF, будет открываться дополнительно окно, позволяющее переключать HackRF в режим передачи.

Внешний вид SDR# с дополнением
Внешний вид SDR# с дополнением

Здесь частота передачи может отличаться от частоты приема в пределах полосы приема SDR и ее можно задавать верхним ползунком. Для переключения между приемом и передачей используется клавиша левый ctrl.

 Так как программа не оптимизирована еще, передача с частотой дискретизации в 20 МГц, скорее всего, будет происходить с искажениями. Чтобы разгрузить ЦП, можно установить более низкую частоту дискретизации в приложении SDR#. Минимальную частоту, которую можно выбрать в приложении – 8 MSPS. Однако ничего не мешает вписать и более низкую частоту.

Библиотека реализована в среде Delphi7. За основу были взяты две публикации, описывающие получение звука из микрофона и оболочку библиотеки над HackRF.DLL.

И над первым и над  вторым пришлось немного поработать. Оболочка над DLL-кой не сразу у меня компилировался. Видимо версии Delphi отличались. А потом оказалось, что не все функции, описанные в оболочке, реализованы в файле HackRF.DLL, поставляемый в комплекте с SDR#. С помощью DLL Export Viewer v1.66 получил список функций, описанные в DLL и таким образом подредактировал оболочку, чтобы там были только те функции, которые реализованы в данной DLL-библиотеке.

 Исходный код

Комментарии (7)


  1. Syzd
    12.03.2022 13:31

    Планируете улучшить интерфейс? 1. Задавать частоту неплохо с клавиатуры (небольшой "калькулятор" ввода частоты был бы неплох. 2. Частоту лучше задавать до кГц, дальше запятая и кто хочет введет с точностью до Герца. 3. Значение текущей частоты разделить пробелами: 145 301, 599 КГц. Ползунок мощности: какие единицы, какое текущее значение?


    1. BerArtVlad Автор
      13.03.2022 02:20

      Здравствуйте. И над интерфейсом буду работать и над его внутренней частью. Надо добавить модуляции (SSB хотя бы). Оптимизировать код, для большего быстродействия. На счет ввода частоты согласен с Вами, а так же спасибо за подсказку, связанную с разделением пробелами для большей читаемости. Добавлю возможность ввода с клавиатуры, чтобы и так и так можно было указывать частоту. А вот на счет единиц ползунка мне надо подумать. Потому что это не ваты или какие-то другие единицы, а амплитуда синуса, подаваемого в устройство. Но от амплитуды и от максимальной мощности этого устройства, можно перевести единицы из "попугаев" в мВт. Об обновлениях буду писать тут. И конечно же, буду ждать Ваши дальнейшие замечания и советы.


  1. Recosh
    13.03.2022 07:53

    Круто, что продолжают появляться плагины! А я вот переехал с sdr# на CubicSDR, в основном из за аппаратного ускорения при рендеринге диаграмм и водопада, так же возможность слушать сразу несколько частот (что на HackRF очень актуально с его шириной), поддержка шумодава на любой модуляции. И автоматическая параллельная запись только во время активности канала. Ползунки регулирования усиления встроены в интерфейс. Качество звука при прослушивании fm станций выше чем у sdr# в дефолтных настройках.

    Но нет возможности подключать плагины и делать iq запись всего потока. Но эт open source, можно допилить. Трудно понять, как взаимодействовать с интерфейсом сначала...


  1. SerJ_82
    13.03.2022 13:56

    Можно ли сказать что как приемник RTL-SDR v 3 (оригинал конечно) - лучше чем HackRF?


    1. Recosh
      13.03.2022 20:41

      У HackRF ширина канала больше и драйвера open source, не думаю что лучше. Вот SDRplay RSP1A ещё по конкурирует так как позволяет с большой битностью оцифровывать сигнал, что повышает качество приёма.


    1. BerArtVlad Автор
      14.03.2022 01:05

      Если поискать в Интернете ответ на ваш вопрос, то многие пишут, что HackRF сильнее шумит, чем RTL-SDR. (Например, в комментариях под этим видео https://youtu.be/sOPBRAH6_4U). Сам лично сравнение не производил. А так, как уже сказал Recosh, ширина канала больше, при этом меньше греется при работе.


      1. Recosh
        14.03.2022 08:43

        В видео выкрутил усиление на максимум... На сколько я понимаю усилители в HackRF сильнее, чем RTL-SDR выкрученные на максимум. Конечно он увидит сторонние шумы... Он их усиливает :D