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

    Привет 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. Им же проверялось, свободна ли тестируемая частота, нет ли там каких-либо сигналов или переговоров.

    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 можно также найти множество видео-туториалов с демонстрацией, например вот этот.

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

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 30

      0
      Скоро начнут делать радио-закладки с пауэр банками и нулевой малинкой — вещать сверхсекретную...важную инфу за гаражами, в подъезде, etc ;)
        +1
        Кстати да, программа github.com/markondej/fm_transmitter судя по описанию, поддерживает USB sound card, так что подключаем к «малине» USB-микрофон, и закладка готова :)
          0

          Почему микрофон а не динамик ?

            +1
            Raspberry Pi может передать радиосигнал, а вот принять не может, так что динамик тут не пригодится :)
      0
      Прикольно.

      По поводу усилителя — ставите согласующий и\или полосовой фильтр и можно даже с усилителем. Это всего-то три-четыре дополнительных элемента.
        +2
        Да, можно конечно, просто есть ли смысл. Ну и полосовой фильтр на сотни мегагерц, без опыта и приборов сделать, не такая уж простая задача.

        А так да, есть даже готовые шилды для WSPR в продаже: www.tapr.org/kits_20M-wspr-pi.html
          0
          В данном случае, насколько я понимаю, выходным звеном служат транзисторные цепи Распбери. Они имеют какое-то сопротивление, явно отличное от 50 Ом. Так что даже банальный согласующий п-фильтр, который не столь сложно сделать и подстроить, плюс хоть какая-то согласованная антенна — очень улучшат ситуацию.
        0
        можно ли сделать что то подобное с мобильными процессорами? или подпроцессоры жпс, аудиочип? что бы выводить к микро юсб или на джек к антенне было удобнее.
        С помехами по идее можно разобраться, правильно формирую сигнал во времени и играя мощностью ядер процессора, что бы все гармоники усиливали друг друга, ну или по крайней мере не мешали. Это если я правильно понял механизм работы, т.к. в малинах не селен.
          +2
          Сложно сказать. Можно только в том случае, если SDK позволяет иметь прямой доступ к «железу» процессора. Ну и дальность без антенны на той же Raspberry Pi 1-2см, а в мобиле дорожки на плате еще короче. На ноутбуке может более реально, там платы побольше.

          Сигнал из самого процессора выходит прямоугольный, так что программно его не сгладить, только внешними фильтрами.
            0
            В малинах используется модуль PWM, в котором есть приличный синтезатор частоты, насколько я понял.
            Так что для остальных процессоров — либо жесткий реалтайм, когда ВСЁ устройство занято только передачей (в частности, на AVR так делали DDS с произвольной частотой), либо частота определяется из какой-то сетки, причём довольно жестко (коэффициенты деления у таймеров, по-моему, не бывают дробными), либо используется что-то имеющееся аппаратное (т.е. процессор — не общего назначения).
            0
            Не хватает указания верхнего предела генерации. Хотя при таких гармониках это сложно определить.
              +1
              В описании rpitx указано " It can handle frequencies from 5 KHz up to 500 MHz.".
              +3
              Кстати, используя специальный метод узкополосной передачи WSPR и настроенные антенны, с 10мВт мощности радиолюбителям удавалось передать сигнал на расстояние до 2000км.

              image
                +3
                :)

                На самом деле, такие дальности действительно реальны, только антенна нужна примерно такого размера, как на передающей, так и на приемной стороне. Ну и это медленная передача, со скоростью где-то 30 бод.
                +1

                С полгода назад пробовал излучать fm с помощью rpitx. Звук был нормальный (оригинальный wav пришлось ресемплировать до 22 кГц), но с периодическими щелчками.

                  +1
                  На заметку конспирологам, с помощью корреляционных фильтров принимается сигналы меньше уровня шумов самого приёмника, а тем более помех.
                    +1
                    Да, до Пентагона сигнал не добьет в любом случае, а метров на 100 (ну максимум километр в совсем идеальных условиях) думаю, передать вполне реально.
                    0
                    но звук очень высокий и пищащий

                    Это — неправильный сэмплрейт. PiFmRDS по дефолту, кажется, берёт 44.1 или 48 кГц (читать заголовок файла умеет не очень).

                      0
                      Возможно, я особо не разбирался. Я использовал тестовый файл из папки с программой, странно если там лежит неправильный семпл.
                    +2

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

                      0
                      Сейчас без процессоров никуда. Например OFDM-модуляция — это же фактически преобразование Фурье и перевод сигнала сразу из frequency в time domain, чистая математика. Думается, чисто аналоговой связи уже и не осталось практически (хотя метеофаксы на КВ еще передают:).
                        +2
                        Мне кажется, рассуждая так про OFDM вы предлагаете вместо гвоздей шурупы микроскопом забивать…
                          +2
                          Нет, я не призываю конечно, специально покупать Raspberry Pi, чтобы сгенерировать прямоугольный сигнал :) Это лишь интересный побочный эффект, не более того.

                          Ну а мысль про ODFM была в том, что в проф-связи все так или иначе в цифру переходит (или уже перешло). Да и все генераторы сигналов в продаже, по-моему, уже давно цифровые.
                            +3
                            Позволю себе разъяснить сарказм, речь шла не об излишнести применении цифровых методов формирования «аналогового» сигнала, а в использовании вычислительных ресурсов центрального процессора вхолостую, чтобы ногами дрыгать.
                        +2

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

                        0
                        Когда компьютеры были большими, а экраны мониторов — вакумными, была програмка под юникс, которая играясь с частотой развёртки вполне себе передавала wav по радио.
                          +1
                          Лет 5 назад читал статью, что сигнал с кабеля VGA вполне можно принять в соседней комнате, декодировать и получить картинку с экрана. Правда или нет, хз.
                            +1
                            Правда. Но оборудование нужно несколько специфисское.

                        Only users with full accounts can post comments. Log in, please.