Software Defined Radio — как это работает? Часть 5

Привет Хабр.

В предыдущей части был рассмотрен прием сигналов с помощью GNU Radio. Сейчас мы рассмотрим обратную задачу — передачу сигналов различного вида модуляции.

hf5mvgtsl3azf_vtaht8ysolvje.png

Как и в случае приема, с помощью GNU Radio можно создать сложную программную систему для передачи сигналов, не написав ни одной строчки кода.

Железо


В отличие от дешевого приемника RTL SDR V3, купить который можно за 30$, для работы на передачу нужно железо посерьезнее и подороже. Впрочем, выбор сейчас достаточно велик. Я не рассматриваю здесь чисто «радиолюбительские» SDR-трансиверы, т.к. в них от SDR мало что осталось и нам они не подойдут, мы рассмотрим полноценные SDR, предназначенные для экспериментов с ЦОС, которые позволяют передавать что угодно в нужном нам формате.

LimeSDR и LimeSDR Mini
rtsgh5qylhyegiv-q_yzxjcdrbg.png

Интересная серия устройств, покрывают диапазон приема/передачи примерно от 10МГц до 3.5ГГц. LimeSDR формально работает от 100КГц, но чувствительность там по отзывам, никакая.
Цена вопроса около 200$, но плату бывает проблематично купить, т.к. продаются они исключительно через crowdsupply и не всегда бывают в наличии. Авторы собрали денег на 2 млн.$, но так и не обзавелись собственным веб-сервером и полноценным магазином. Впрочем, к их чести, все заказы были отправлены.

Adalm Pluto SDR
47hfsytzmd0rm-jw2wrp4m-hisc.png

Плата от Analog Devices, рассчитанная в основном на студентов. Дешевый вариант «SDR для бедных» примерно за 120$, диапазон приема/передачи от 300МГц до 3.8ГГц.

HackRF
7abdrdvdptr5sykkx-s9qskmxmo.png

Одна из первых плат такого рода, появившийся лет 5–6 назад, имеет частотный диапазон от 1МГц до 6ГГц. Плата довольно старая и для своих параметров, дорогая (300–400$), не умеет работать в full duplex и имеет 8-битный ЦАП/АЦП. Сейчас появились китайские клоны, но про их качество ничего сказать не могу.

Есть и другие модели (Ettus Research, BladeRF, Red Pitaya), они интересны, но недешевы и большинство вряд ли будет их брать. Для начинающего LimeSDR наверно был бы наиболее оптимальным выбором. Но надо подчеркнуть, что все эти платы созданы для опытов с цифровой обработкой сигналов — это не трансиверы в радиолюбительском понимании, их выходная мощность порядка 50 мВт, в устройстве нет аттенюаторов, усилителей, фильтров, и для «CQ DX» они не оптимизированы совсем (да и даже р/л софта под них обычно нет). Хотя я передавал с HackRF wspr-сигнал на 7 и 14МГц, и его принимали в 1000 км, что для 50 мВт и комнатной антенны вполне неплохой результат.

Разумеется, этот список не претендует на полный обзор, но для общего понимания, надеюсь, достаточно. Есть полезная табличка, хотя и немного устаревшая, но по ней можно примерно понять параметры разных устройств:
rtgtj603l3nuegylltrkdwyxuy8.png

Софт


Для начала, важное примечание: все эксперименты при работе на передачу следует проводить с минимальной мощностью и в разрешенных диапазонах, чтобы не мешать другим службам. В принципе, с 10 мВт сложно кому-то помешать, но радиоэфир тоже нужно содержать в чистоте;)

Итак, запускаем GNU Radio и приступим (если кто пропустил предыдущую часть, желательно ее прочитать чтобы понять лучше как пользоваться этой программой).

