Создание простого Python блока для GnuRadio

В один прекрасный момент хочется релизовать что-то особое, что отсутвует в стандартной поставке GnuRadio. Выход из этого один — написание своего блока. Информациии об этом не так много,  и большая часть информации сконцентрированна в официальной документации.
В этой статье я покажу как написать простой вспомогательный блок для GnuRadio используя Python. Это блок можно будет использовать для простого управления внешними устройствами, например включения усилителя, переключения антенного коммутатора и прочих вещей.

Читать далее

Анонс: доклад «Технология SDR: радиоотмычка XXI века» 14 мая

14 мая я выступлю с докладом «Технология SDR: радиоотмычка XXI века» на нижегородском DEF CON. Все интересующиеся могут получить дополнительную информацию на сайте http://defcon-nn.ru/

[Перевод] Заметки o M&M Clock Recovery

В составе GnuRadio существует такой блок как M&M clock recovery. Его задача — восстанавливать семплы из сигнала с одинаковой частотой и фазой, отправляемые передатчиком. Это необходимо, к примеру, когда вы хотите извлечь символы из асинхронного цифрового сигнала. Блок позволяет определить с центры единиц и нулей в поступающем сигнале.

Читать далее

NFM transmitter using HackRF and GnuRadio

HackRF как трансивер: Часть 4. Переключение между приемом и передачей

По итогам трех последний статей мы имеем граф для приема, и граф для передачи. От полнофункционального трансивера на HackRF нас отделяет лишь отсутсвие возможности переключиться с приема на передачу быстро. Давайте исправлять это упущение!

Включаем часть схемы ответственной за прием, которую мы временно выключили в прошлой части.

Читать далее

HackRF NFM передатчик в GnuRadio

HackRF как трансивер: Часть 3. Передача NBFM

В прошлой статье мы успешно собрали NBFM приемник на HackRF. Теперь соберем передатчик.
Выделите все блоки на схеме кроме переменных, и нажмите кнопку «D» чтобы отключить их.
Схема передатчика еще проще чем схема приемника. Вот она:

Читать далее

HackRF как трансивер: Часть 2. Приём NBFM

После того как мы установили SoapyHackRf драйвер, можно заняться сборкой NBFM приёмника в GnuRadio.

Упрощено, наша схема будет состоять из следующих частей:
block-nfm-rx

Запускаем GnuRadio и займемся первым блоком: источник сигнала.

Читать далее

Логотип SoapySDR

HackRF как трансивер: Часть 1. Установка SoapySDR

Наконец появилось время писать статейки. Ну что же, поехали!

Приобретал я HackRF с прицелом использовать его как трансивер без границ, с возможностью вещать в эфире на любой частоте и любой модуляции. И вот HackRF в моих руках, принимает и передает данные с помощью блока OsmoSDR. Здорово! Ну что же, соберем граф с трансивером. Кидаем на схему блоки «osmocom Sink» и «osmocom Source», жмем кнопку «Run» и… Получаем облом и кучу ошибок при запуске! Почему? Все просто, блоки пытаются независимо открыть устройство на примем и передачу одномоментно , но HackRf, по природе своей может одномоментно работать либо на прием, либо на передачу. Проблема, однако.
Я начинаю усердно гуглить, и нахожу людей столкнувшихся с той же проблемой. Решений на тот момент не существовало. Печаль. И я отложил эту проблему, надеясь что сообщество пользователей GnuRadio и HackRF как-то решит ее в итоге.
И вот, прошой осенью я решил посмотреть что нового.
И ура, наконец нашлись смелые люди что победили ее, написав драйвер-прослойку между Oscmocom блоками и драйвером HackRF.
Перед Новым Годом меня спросили на Radioscanner.Ru, можно ли как-то заставить работать HackRF трансивером? И я решил написать эту статью с подробными инструкциями.
Читать далее

Микросхемы HackRF

Как открыть HackRF One

Решил написать, как открыть пластмассовый корпус HackRf дабы добраться до платы. А то по незнанию я уже чуток повредил корпус. Не повторяйте моих ошибок 😉
Итак, как его открыть его аккуратно.

Нужно всего лишь открутить фиксирющие гайки на антенном входе, и входах синхронизации.
HackRf. Открытие корпусаHackRf. Открытие корпусаИ осторожно надавливая на бока (там 3 пластиковые защелки) открыть корпус.

HackRf. Открытие корпуса

HackRf. Открытый корпус

Далее — внутренности
HackRf. Открытие корпусаHackRf. Низ платыМикросхемы HackRF Микросхемы HackRF

Обзор HackRf One: Часть 2 Настройка софта

