«‎Жизнь слишком коротка для QRP»‎ — гласит надпись на футболке моего друга. Смысл этой фразы предельно понятен для радиолюбителя. Работать с малой мощностью, особенно при проведении сеансов дальней связи, непросто. Но все же можно, и здесь нам помогают современные технологии. Например, протокол FT8. Он стал чрезвычайно популярным за счет устойчивости к неблагоприятным факторам, влияющим на КВ-связь. У него есть и «младший брат-близнец»‎ по имени WSPR. Последний отличается исключительной неприхотливостью, и о нем как раз пойдет речь сегодня.

Полезная нагрузка

Стоит сразу уточнить, что WSPR (Weak Signal Propagation Reporter), в отличие от того же FT8, — это односторонний протокол связи. Предназначен он для оценки прохождения радиосигнала. Проводить с его помощью QSO напрямую нельзя, но это и не нужно. На его основе создают автоматические маяки, которые с определенной периодичностью отправляют пакеты данных. Принимая их в разных точках мира и агрегируя в единой базе, можно делать выводы о качестве канала связи.

Как и FT8, этот протокол привязан к точному времени. Все дело в том, что передача одного сообщения занимает фиксированное количество секунд. Начинается она каждую четную минуту. Значит, максимальная погрешность часов на передатчике не должна быть больше 1 секунды. Если ваш маячок оборудован модулем RTC (Real-time clock), прекрасно. Если нет — перед началом передачи нужно обязательно выполнить синхронизацию времени, например с помощью NTP-сервера.

Стандартное сообщение WSRP содержит в себе такие полезные данные:

  • позывной,

  • местоположение (код локатора),

  • мощность сигнала (dBm).

В WSPR принято использовать не конкретные точные координаты, а так называемый QTH-локатор. В большинстве англоязычных источников его обозначают по-разному: Grid Square Locator, Maidenhead Locator System, QTH locator или IARU Locator. Смысл в том, что поверхность Земли делится условной сеткой на секторы и каждый из них получает свой буквенно-цифровой код.

Maidenhead Locator System, источник
Maidenhead Locator System, источник

Всего в такой сетке 324 прямоугольные ячейки — 18 x 18. Каждая из них дополнительно поделена на квадраты, которые обладают собственным кодом. Передавая этот код, радиолюбители указывают на приблизительное местоположение станции. В протоколе WSPR принято использовать 4-символьные значения.

QTH-локатор города Москва, источник
QTH-локатор города Москва, источник

Например, KO85 будет кодировать квадрат, который включает в себя Москву и многие города Подмосковья. Такая точность вполне достаточна для целей WSPR по определению местоположения станции. Это значительно быстрее, чем передавать точные координаты.

WSPR vs FT8

Фишка WSPR в том, что он показывает лучшую эффективность по сравнению с FT8 при передаче сигнала на большие расстояния. Все потому, что эти протоколы, несмотря на схожесть, разрабатывались с разной целью. WSRP оптимизирован для проведения дальних связей с малой мощностью и создавался как инструмент изучения распространения радиоволн. FT8 же стремился быть универсальным, давая больше интерактивности и позволяя передавать значительно больше информации, чем WSPR.

Для достижения лучшего соотношения сигнал/шум WSPR задействует очень узкую полосу пропускания — всего лишь 6,25 Гц против 50 Гц у FT8. Для лучшей помехоустойчивости передача одного сообщения WSPR длится значительно дольше, чем FT8 (110,6 сек против 12,64 сек). С использованием FT8 можно декодировать сигнал мощностью –21 дБ, а WSPR способен работать с более слабыми сигналами, например –28 дБ и ниже.

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

Центральный хаб, обрабатывающий сигналы по протоколу WSPR по всему миру, — вот этот ресурс. Тысячи радиолюбителей-энтузиастов из разных стран загружают на него данные со своих приемников, обеспечивая сайт актуальной информацией. Особенно важны отчеты с автоматических маячков, поскольку они формируют своеобразную сеть постоянно работающих датчиков прохождения радиоволн в планетарном масштабе.