Важно понять общий принцип — так как радио у нас Software Defined, то передавать мы можем что угодно, в пределах полосы пропускания устройства. Мы должны лишь сформировать нужный цифровой поток, а ЦАП передаст все «как есть» в эфир. Как было написано в предыдущей части, выход в GNU Radio называется Sink, конкретное название будет зависеть от модели устройства.

Простой тон
Простейший тест: просто соединим источник синусоидального сигнала с передатчиком.
ot_0qu7tzag5ve68tgyeyhqknoy.png

Не особо интересно, но для какой-либо проверки, или как простейший генератор сигналов, может быть полезно. Запускаем в качестве контрольного приемника RTL SDR, и видим наш сигнал.

4uovckxnfk755njcmdwl6fiu65a.png

NFM
Пойдем дальше — рассмотрим, как передать что-то более полезное, например звук с WAV-файла или микрофона. Для этого в GNU Radio есть готовый блок NBFM Transmit. Он делает всю необходимую работу — преобразует наш аудиопоток в комплексный IQ-сигнал с частотной модуляцией, который «понимает» SDR.
8rzppxdwvw7cmbvoovlbrrhlegs.png

Результат на скриншоте — звук передается, и его можно услышать, если выбрать FM. Принимать такой сигнал также можно на портативные радиостанции.

o5ki0g4pivdfaztssg1bpcegdxm.png

Как можно видеть, частота приема и передачи была изменена на 433МГц — безлицензионный LPD-диапазон.

Управление беспроводным выключателем
Рассмотрим теперь что-нибудь поинтереснее. Раз уж мы заговорили о диапазоне 433МГц, можно продемонстрировать один «грязный хак» — воспроизведение заранее записанного сигнала. Это позволит не разбираться с кодированием сигнала, а просто записать и передать его, не разбирая что внутри. Хак «грязный» практически буквально, т.к. мы будем воспроизводить записанный с эфира сигнал, который далеко не идеален.

Для примера возьмем дешевый беспроводной выключатель на 434МГц. Я использовал примерно такой, купленный в Mediamarkt.
z1fox4b7prlqoz5fcbo0_ddgcq0.png

Мы не будем разбираться с его форматом, а просто запишем сигнал «как есть». Для этого соберем несложную схему в GNU Radio.

wtkwpndalrvyklqkic99oziw71s.png

Частота дискретизации была выбрана небольшой, чтобы не писать слишком широкую полосу — файл будет занимать много места, да и лишнее будет передаваться в эфир.
FFT Sink нужен для визуализации, чтобы убедиться что сигнал действительно есть:

w4xinewgnmero7mty7cg_osydcu.png

Включаем запись, нажимаем кнопку на пульте, выключаем запись. Записанный файл, кстати, можно открыть в Cool Edit и убедиться, что сигнал записан нормально:

2ftj-agye4k0aezrhdnsfmcglyu.png

Теперь «собираем» передающую часть схемы: загружаем сигнал из файла и просто отправляем его на передачу.

05dzxuviwfgt9wmfjidn7mpkury.png

Отдельно стоит отметить блок Throttle, который указывает, с какой частотой дискретизации читать данные из файла (в самом файле этой информации нет). Блок Multiply Const усиливает сигнал, на тот случай если его уровень в записи был недостаточен.

Дальше все просто — запускаем передатчик, убеждаемся что лампа загорается :) На полной мощности передачи удалось зажечь лампу из другого конца квартиры. Однако, способ, как уже говорилось, достаточно «грязный» — сам сигнал неидеален, да и передается в эфир все что есть, включая записанные шумы и возможно, случайно попавшие в запись сигналы других устройств. Но для тестов или управления радиоуправляемой машинкой в пределах комнаты вполне сойдет.

Заключение


Как можно видеть, SDR предоставляет достаточно обширное поле для экспериментов с разными сигналами, и это вполне несложно.

В одну часть все задуманное опять не влезло. В следующей части будут рассмотрены более сложные виды модуляции.

© Habrahabr.ru