Передача радиосигналов с помощью HackRF

Все, что касается связи: радио, телефон и другие способы связи

Передача радиосигналов с помощью HackRF

Сообщение Юра » 02 май 2016, 15:49

https://geektimes.ru/post/275168/
HackRF — это уникальное устройство, предназначенное для энтузиастов и радиолюбителей, увлеченных изучением радиосигналов, и всего что с этим связано.

Уникальность HackRF в его технических параметрах — при цене около 300$, устройство позволяет не только принимать, но и передавать радиосигналы в диапазоне 1МГц-6ГГц с шириной полосы до 20МГц. Использование HackRF практически не освещалось на Хабре и Гиктаймс, пора восполнить этот пробел.

Что касается приема радиосигналов, то тут все просто, и практически не отличается от популярного 10-долларового RTL-SDR, о котором не писал только самый ленивый. Ставится нужная DLL, запускается программа, в общем-то и все. Кто еще не слышал о таком “чуде”, могут почитать здесь же на сайте:
habrahabr.ru/post/149698
habrahabr.ru/post/149702
habrahabr.ru/post/280454
habrahabr.ru/post/200914

С приемом все достаточно просто и тривиально, технология дешевая и давно отработанная. С передачей все немного сложнее. Чем мы сейчас и займемся.

Низкий уровень — С/С++

Первый способ — общение напрямую с устройством. HackRF имеет библиотеку с открытым API, пример его использования можно посмотреть на сайте автора в утилите hackrf_transfer: github.com/mossmann/hackrf/blob/master/host/hackrf-tools/src/hackrf_transfer.c. Для тех, кто хоть раз работал со звуковой картой, принцип будет понятен — определенное число раз в секунду вызывается callback-функция, буфер для которой надо заполнить данными. Казалось бы все просто, но есть одно “но” — HackRF это SDR. Software Defined Radio. Это значит, что просто отправить WAV-файл в буфер не выйдет, ничего не передастся. Мы программно должны сформировать комплексный (IQ) сигнал для всей требуемой полосы приемника, чтобы его ЦАП в свою очередь, отправил “это” в эфир. Также необходимо задать ряд настроек (частота, усиление, полоса пропускания), что тоже можно посмотреть в исходнике.

HackRF поддерживает работу с различной шириной полосы пропускания, от 1 до 20МГц, и эту полосу необходимо сформировать программно. Мы этим заниматься не будем. Математика нужна достаточно серьезная, так что перейдем сразу ко второму способу — использованию пакета GNU Radio.

GNU Radio

GNU Radio — это открытый и бесплатный пакет программ, предназначенный для цифровой обработки сигналов в научных, образовательных или коммерческих целях. Система состоит из большого числа готовых блоков, имеющих интерфейс на языке Питон, сами блоки написаны на С++. В GNU Radio входит также визуальный редактор GNURadio Companion, позволяющий визуально соединять блоки в готовое “устройство”, вообще не используя язык программирования.

Итак, устанавливаем драйвера для Hack RF, устанавливаем GNU Radio (он может быть поставлен на Linux или Mac OS, либо скачан как Linux Live CD), запускаем в консоли “gnuradio-companion”. Теперь все готово, можно приступить к передаче.

Формально HackRF может передать что угодно в пределах своей полосы пропускания, например зная протокол передачи данных, можно рулить радиоуправляемой машинкой или управлять дверным звонком. Рассмотрим самые тривиальные примеры: амплитудную (AM) и частотную (FM) модуляцию.

Частотная модуляция

Для передачи в режиме FM запустим gnuradio-companion и создадим в программе такой граф.


Его структура довольно проста. В качестве источника был выбран WAV-файл с частотой дискретизации 44100, блок Multiply Const умножает сигнал на 2 (исходный звук был довольно-таки тихий), следующий блок WBFM Transmit и делает всю “магию” — преобразует наш вещественный сигнал с частотой 44100 в комплексный сигнал с частотой дискретизации 88200. Следующий блок Resampler повышает частоту дискретизации до выбранных для этого примера 2.4МГц. Частота передачи установлена на 87.5МГц, это была самая низкая частота FM-радио, поддерживаемая моим смартфоном, и она была свободна от FM-станций.

Результат — запускаем граф в GNU Radio, на HackRF загорается красный светодиод TX, в смартфоне слышен наш файл.

Интересно посмотреть как реально это работает. В консоли GNU Radio можно видеть следующий вывод:
Executing /opt/local/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python -u /Users/XXXX/Documents/Projects/Gnuradio/top_block.py