Сам по себе этот портал не слишком удобен для использования, поэтому в качестве разумной альтернативы можно выбрать сторонние сайты, разработанные энтузиастами. Они часто связаны с WSPRNet, но дают больше возможностей по интерпретации собранных данных. Вот пример такого сайта. На нем вы найдете такие полезные инструменты, как визуализация в Grafana или Google Earth. Там же есть возможность выгрузки больших кусков данных из общей базы для дальнейшего анализа.

С чего начать

Чтобы попробовать WSPR в деле, можно обойтись обычным одноплатником Raspberry Pi, отправляя радиосигнал низкой мощности прямо с одного из GPIO-пинов на подключенную к нему антенну в виде куска провода. Звучит отлично, но, перед тем как доставать «малинку»‎ из закромов, нужно обязательно официально стать радиолюбителем, сдав соответствующий экзамен и получив позывной. Без этого у вас будет право только на прием сигналов WSPR, без права самостоятельно выходить в эфир. Формально это будет нарушением законодательства и может повлечь ответственность.

У любой модели Raspberry Pi есть GPIO-контакты. Процесс передачи радиосигнала начинается с генерации прямоугольных импульсов на определенной частоте. Для получения синусоиды они пропускаются через фильтр нижних частот (Low-pass filter, LPF). Дальше сигнал модулируется с помощью частотной манипуляции (Frequency Shift Keying, FSK) в соответствии с требованиями протокола WSPR. Полученный сигнал усиливается и отправляется далее на антенну.

Такая схема подойдет для передачи сигнала на частотах от 0 до 250 МГц, охватывая диапазоны LF, MF, HF и VHF. Ожидаемая мощность составит 10 милливатт, что может показаться вообще смешной цифрой. Но это работает, и достаточно неплохо, при правильном сопротивлении антенны (50 Ом). Конечно, есть и подводные камни, о которых скажу ниже.

Для старта потребуется:

  1. одноплатник Raspberry Pi;

  2. карта памяти;

  3. стабильный и мощный источник питания;

  4. фильтр нижних частот;

  5. антенна с сопротивлением 50 Ом.

Софт

Установка WsprryPi

В качестве операционной системы стоит выбрать актуальную версию Raspberry Pi OS без графического интерфейса. Перед началом работы советую обновить все пакеты и перезагрузить одноплатный компьютер:

$ sudo apt update && sudo apt -y upgrade && sudo reboot

Если по умолчанию в системе нет утилиты Git, устанавливаем:

$ sudo apt -y install git

После этого нужно зайти в консоль и клонировать репозиторий проекта WsprryPi:

$ git clone https://github.com/JamesP6000/WsprryPi.git

Переходим в скачанную директорию:

$ cd WsprryPi

Компилируем:

$ make

В процессе может возникнуть досадная ошибка вида:

/usr/bin/ld: mailbox.o: in function `mbox_open':

mailbox.c:(.text+0xc54): undefined reference to `makedev'

