Передаем радиосигналы с помощью Raspberry Pi: тестирование

Привет geektimes.

Недавно мне понадобился маломощный радиопередатчик для домашних экспериментов. Ничего подходящего под рукой не было, и тут я вспомнил описанный еще несколько лет назад на радиолюбительских сайтах метод — использовать в качестве передатчика непосредственно Raspberry Pi. Метод не нов и известен несколько лет, но похоже на geektimes он не описывался ни разу (или я плохо искал), да и опрос знакомых показал что о таком способе передачи никто не знает.

Исправим этот момент.

Передаем радиосигналы с помощью Raspberry Pi: тестирование

Тестирование того, как это работает, под катом.

Принцип

Современные компьютеры работают на весьма высоких тактовых частотах, а любой генератор фактически является маломощным передатчиком. Программно изменяя на Raspberry Pi частоту PLLD clock multiplier, можно прямо с ножки микропроцессора передавать радиосигнал. Метод впервые был опробован еще в 2013 году, после чего концепция получила развитие, и сейчас на Github можно найти несколько проектов: передавать можно разные типы сигналов, AM, FM, CW, SSB, WSPR, DCF77 и даже изображения в режиме «медленной развертки» (SSTV).

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

Как это работает, приступим к тестированию.

Тестирование

В качестве подопытного, был взят Raspberry Pi3 и установлена программа rpitx. Вместо антенны на GPIO18 был надет кусок провода от макетной платы.

Фото

Как можно видеть, ничего лишнего 🙂

В качестве анализатора спектра использовался SDR-приемник SDRPlay v2. Им же проверялось, свободна ли тестируемая частота, нет ли там каких-либо сигналов или переговоров.

1. Режим VFO

В этом режиме передается простой сигнал на указанной частоте:

sudo ./rpitx -m VFO -f 235000000

Включение «передатчика» занимает несколько секунд, после чего на экране SDR виден пик примерно на указанной частоте.

Как можно видеть, помимо центрального пика, есть увы, множество побочных. Суть в том, что как и любой микропроцессор, Raspberry Pi в реале передает прямоугольный сигнал. Который имеет кучу гармоник, и вместо одной частоты в эфир летит реально целая куча мусора на всех кратных частотах. На SDR хорошо видно, что помехи от передачи «летят» по всему спектру, вплоть до гигарерца.

При мощности 10мВт это не является проблемой, но из этого следует важное замечание: желание подключить к Raspberry Pi усилитель мощности было бы плохой идеей.

2. Режим Narrow FM

Эта же программа может передавать wav-файл в режиме Narrow FM, что может использоваться например, для прослушивания на портативных радиостанциях.

Вначале создаем файл с данными — конвертируем файл в IQ-данные:

./pifm sampleaudio.wav out.fm

Запускаем передачу:

sudo ./rpitx -m RF -i out.fm -f 235000000

Но как я не пробовал, звука так и не получилось, только «палки» на спектре. То ли программа не поддерживает Raspberry Pi 3, то ли в ней какая-то другая ошибка.

3. Режим WFM

Для передачи полноценного FM-радио есть программа PiFmRds, скачать которую можно с guthub. В отличие от предыдущей версии, программа использует другой пин, GPIO4, так что «антенну» пришлось переставить.

Запускаем программу из командной строки:

sudo ./pi_fm_rds -audio sound.wav -freq 87.0

Работает… но звук очень высокий и пищащий, по частоте выше раза в 2, как у персонажей в мультфильме Диснея. Методом научного тыка подбираю параметр ppm (коррекция), командная строка получилась такой:

sudo ./pi_fm_rds -audio sound.wav -freq 87.0 -ppm -320000

Частота передачи, как оказалось, тоже съехала почти на мегагерц, да и спектр вдвое шире, чем у обычной нормальной станции:

Звук по качеству, примерно как из телефонной трубки, но в принципе вполне разборчивый. Дальность на удивление, оказалась вполне неплохой, в пределах всей квартиры сигнал вполне уверенно ловился на обычный FM-приемник. И это причем, на совершенно несогласованную антенну, КПД которой крайне мал. Кстати, используя специальный метод узкополосной передачи WSPR и настроенные антенны, с 10мВт мощности радиолюбителям удавалось передать сигнал на расстояние до 2000км.

Выводы

Метод передачи скорее интересен, как proof of concept. Хорошего качества звука добиться так и не удалось, да и с частотами что-то непонятное, несовпадение весьма сильное. Но сам факт, что только программным методом, без какого-либо внешнего «железа» вообще, можно передавать сигналы в любом виде модуляции, с частотой до 500МГц, достаточно интересен. Ну и практически, если нужен простой и маломощный генератор, такой способ вполне может пригодиться.

Для тех, кто захочет повторить эксперимент, пара советов:

— Не использовать короткозамкнутые антенны — короткое замыкание пина испортит Raspberry Pi. Достаточно простого куска провода, в лучшем случае, дипольной антенны, длину «усов» можно посчитать в любом онлайн-калькуляторе.
— Не использовать усилитель мощности — сигнал содержит слишком много шумов, и будет создавать помехи другим службам.

При желании в youtube можно также найти множество видео-туториалов с демонстрацией, например вот этот.

Всем удачных экспериментов.

 
Источник

Читайте также