Мы подключили HackRf к ноутбуку, и увидели что он определяется корректно. Настала пора разобраться с программной частью. Для начала нам нужно установить ПО для HackRf. К счастью все необходимое ПО уже имеется в репозитории Ubuntu. Посмотрим что там есть.
igor@ghost64:~$ apt-cache search hackrf
gqrx-sdr — Software defined radio receiver
hackrf — Software defined radio peripheral
libhackrf-dev — Software defined radio peripheral
libhackrf0 — Software defined radio peripheral
gqrx — Software defined radio receiver
gr-osmosdr — Gnuradio blocks from the OsmoSDR project

Давай разберемся кто есть кто.
hackrf — утилиты для взаимодействия с приемником
libhackrf0 — библиотека для поддержки управления HackRf сторонними приложениями
libhackrf-dev  — пакет содержащий заголовочные файлы, и прочие вещи, необходимые нам, если мы сами захотим скомпилировать какую-нибудь программу с поддержкой HackRf

Нам потребуется это все. Устанавливаем ПО командой:
$ sudo apt-get install hackrf libhackrf0 libhackrf-dev

Посмотрим что за утилиты мы установили. Пакет hackrf содержит следующие программы:
hackrf_info — вывод информации о устройстве.
hackrf_spiflash — программа для обновления прошивки в контроллере
hackrf_cpldjtag — программа для обновления прошивки в CLPD микросхеме.
hackrf_transfer — многофункциональная программа для передачи/приема данных
hackrf_max2837, hackrf_rffc5071, hackrf_si5351c — насколько я понял, данные программы служат для модификаций значений регистров в микросхемах. Возможно они нужны для разработиков прошивок в отладочных целях.

Запустим уже что-нибудь? 🙂 Что попроще, к примеру hackrf_info

$ hackrf_info
Found HackRF board.
Board ID Number: 2 (HackRF One)
Firmware Version: 2014.08.1
Part ID Number: 0x00584f5e 0x00584f5e
Serial Number: 0x00000000 0x00000000 0x15d463dc 0x186ca825

Вся информация о оборудовании как на ладони. Наиболее полезное тут для нас это Firmware Version. Сейчас в HackRf прошита самая последняя версия 2014.08.1. Проверять наличие новых прошивок нужно тут http://sourceforge.net/projects/hackrf/files/

Если в результате запуска команды вы получили ошибку:
hackrf_open() failed: HACKRF_ERROR_NOT_FOUND (-5)
то причины могут быть в следующем:

1. Отсутствие прав доступа к USB устройствам у текущего пользователя.
Проверить это можно запустив утилиту hackrf_info от имени root пользователя. Если от имени рута программа успешно считывает информацию с HackRf, а от пользователя не хочет, то значит проблема с правами. Исправить это можно, написав правило для udev
Создайте файл /etc/udev/rules.d/52-hackrf.rules , и впишите в него следующие правила:
ATTR{idVendor}==»1d50″, ATTR{idProduct}==»604b», SYMLINK+=»hackrf-jawbreaker-%k»
, MODE=»660″, GROUP=»plugdev»
ATTR{idVendor}==»1d50″, ATTR{idProduct}==»6089″, SYMLINK+=»hackrf-one-%k», MODE=
«660», GROUP=»plugdev»
ATTR{idVendor}==»1fc9″, ATTR{idProduct}==»000c», SYMLINK+=»hackrf-dfu-%k», MODE=
«660», GROUP=»plugdev»

Сохраните файл, и либо перезагрузите компьютер, либо перезапустите демон udev  командой udevadm control --reload-rules. Как вы уже догадались, этими тремя правилами мы задаем для устройств с определенными VendorID и ProductID права доступа 660, и доступ членам группы plugdev.

2. Другая причина — устаревшая версия программ и библиотек для HackRf
HackRf One поддерживается ПО версии 2014.04.1 и новее. Может получиться так, что в репозитории окажется старая версия ПО. Проверить версию установленного ПО в Debian/Ubuntu можно при помощи команды apt-cache show hackrf
Вот небольшая иллюстрация.
Ноут с Ubuntu 14.04 LTS
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION=»Ubuntu 14.04.2 LTS»

В репозитории — устаревший софт.
$ apt-cache show hackrf
Package: hackrf
Priority: extra
Section: universe/libs
Installed-Size: 120
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: A. Maitland Bottoms <bottoms@debian.org>
Architecture: i386
Version: 2013.07.1.16.d5cebd-2с этой версией жизни нет!
Depends: libhackrf0 (= 2013.07.1.16.d5cebd-2), libc6 (>= 2.7)
Filename: pool/universe/h/hackrf/hackrf_2013.07.1.16.d5cebd-2_i386.deb
Size: 29708
MD5sum: e4e8542460419a3c0e577dbd6f26ffe9
SHA1: 777ef6d304f2c5606d755291dc123c7c800ab42e
SHA256: 3200d2819cf3f67614f3dd1d2b81fe7adb5443be89e577d0499ae464ab931b21