Его содержимое — готовая программа на Питоне, реализующая нашу передачу!
Исходный код
Ее можно сохранить в отдельную папку и использовать как угодно, модифицировать и пр. Это достаточно удобно, т.к. позволяет например, дописать свой UI, сделать запуск по расписанию, в общем, все ограничено только фантазией программиста.

Немного модифицируем граф, чтобы запускать программу в режиме “узкой ЧМ”, которая используется в рациях и радионянях:


Отличие небольшое — мы установили блок NBFM, а частоту передачи установили в 433.075МГц — первый канал LPD-диапазона. Включаем рацию, и слышим звук. Кстати, GNU Radio позволяет использовать в качестве источника не только WAV-файл, но и микрофон, так что программу легко переделать для передачи голосовых сообщений.

Амплитудная модуляция

Для тех у кого остался бабушкин приемник КВ-диапазона (хотя лучше конечно хотя бы Degen 1103 или IC-R9500), будет интересно попробовать режим AM. Для этого создаем следующий граф:


Здесь для конвертации данных в комплексный сигнал мы используем блок преобразования Гильберта. В остальном суть не изменилась, сигнал ресемплируется до нужной частоты дискретизации и отправляется в HackRF.

Еще больше SDR

Напоследок покажем, что HackRF может куда больше, чем просто рация из «Связного» ценой в 1000р. Это ведь полноценное Software Defined Radio, на котором можно передать что угодно. Чтобы показать легкость работы с “цифрой” в GNU Radio, дополним граф FM-трансляции так, чтобы HackRF передавал информацию одновременно на 2х частотах.


Здесь мы добавляем второй файл, повторяем ту же самую структуру. Но полученные данные умножаем на комплексный синусоидальный сигнал с частотой 125КГц, что эквивалентно сдвигу частоты на эти 125КГц, в итоге второй поток данных будет транслироваться на частоте 433075+125 = 433200, что соответствует 6му каналу LPD. Теперь HackRF передает одновременно 2 звуковых файла на 2х разных частотах. Можно добавить и 3й, все ограничено лишь шириной полосы пропускания и мощностью компьютера.

На этом все. Заинтересовавшиеся темой GNU Radio могут найти туториалы в сети, их довольно-таки много.

Напоследок. HackRF не является полноценной радиостанцией, его мощность слишком мала и составляет около 20мВт, да и КПД штатной антенны менее 1%. Это скорее устройство для экспериментов с сигналами в «ближней зоне», в пределах офиса или квартиры. Если же кто-то захочет экспериментировать с более мощными сигналами, обязательно стоит соблюдать правила распределения радиочастотного спектра, чтобы не мешать другим.
Юра
Живу я здесь
Живу я здесь
 
Сообщения: 6456
Зарегистрирован: 02 фев 2011, 19:51
Откуда: Саратов

Re: Передача радиосигналов с помощью HackRF

Сообщение slav-or-slave » 02 май 2016, 19:32

интересная игрушка))
Изображение
Если у человека есть зачем, он вынесет любое как.© Виктор Франкл
CW
Аватара пользователя
slav-or-slave
Мастер
Мастер
 
Сообщения: 1809
Зарегистрирован: 18 янв 2010, 23:00
Откуда: 31

Re: Передача радиосигналов с помощью HackRF

Сообщение estimata » 02 май 2016, 21:36

Насчет КПД ее - думаю он небольшой. Надо отдельные антенны.
Программирование - не уверен что будет так уж просто с ним.
Цена на алиэкспресс 20 500.

Поэтому согласен с slav-or-slave - это больше всего походит на игрушку. Хотя, не отрицаю, и пользу может принести.
Мудрый учится на чужих ошибках, умный - на своих, а дурак повторяет их из раза в раз.
ликбез от дилетанта estimata
Аватара пользователя
estimata
Архивариус
Архивариус
 
Сообщения: 8697
Зарегистрирован: 03 мар 2011, 17:51

Re: Передача радиосигналов с помощью HackRF

Сообщение Юра » 02 май 2016, 23:18

это то же самый SDR приёмник но с выведенным сигналом гетеродина. Основное достоинство - широкополость канала передачи вкупе с достаточной лёгкостью программирования вне стандартных полос. Достаточно специфическая техника пошла в массы.
Юра
Живу я здесь
Живу я здесь
 
Сообщения: 6456
Зарегистрирован: 02 фев 2011, 19:51
Откуда: Саратов


Вернуться в Связь

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1