/usr/bin/ld: mailbox.c:(.text+0xcc8): undefined reference to `makedev'

collect2: error: ld returned 1 exit status

make: *** [makefile:22: wspr] Error 1

Открываем файл mailbox.c:

$ nano mailbox.c

В начало добавляем:

#include <sys/sysmacros.h>

Сохраняем при помощи Ctrl + O и выходим из редактора Ctrl + X. Повторяем сборку через make.

Пришла пора закинуть исполняемые файлы в системную директорию /usr/local/bin:

$ sudo make install

Тест генерации сигнала

Этот шаг не обязателен, но, если у вас под рукой любой осциллограф, вы легко можете его выполнить. Соответственно, убедиться в том, что с GPIO-порта приходит необходимый прямоугольный сигнал. Подключаемся к GPIO 7 и 9. В моем случае была использована старенькая Raspberry Pi 3 B+:

Распиновка GPIO Raspberry Pi 3B+, источник
Распиновка GPIO Raspberry Pi 3B+, источник

У меня под рукой был только «игрушечный»‎ осциллограф DSO138, который тем не менее способен этот сигнал нам показать. Для проверки нужно выполнить команду:

$ sudo wspr --test-tone 20e3

На дисплее девайса должна появиться такая картина:

Видишь прямоугольный сигнал? — Нет. — И я не вижу. А он есть.
Видишь прямоугольный сигнал? — Нет. — И я не вижу. А он есть.

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

Подключение и использование

Я не стану вам рассказывать о том, как собрать самодельную антенну или выбрать готовую. Это просто не нужно — в полевых условиях достаточно двух кусков кабеля для создания примитивного диполя.

Фильтр низких частот реализуется по самой простой схеме «конденсатор — сопротивление», где роль сопротивления играет антенна. Если предположить, что она будет иметь стандартное значение 50 Ом, то в зависимости от выбранного диапазона передачи можно будет подобрать необходимую емкость конденсатора по формуле:

C = 1 / (2 * π * f * R)

Рассчитаем для диапазона 20 м:

  • f = 14,097100 МГц = 14 097 100 Гц

  • R = 50 Ом

  • π = 3,14159

Подставив значения, получаем:
C = 1 / (2 * 3,14159 * 14 097 100 * 50)

Идеальная емкость:
C = 225,8 пФ

Поскольку конденсатора точно такой емкости не существует в природе, выбираем ближайшее стандартное значение 220 пФ. Его можно купить в любом магазине радиотоваров. Финальное подключение антенны для вещания на 20 м диапазоне будет выглядеть так:

Дело за малым — отправить команду на передачу. Вот она:

$ sudo wspr -s -r [позывной] [локатор] [мощность] 20m

Для несуществующего позывного WS4PR из Москвы (KO85), передающего с мощностью 33 дБм, это будет выглядеть так:

$ sudo wspr -s -r WS4PR KO85 33 20m

Detected Raspberry Pi version 2/3
WSPR packet contents:
 Callsign: WS4PR
 Locator: KO85
 Power: 33 dBm
Requested TX frequencies:
 14.097100 MHz
Extra options:
 NTP will be used to periodically calibrate the transmission frequency
 Transmissions will continue forever until stopped with CTRL-C

Ready to transmit (setup complete)...
Desired center frequency for WSPR transmission: 14.097100 MHz
 Waiting for next WSPR transmission window...
 Obtained new ppm value: -2.89357
 TX started at: UTC 2024-12-27 15:14:01.008
 TX ended at: UTC 2024-12-27 15:15:51.617 (110.609 s)

Если все сделано правильно и условия передачи подходящие, то спустя какое-то время вы увидите свой позывной на глобальной карте WSRPNet.

Что в итоге

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

Получив первые результаты в WSPR, можно будет заняться улучшением схемы. Например, уделить больше внимания экранированию оборудования от помех или созданию более сложного фильтра низких частот. Так что пробуйте и не забывайте делиться своим опытом в комментариях.

Комментарии (16)


  1. NutsUnderline
    02.01.2025 17:19

    принято использовать не конкретные точные координаты, а так называемый QTH-локатор

    как всегда стандартных навиагационных счислений нам мало, нам дай че нить свое да на малинке ножками подрыгать :)

    Хотелось бы в двух словах видеть альтернативные решения для WSPR, ушел гуглить.


    1. Kreastr
      02.01.2025 17:19

      На сколько я знаю QTH это компромисс между точностью достаточной чтобы понять куда направить антенну (если направленная) а так же расстояние до собеседника (для соревнований, ачивок и оптисизации мощности передачи) и собственно количеством занимаемого в сообщении места. Гибкий размер вроде 2, 4 или 6 символов по ситуации.


      1. NutsUnderline
        02.01.2025 17:19

        да это понятно.. но костыль


  1. checkpoint
    02.01.2025 17:19

    RPi 3B способна дергать ногой (GPIO) с частотой 28 МГц ? Не хило!


  1. Kreastr
    02.01.2025 17:19

    А как принято указывать мощность вещания? С учетом антенны или по мощности после фильтра? Или еще какая-то рекомендация?

    И еще интересует нет ли готовых решений послушать СЧ-ВЧ диапазон малинками без активных внешних устройств?

    Спасибо. 73


    1. NutsUnderline
      02.01.2025 17:19

      все берут копеечный rtl sdr для этого. до 27МГц там правда хитро, но вручную демодулировать... зачем вообще диод то изобрели :)


  1. nikolz
    02.01.2025 17:19

    Фильтр низких частот реализуется по самой простой схеме «конденсатор — сопротивление», где роль сопротивления играет антенна.

    У вас ошибка . ФНЧ по схеме RC - это последовательное соединение R и C , а не параллельное.

    В Вашем случае ФНЧ состоит из выходного сопротивления GPIO и конденсатора.

    Кроме того, ФНЧ обладает пологой характеристикой от нуля до бесконечности , а не резонансной. На частоте 14 Мгц коэффициент передачи RC цепи уменьшится всего лишь на 3 дБ (0.7 от максимального) а на частоте 28 Мгц всего лишь в 3 раза.

    Поэтому нет смысла в точном значении конденсатора. Для большего подавления гармоник надо брать более сложные фильтры. Вы создаете сетку частот , кратных 14 Мгц. Т е теоретически Вас будут слушать на частотах кратных 14 Мгц.


    1. sappience
      02.01.2025 17:19

      В Вашем случае ФНЧ состоит из выходного сопротивления GPIO и конденсатора.


      Даже не совсем так, а еще чуть сложнее. ФНЧ состоит из эквивалентного внутреннего сопротивления делителя образованного выходным сопротивлением GPIO и антенны, и конденсатора.

      Не меняя схему немножко переставим элементы для наглядности
      Не меняя схему немножко переставим элементы для наглядности

      А эквивалентное внутреннее сопротивление делителя будет равно сопротивлению R внутр. и R антенны включенных параллельно, т.е. R экв. = (R внутр. * R антенны) / (R внутр. + R антенны).


      1. nikolz
        02.01.2025 17:19

        Я лишь обратил внимание автора, на то, что ФНЧ - это последовательное соединение, RC а не параллельное.

        На самом деле схема будет еще сложнее. Эквивалентная схема антенны это колебательный контур. А так как это контур, то какой смысл ставить ФНЧ вообще.


  1. nikolz
    02.01.2025 17:19

    Такая схема подойдет для передачи сигнала на частотах от 0 до 250 МГц

    Можно подробнее, как получить на GPIO импульсы с частотой например 56 МГц.

    Нашел лишь это:


    1. sappience
      02.01.2025 17:19

      Судя по тому, что тут частота зависит от языка программирования, в таблице приведены данные для софтверного дергания ногой. Но согласно даташиту (см. главы 6.2 Alternative Function Assignments и 6.3 General Purpose GPIO Clocks) на процессор, на ногу GPIO4 можно вывести хардверный General Purpose Clock 0 и частота его программируется, и точно может достигать десятков мегагерц.


      1. nikolz
        02.01.2025 17:19

        Меня интересует, что конкретно сделал автор статьи и как он получил 14 МГц, а тем более 250 МГц.


        1. sappience
          02.01.2025 17:19

          Конкретно автор скачал исходники утилиты wspr, скомпилировал их и запустил передав в утилиту необходимое значение частоты. А утилита эта использует General Purpose Clocks про которые я уже выше написал. И написана она другими людьми (Даниелом Анкерсом и Джеймсом Перуласом).


  1. nikolz
    02.01.2025 17:19

    до кучи. Лучше и проще.

    https://habr.com/ru/articles/820719/


  1. nikolz
    02.01.2025 17:19

    схемам варианта на ESP:

    Тороидальные катушки для фильтра нижних частот имеют тип T37-6 от AMIDON. Катушки L1 и L3 состоят из 16 витков провода диаметром 0,30 мм. Катушка L2 состоит из 17 витков провода диаметром 0,30 мм.


  1. fhunter
    02.01.2025 17:19

    Подключаемся к GPIO 7 и 9.


    У вас в статье неточность - вы пишете, что антенну подключать надо к GPIO 7 и 9. Но по вашей же схеме - получается, что подключать надо к GND и GPIO4, но к выводам 7 и 9 разъёма GPIO на Raspberry Pi.