А вот другой ноут с относительно свежей системой
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.10
DISTRIB_CODENAME=utopic
DISTRIB_DESCRIPTION=»Ubuntu 14.10″
$ apt-cache show hackrf
Package: hackrf
Priority: extra
Section: universe/libs
Installed-Size: 124
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: A. Maitland Bottoms <bottoms@debian.org>
Architecture: i386
Version: 2014.04.1-2тут в репозитории свежая версия.
Depends: libhackrf0 (= 2014.04.1-2), libc6 (>= 2.7)
Filename: pool/universe/h/hackrf/hackrf_2014.04.1-2_i386.deb
Size: 26718
MD5sum: 2658d15c2d09328049850cc41fb4e643

Выхода из этой ситуации два: либо ждать когда обновят софт в репозитории (ждать этого можно вечно 😉 ) или собрать  свежий софт самому.
Собираем его так:
1. Ставим нужный для сборки софт
sudo apt-get install build-essential cmake libusb-1.0-0-dev
2. Удаляем неактуальный софт.
sudo apt-get remove hackrf libhackrf-dev libhackrf0
3. Получаем свежие версии исходников:
git clone https://github.com/mossmann/hackrf.git
4. Идем в папку host
cd hackrf/host/
5. Выполняем следующие команды
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
make
sudo make install
sudo ldconfig
6. Теперь попытаемся выполнить команду hackrf_info (если у вас на эту команду bash выругался что-то вроде «команда не найдена», то просто откройте новое терминальное окно, и выполните в нем)
$ hackrf_info
Found HackRF board.
Board ID Number: 2 (HackRF One)
Firmware Version: 2014.08.1
Part ID Number: 0xa000cb3c 0x00584f5e
Serial Number: 0x00000000 0x00000000 0x15d463dc 0x186ca825
Ура! Работает!

Итак, софт мы поставили, и оборудование успешно определяется. Настала пора попробовать использовать HackRf как источник сигнала в GnuRadio.
Поддержку HackRf в GnuRadio обеспечивает OsmoSDR source (тот самый, что используется для работы с RTL донглами). Даже если у вас он уже был установлен ранее, то его надо будет пересобрать для поддержки HackRF. Сборка выполняется по инструкции из этой статьи . При сборке следует обратить внимание на вывод команды cmake. В ней он указывает какие компоненты он обнаружил и активировал. Запись о HackRF должна присутствовать в разделе «gr-osmosdr enabled components»
— ######################################################
— # gr-osmosdr enabled components
— ######################################################
— * Python support
— * FUNcube Dongle
— * IQ File Source
— * Osmocom RTLSDR
— * RTLSDR TCP Client
— * HackRF Jawbreaker
— * RFSPACE Receivers

После пересборки/установки OsmoSDR можно попробовать проверить работу HackRF с GnuRadio послушав FM станции с помощью графа приемника fm_radio_rx.grc Не забудьте поменять в этом графе частоту семплирования с 5 миллионов, до 8 (минимально поддерживаемую HackRF)

Прием FM станции при помощи HackRF OneВот как-то так оно работает. Не следует удивляться уровню сигнала, так как это принималось все квартире на антенну от Baofeng. 🙂

HackRf One

Обзор HackRf One: Часть 1 Распаковка и подключение.

Наступила весна. Солнышко начало пригревать, запели птички. И помимо этих чудесных вещей случилось долгожданное событие — ко мне приехал заказаный перед  Новым Годом HackRf! Он попал ко мне в руки буквально пару часов назад, и мне нетерпится поиграть с ним. Пока — распаковка и обзор. Открываем волшебную коробочку!

Читать далее

Raspberry Pi pinboard

Pinboard для Raspberry Pi

Нравятся ли вам пинборды как они нравятся мне? Что может быть удобнее при отладке, чем воткнуть датчик в разъемы и воткнуть пару проводков. Может собрать и для малинки пинборд? Почему нет? 😉

Читать далее

Переделываем ICOM PCR1000 в SDR приемник.

Посвящается участнику форума radioscanner.ru STABO,
которому я дал обещание написать эту статью,
и чьи напоминания не давали спать моей совести.
🙂

Как я уже писал в предыдущей заметке, я удачно победил приемник PCR-1000 и смог им управлять из GnuRadio. Все прекрасно, но вот хочется удобств. Хочется видеть спектр, и не упускать интересные вещи происходящие на пару килогерц от той частоты на которой ты сейчас находишься. В родном софте для PCR1000 имеется возможность видеть спектр. Изучив ситуацию поглубже я обнаружил что все данные для отображения на спектре передаются непосредственно через COM порт, а программа лишь рисует пики. Повозившись немного с этими данными, и попробовав их отобразить, я плюнул на это дело и решил искать обходные пути. И этот путь был найден.
Читать далее