В один прекрасный момент хочется релизовать что-то особое, что отсутвует в стандартной поставке GnuRadio. Выход из этого один — написание своего блока. Информациии об этом не так много, и большая часть информации сконцентрированна в официальной документации.
В этой статье я покажу как написать простой вспомогательный блок для GnuRadio используя Python. Это блок можно будет использовать для простого управления внешними устройствами, например включения усилителя, переключения антенного коммутатора и прочих вещей.
Архив автора: Igor
DEFCON NN 0x03 «Технология SDR — радиоотмычка XXI века»
Анонс: доклад «Технология SDR: радиоотмычка XXI века» 14 мая
14 мая я выступлю с докладом «Технология SDR: радиоотмычка XXI века» на нижегородском DEF CON. Все интересующиеся могут получить дополнительную информацию на сайте http://defcon-nn.ru/
[Перевод] Заметки o M&M Clock Recovery
В составе GnuRadio существует такой блок как M&M clock recovery. Его задача — восстанавливать семплы из сигнала с одинаковой частотой и фазой, отправляемые передатчиком. Это необходимо, к примеру, когда вы хотите извлечь символы из асинхронного цифрового сигнала. Блок позволяет определить с центры единиц и нулей в поступающем сигнале.
HackRF как трансивер: Часть 4. Переключение между приемом и передачей
По итогам трех последний статей мы имеем граф для приема, и граф для передачи. От полнофункционального трансивера на HackRF нас отделяет лишь отсутсвие возможности переключиться с приема на передачу быстро. Давайте исправлять это упущение!
Включаем часть схемы ответственной за прием, которую мы временно выключили в прошлой части.
HackRF как трансивер: Часть 3. Передача NBFM
В прошлой статье мы успешно собрали NBFM приемник на HackRF. Теперь соберем передатчик.
Выделите все блоки на схеме кроме переменных, и нажмите кнопку «D» чтобы отключить их.
Схема передатчика еще проще чем схема приемника. Вот она:
HackRF как трансивер: Часть 2. Приём NBFM
HackRF как трансивер: Часть 1. Установка SoapySDR
Наконец появилось время писать статейки. Ну что же, поехали!
Приобретал я HackRF с прицелом использовать его как трансивер без границ, с возможностью вещать в эфире на любой частоте и любой модуляции. И вот HackRF в моих руках, принимает и передает данные с помощью блока OsmoSDR. Здорово! Ну что же, соберем граф с трансивером. Кидаем на схему блоки «osmocom Sink» и «osmocom Source», жмем кнопку «Run» и… Получаем облом и кучу ошибок при запуске! Почему? Все просто, блоки пытаются независимо открыть устройство на примем и передачу одномоментно , но HackRf, по природе своей может одномоментно работать либо на прием, либо на передачу. Проблема, однако.
Я начинаю усердно гуглить, и нахожу людей столкнувшихся с той же проблемой. Решений на тот момент не существовало. Печаль. И я отложил эту проблему, надеясь что сообщество пользователей GnuRadio и HackRF как-то решит ее в итоге.
И вот, прошой осенью я решил посмотреть что нового.
И ура, наконец нашлись смелые люди что победили ее, написав драйвер-прослойку между Oscmocom блоками и драйвером HackRF.
Перед Новым Годом меня спросили на Radioscanner.Ru, можно ли как-то заставить работать HackRF трансивером? И я решил написать эту статью с подробными инструкциями.
Читать далее
Блок Patterned Interleaver
В процессе исследования чужих графов GnuRadio, увидел использование такого блока как «Patterned Interleaver». Что это? Как работает? Надо разобраться.
Как открыть HackRF One
Решил написать, как открыть пластмассовый корпус HackRf дабы добраться до платы. А то по незнанию я уже чуток повредил корпус. Не повторяйте моих ошибок 😉
Итак, как его открыть его аккуратно.
Нужно всего лишь открутить фиксирющие гайки на антенном входе, и входах синхронизации.
И осторожно надавливая на бока (там 3 пластиковые защелки) открыть корпус.
Обзор 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)
Вот как-то так оно работает. Не следует удивляться уровню сигнала, так как это принималось все квартире на антенну от Baofeng. 🙂
Обзор HackRf One: Часть 1 Распаковка и подключение.
Наступила весна. Солнышко начало пригревать, запели птички. И помимо этих чудесных вещей случилось долгожданное событие — ко мне приехал заказаный перед Новым Годом HackRf! Он попал ко мне в руки буквально пару часов назад, и мне нетерпится поиграть с ним. Пока — распаковка и обзор. Открываем волшебную коробочку!
Pinboard для Raspberry Pi
Нравятся ли вам пинборды как они нравятся мне? Что может быть удобнее при отладке, чем воткнуть датчик в разъемы и воткнуть пару проводков. Может собрать и для малинки пинборд? Почему нет? 😉
Переделываем ICOM PCR1000 в SDR приемник.
Посвящается участнику форума radioscanner.ru STABO,
которому я дал обещание написать эту статью,
и чьи напоминания не давали спать моей совести.
🙂
Как я уже писал в предыдущей заметке, я удачно победил приемник PCR-1000 и смог им управлять из GnuRadio. Все прекрасно, но вот хочется удобств. Хочется видеть спектр, и не упускать интересные вещи происходящие на пару килогерц от той частоты на которой ты сейчас находишься. В родном софте для PCR1000 имеется возможность видеть спектр. Изучив ситуацию поглубже я обнаружил что все данные для отображения на спектре передаются непосредственно через COM порт, а программа лишь рисует пики. Повозившись немного с этими данными, и попробовав их отобразить, я плюнул на это дело и решил искать обходные пути. И этот путь был найден.
Читать далее
Управляем Icom PCR-1000 при помощи GnuRadio
Пару лет назад, я приобрел свой первый более-менее серьезный радоприемник: Icom PCR-1000. Одной из причин, по которой я выбрал именно его, было управление по RS-232. Итак, получил я его, подключил, погонял под Windows. Красота! Лишь одно омрачало прекрасное будущее, я пользуюсь Linux и FreeBSD, а родного софта от Icom под *nix системы как-то не наблюдалось.
Пошарившись в Интернете, я обнаружил что протокол управления приемником довольно прост, а посему почему бы не попробовать написать программу управления самому? Что ж, расчехляем свой любимый текстовый редактор, понеслись!
Читать далее