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

Тестирование того, как это работает, под катом.
Современные компьютеры работают на весьма высоких тактовых частотах, а любой генератор фактически является маломощным передатчиком. Программно изменяя на Raspberry Pi частоту PLLD clock multiplier, можно прямо с ножки микропроцессора передавать радиосигнал. Метод впервые был опробован еще в 2013 году, после чего концепция получила развитие, и сейчас на Github можно найти несколько проектов: передавать можно разные типы сигналов, AM, FM, CW, SSB, WSPR, DCF77 и даже изображения в режиме «медленной развертки» (SSTV). Можно передавать даже Stereo FM с RDS, также в некоторых программах есть поддержка USB Audio, что позволяет использовать Raspberry Pi и какжучок радиомикрофон.
Разумеется, выходная мощность мала, и состав��яет примерно 10мВт. Но тем не менее, это работает. И параноикам на заметку: да, современный компьютер гипотетически может передавать радиосигнал прямо с платы. Правда дальность невысока, и дальше соседней комнаты такой сигнал не уйдет. Но тем не менее, как гипотетический способ утечки информации, такой способ имеет место быть.
Как это работает, приступим к тестированию.
В качестве подопытного, был взят Raspberry Pi3 и установлена программа rpitx. Вместо антенны на GPIO18 был надет кусок провода от макетной платы.
В качестве анализатора спектра использовался SDR-приемник SDRPlay v2. Им же проверялось, свободна ли тестируемая частота, нет ли там каких-либо сигналов или переговоров.
В этом режиме передается простой сигнал на указанной частоте:
Включение «передатчика» занимает несколько секунд, после чего на экране SDR виден пик примерно на указанной частоте.

Как можно видеть, помимо центрального пика, есть увы, множество побочных. Суть в том, что как и любой микропроцессор, Raspberry Pi в реале передает прямоугольный сигнал. Который имеет кучу гармоник, и вместо одной частоты в эфир летит реально целая куча мусора на всех кратных частотах. На SDR можно видеть, что помехи от передачи «летят» по всему спектру, вплоть до гигагерца.
Пр�� мощности 10мВт это не является проблемой, но из этого следует важное замечание: желание подключить к Raspberry Pi усилитель мощности было бы плохой идеей. Либо надо использовать ФНЧ, который будет отсекать более высокие частоты, но в таком случае теряется вся суть простоты идеи.
Эта же программа может передавать wav-файл в режиме Narrow FM, что может использоваться например, для прослушивания на портативных радиостанциях.
Вначале создаем файл с данными — конвертируем файл в IQ-данные:
Запускаем передачу:
Но как я не пробовал, звука так и не получилось, только «палки» на спектре. То ли программа не поддерживает Raspberry Pi 3, то ли в ней какая-то другая ошибка.
Для передачи полноценного FM-радио есть программа PiFmRds, скачать которую можно с guthub. В отличие от предыдущей версии, программа использует другой пин, GPIO4, так что «антенну» пришлось переставить.
Запускаем программу из командной строки:
Работает… но звук очень высокий и пищащий, по частоте выше раза в 2, как у персонажей в мультфильме Диснея. Методом научного тыка подбираю параметр ppm (коррекция), командная строка получилась такой:
Частота передачи, как оказалось, тоже съехала почти на мегагерц, да и спектр вдвое шире, чем у обычной нормальной станции:

Звук по качеству, примерно как из телефонной трубки, но в принципе вполне разборчивый. Дальность на удивление, оказалась вполне неплохой, в пределах всей квартиры сигнал вполне уверенно ловился на обычный FM-приемник. И это причем, на совершенно несогласованную антенну, КПД которой крайне мал. Кстати, используя специальный метод узкополосной передачи WSPR и настроенные антенны, с 10мВт мощности радиолюбителям удавалось передать сигнал на расстояние до 2000км.
Метод передачи скорее интересен, как proof of concept. Хорошего качества звука добиться так и не удалось, да и с частотами что-то непонятное, несовпадение весьма сильное. Но сам факт, что только программным методом, без какого-либо внешнего «железа» вообще, можно передавать сигналы в любом виде модуляции, с частотой до 500МГц, достаточно интересен. Ну и практически, если нужен простой и маломощный генератор, такой способ вполне может пригодиться.
Для тех, кто захочет повторить эксперимент, пара советов:
— Не использовать короткозамкнутые антенны — короткое замыкание пина испортит Raspberry Pi. Достаточно простого куска провода, в лучшем случае, дипольной антенны, длину «усов» можно посчитать в любом онлайн-калькуляторе.
— Не использовать усилитель мощности — сигнал содержит слишком много шумов, и будет создавать помехи другим службам.
При желании в youtube можно также найти множество видео-туториалов с демонстрацией, например вот этот.
Всем удачных экспериментов.
Недавно мне понадобился маломощный радиопередатчик для домашних экспериментов. Ничего подходящего под рукой не было, и тут я вспомнил описанный еще несколько лет назад на радиолюбительских сайтах метод — использовать в качестве передатчика непосредственно Raspberry Pi. Метод не нов и известен несколько лет, но похоже на geektimes он не описывался ни разу (или я плохо искал), да и опрос знакомых показал что о таком способе передачи никто не знает.
Исправим этот момент.

Тестирование того, как это работает, под катом.
Принцип
Современные компьютеры работают на весьма высоких тактовых частотах, а любой генератор фактически является маломощным передатчиком. Программно изменяя на Raspberry Pi частоту PLLD clock multiplier, можно прямо с ножки микропроцессора передавать радиосигнал. Метод впервые был опробован еще в 2013 году, после чего концепция получила развитие, и сейчас на Github можно найти несколько проектов: передавать можно разные типы сигналов, AM, FM, CW, SSB, WSPR, DCF77 и даже изображения в режиме «медленной развертки» (SSTV). Можно передавать даже Stereo FM с RDS, также в некоторых программах есть поддержка USB Audio, что позволяет использовать Raspberry Pi и как
Разумеется, выходная мощность мала, и состав��яет примерно 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 можно также найти множество видео-туториалов с демонстрацией, например вот этот.
Всем удачных экспериментов.
