QRP — это радиолюбительский сленг, означающий ‘низкую мощность передачи’. Цифровые режимы QRP, такие как FT8, JT9, JT65 и WSPR, предназначены для передачи и приема по миру на малых мощностях (хотя не все используют только малую мощность). Специальный дизайн этих режимов позволяет даже слабым сигналам декодироваться принимающим ПО. Выпущенный в 2017 году FT8 доказал свою популярность и на сегодняшний день является самым популярным режимом, в то время как JT9 и JT65 занимают более второстепенное место. WSPR также не так активен, как FT8, хотя WSPR чаще является маячным режимом, а не режимом для установления контактов.
Помимо того, что ими пользуются радиолюбители для установления контактов, эти режимы слабого сигнала также являются ценными индикаторами текущих условий распространения диапазона HF. Каждый пакет содержит информацию о местоположении передатчика, поэтому можно увидеть, откуда и как далеко поступил полученный вами пакет. Вам также не нужно быть радиолюбителем, чтобы настроить мониторинговую станцию. Как SWL (слушатель коротковолнового диапазона), это может быть весьма интересно просто увидеть, насколько далеко можно принять сигналы и из скольких стран мира можно «собрать» сигналы.
Этот учебник вдохновлён видео dg0opk и постом в блоге о мониторинге QRP с помощью одноплатных компьютеров. Мы покажем, как собрать супер-дешёвую мониторинговую станцию QRP с использованием RTL-SDR V3 и Raspberry Pi 3. Общая стоимость должна составить около US $56 (21 доллар за RTL-SDR V3 и 35 долларов за Pi 3).
С этой настройкой вы сможете непрерывно мониторить несколько режимов в одном диапазоне одновременно (например, монитор FT8 на диапазоне 20 метров, JT65+JT9 и WSPR — все на одном донгле одновременно). Метод создания нескольких каналов в Linux может быть полезен и для других приложений. Если у вас есть апконвертер или более продвинутый SDR для мониторинга, например SDRplay или Airspy HF+, то это также может заменить RTL-SDR V3. Необходимые детали приведены ниже:
- RTL-SDR V3 (или апконвертер, или другой HF & Linux совместимый SDR)
- Raspberry Pi 3 (или другой SBC с аналогичной производительностью)
- Интернет-соединение
- Фильтр диапазона (опционально, но рекомендуется)
- HF антенна (может быть простой длинный провод)
Примеры QRP-приемников с RTL-SDR

One week of monitoring with the V3 dongle using direct sampling on 30m with a 90ft longwire. 3151 unique calls, 2836 grids and 86 countries. ADIF from and mapped with . pic.twitter.com/1c826gDoce
— Johnny (@cuoops)
Настройка Raspberry Pi 3
В этом руководстве мы используем Raspberry Pi 3, но любой SBC с аналогичной или более высокой производительностью может подойти. Здесь сначала настроим Pi для удалённого подключения к рабочему столу через RealVNC.
- Как обычно для любой установки на Pi, запишите свежую копию Raspbian Stretch (или новее, если на момент чтения будет другое) на SD-карту, вставьте SD-карту в Pi, подключите клавиатуру и мышь, HDMI-монитор и питание.
- Как только попадёте на рабочий стол, откройте терминал и введите “sudo raspi-config”. Здесь в настройках локализации измените временную зону на UTC (локализация -> часовые пояса -> никакой из вышеперечисленных -> UTC), настройте клавиатуру под вашу локаль и включите VNC.
- В raspi-config также включите VNC в Интерфейсных параметрах (Interfacing Options).
- Используя инструкции по настройке RealVNC, создайте RealVNC Viewer аккаунт, или если подключаетесь по локальной сети, запишите локальный IP вашего Pi, используя “ifconfig” в терминале. Обратите внимание, что после включения VNC на предыдущем шаге вы сможете получить доступ к настройкам RealVNC сервера в правом верхнем углу панели задач Raspberry Pi.
- На этом этапе, если хотите, можно отключить HDMI-монитор и подключаться к Pi через VNC.
Установка программного обеспечения
Установите следующее ПО на ваш Pi 3.
Драйверы RTL-SDR
Сначала установим драйверы RTL-SDR. Нам нужны драйверы Keenerd для V3, так как они единственные, которые позволяют запускать rtl_sdr в режиме прямого отбора Q-branch, что требуется для приема HF на RTL-SDR V3.
sudo apt-get update sudo apt-get install libusb-1.0-0-dev git cmake -y git clone https://github.com/keenerd/rtl-sdr cd rtl-sdr/ mkdir build cd build cmake ../ -DINSTALL_UDEV_RULES=ON make sudo make install sudo cp ../rtl-sdr.rules /etc/udev/rules.d/ sudo ldconfig echo 'blacklist dvb_usb_rtl28xxu' | sudo tee --append /etc/modprobe.d/blacklist-dvb_usb_rtl28xxu.conf
Теперь перезагрузитесь, чтобы применить черный список, и подключите ваш RTL-SDR.
PulseAudio & MPlayer
Нам потребуется PulseAudio, чтобы создать виртуальные аудиоканалы, и мы также установим mplayer для проигрывания аудио.
sudo apt-get install pulseaudio pavucontrol mplayer -y
CSDR
CSDR — это библиотека функций DSP, которую мы будем использовать для настройки многоканального приемника.
sudo apt-get install libfftw3-dev -y cd ~ git clone https://github.com/simonyiszk/csdr cd csdr
Прежде чем продолжить, для Pi 3 рекомендуется отредактировать Makefile и изменить флаги PARAMS_NEON на следующие. Makefile можно открыть с помощью “sudo leafpad Makefile”
-march=armv8-a -mtune=cortex-a53 -mfpu=neon-fp-armv8.
Также в PARAMS_RASPI установите:
-mcpu=cortex-a53 -mfpu=neon-fp-armv8.
Мы не уверены, действительно ли это что-то меняет, но идея в том, чтобы помочь оптимизировать код для CPU Pi 3. Для других SBC проверьте, какие настройки под вашу архитектуру.
Закройте и сохраните файл, затем выполните:
make sudo make install
ncat
ncat — это TCP-сервер, который мы будем использовать, чтобы помочь настроить многоканальный приемник.
sudo apt-get install nmap -y
Chrony
Мы будем использовать Chrony для настройки временного сдвига, требуемого этими режимами QRP. Конфигурация будет рассмотрена позже.
sudo apt-get install chrony -y
WSJT-X
WSJT-X — программное обеспечение, которое мы будем использовать для декодирования FT8, JT9, JT65 и/или WSPR. Чтобы установить его, просто перейдите на страницу WSJT-X в Chrome, загрузите .deb-файл для Raspberry Pi 3, а затем дважды щёлкните загруженный файл в папке, чтобы начать процесс установки.
JTDX (по желанию)
JTDX — это ещё один декодер, который основан на WSJT-X. Некоторые считают, что он декодирует лучше WSJT-X и имеет больше функций. Однако мы обнаружили, что JTDX потребляет значительно больше ресурсов CPU, поэтому многоканальное декодирование на Pi 3 с ним сложнее. На момент публикации этого руководства готового make .deb-файла для JTDX на Pi 3 не существует, поэтому его приходится компилировать вручную.
Следующие инструкции по компиляции основаны на руководстве N0KEG, которое сейчас может оказаться немного устаревшим.
# Install the prerequisites sudo apt-get install build-essential subversion git automake libtool libusb-dev gfortran gfortran-5 g++ g++-5 libusb-1.0-0-dev texinfo cmake asciidoc asciidoctor libqt5serialport5 libqt5serialport5-dev libfftw3-dev libqt5multimedia5 libqt5multimedia5-plugins libqt5multimediawidgets5 qtmultimedia5-dev libudev-dev pavucontrol wget # Enables multi-threaded compilation export MAKEFLAGS='-j 4' # Requires a temporarily enlarged swapfile to compile a large file sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile # Download, compile and install the latest hamlib cd ~ mkdir ~/hamlib-prefix && cd ~/hamlib-prefix && git clone git://git.code.sf.net/u/bsomervi/hamlib src cd src git checkout integration ./bootstrap ./configure make sudo make install sudo ldconfig # Download an install JTDX cd~ wget https://www.release.jtdx.tech/Windows/Source%20code/src18.1.0.85.zip mkdir ~/jtdx-prefix && mkdir ~/jtdx-prefix/build && mkdir ~/jtdx-prefix/src unzip src18.1.0.85.zip mv wsjtx/* ~/jtdx-prefix/src/ cd ~/jtdx-prefix/build cmake -D CMAKE_PREFIX_PATH=~/hamlib-prefix ../src cmake --build . sudo cmake --build . --target install
GridTracker (по желанию)
Скачайте версию GridTracker для Raspberry Pi с https://tagloomis.com/downloads с помощью Chrome. Это позволит вам визуализировать ваши QRP-метки на карте непосредственно на Pi. Это опционально, так как вы можете использовать сайт PSKreporter.info онлайн.
cd ~/Downloads tar -xzf GridTracker-Linux-Arm-1.18.0604.tar.gz -C ~
Настройка аудиопайпинга
Сначала нам нужно создать виртуальные аудиоустройства-поглотители для каждой частоты, которую вы хотите мониторить одновременно. Пример ниже создаёт два виртуальных аудиоустройства, которые загружаются при загрузке. Чтобы создать ещё одно, просто добавьте больше строк от Virtual 2 и далее. Сначала откройте файл по умолчанию PulseAudio:
sudo leafpad /etc/pulse/default.pa
Добавьте следующие строки в конец файла:
load-module module-null-sink sink_name=Virtual0 sink_properties=device.description="Virtual0" load-module module-null-sink sink_name=Virtual1 sink_properties=device.description="Virtual1"
Мы также рекомендуем отключить логирование PulseAudio, так как это, похоже, требует больших затрат CPU.
sudo leafpad /etc/pulse/daemon.conf
Теперь найдите “log-level” и измените его на “log-level = error”. Удалите точку с запятой в строке log-level. Сохраните и выйдите.
; log-target = auto log-level = error ; log-meta = no
Теперь можно перезагрузить PulseAudio либо перезагрузив систему, либо выполнив в командной строке ‘pulseaudio -k’.
Настройка RTL-SDR
Теперь в окне терминала выполните следующую команду, чтобы настроить TCP-сервер RTL-SDR с помощью ncat. В этом примере центральная частота установлена на 14.1 МГц (14100000 Гц). Измените её на любую желаемую частотную полосу, которую хотите мониторить. Есть полный перечень различных QRP-полос здесь. Просто помните, чтобы смещать центральную частоту на несколько сотен кГц от фактической частоты сигнала, что поможет избежать центральной DC-спайк.
rtl_sdr -s 1200000 -f 14100000 -D 2 - | csdr convert_u8_f | ncat -4l 4952 -k --send-only --allow 127.0.0.1
В команде rtl_sdr -s — это скорость дискретизации, -f — центральная частота, а -D 2 устанавливает режим прямого отбора Q-branch.
ncat -4l устанавливает TCP IPv4 режим, 4952 — порт, -k позволяет устанавливать несколько соединений, –send-only гарантирует, что сервер отправляет данные и не принимает, а –allow 127.0.0.1 гарантирует, что будут установлены только локальные соединения.
Во втором окне терминала запустите следующую команду, чтобы сгенерировать канал USB SSB, мониторящий 20M FT8 на 14.074 МГц. Обратите внимание, что часть ‘(14100000-14074000)’ устанавливает мониторинг как ‘(центр частоты – настроенная частота)’. В этом примере мы мониторим 14.074 МГц, что является частотой FT8 для 20 метров. Если мониторите другой диапазон и используете другую центральную частоту, здесь измените смещение частоты. Разные команды csdr настраивают декодер USB SSB. Дополнительная информация об использовании csdr доступна на странице GitHub csdr. Обратите внимание, что мы снизили переходной пропускной диапазон в команде fir_decimate_cc с 0.005 до 0.05. Это снижает нагрузку на CPU за счёт возможно большего помехового спектра, но в нашем случае проблем не наблюдалось.
ncat -v 127.0.0.1 4952 | csdr shift_addition_cc `python -c "print float(14100000-14095600)/1200000"` | csdr fir_decimate_cc 25 0.05 HAMMING | csdr bandpass_fir_fft_cc 0 0.5 0.05 | csdr realpart_cf | csdr agc_ff | csdr limit_ff | csdr convert_f_s16 | mplayer -nocache -rawaudio samplesize=2:channels=1:rate=48000 -demuxer rawaudio -
Откройте pavucontrol либо через меню Raspberry Pi -> Звук и видео -> Контроль громкости PulseAudio, либо просто набрав ‘pavucontrol’ в командной строке. Нажмите на вкладку Playback и установите MPlayer на использование аудиослива ‘Virtual 0’.

Исправление задержки во времени
Режимы QRP (особенно FT8) требуют точности часов компьютера. Это связано с тем, что сигналы должны передаваться и приниматься через строго заданные интервалы времени. Большинство людей используют NTP для синхронизации своих часов, чтобы они соответствовали точному времени. Raspbian автоматически синхронизируется с NTP по умолчанию, если есть подключение к интернету.
Однако проблема в том, что RTL_SDR, CSDR и mplayer, работают вместе, создают неприемлемую задержку от входа к выходу около 2–3 секунд на Pi 3. Большая часть задержки вызвана буферизацией в mplayer, которая помогает предотвратить прерывания при резком росте нагрузки CPU. WSJT-X ожидает, что пакеты будут приходить в правильном временном окне, и не будет декодировать их, если они отрицаются более чем примерно на +/- 2 секунды.
Чтобы исправить это, нужно слегка «обмануть» часами и задать системное время так, чтобы оно всегда было на несколько секунд в прошлом. Спасибо dg0opk за уведомление об этом методе, который предполагает замену стандартного NTP на Chrony, который гораздо более настраиваемый. Chrony, как правило, уже был установлен на предыдущем этапе; установка Chrony отключает NTP и активирует Chrony. Откройте его конфигурационный файл следующей командой:
sudo leafpad /etc/chrony/chrony.conf
В первой строке отредактируйте файл, добавив смещение примерно -2.5 секунды.
pool 2.debian.pool.ntp.org iburst offset -2.5
Сохраните и закройте конфигурационный файл, затем перезапустите Chrony:
sudo invoke-rc.d chrony restart
Настройка WSJT-X
Теперь откройте WSJT-X или JTDX и на вкладке File -> Settings -> Audio выберите входную карту “Virtual0.monitor”.

В WSJT-X выберите режим FT8, и сигналы начнут приходить и декодироваться автоматически.
Либо можно открыть JTDX и использовать команду “jtdx” в терминале. Интерфейс настройки входной аудиокарты идентичен.

Если декодов нет, но сигналы видно в спектре, попробуйте изменить временное смещение Chrony. Вы сможете увидеть, приходят ли пакеты слишком рано или слишком поздно в водопад WSJT-X. Как только появятся декоды, подгоняйте смещение, чтобы значения в колонке “DT” приближались к нулю. Колонка DT показывает временной сдвиг от идеального времени. Например, -0.5 означает, что пакет был принят на 0.5 секунды раньше ожидаемого.
Настройка WSJT-X для отправки в PSKReporter
WSJT-X может сообщать ваши данные на pskreporter.info/pskmap, сайт, который агрегирует QRP-метки со всего мира. Здесь можно сравнить ваш приемник с близлежащими, чтобы увидеть, насколько хороша ваша антенна и настройка, и чтобы похвастаться количеством стран, откуда вы приняли сигналы.
Чтобы включить это, просто введите ваш позывной и Maidenhead-грид детали в общих настройках WSJT-X, затем поставьте галочку в пункте “Enable PSK Reporter Spotting” на вкладке Reporting.
Если вы не радиолюбитель, вы всё равно можете внести вклад на сайте как SWL (слушатель коротковолнового диапазона). Ваш позывной может выглядеть как ‘hamprefix/SWL/city’. Пример есть на https://pskreporter.info. Ваш hamprefix по странам можно найти здесь. Ваш Maidenhead-грид можно получить по этому калькулятору. Просто используйте первые 4 символа, которые он выдаёт.
Мониторинг нескольких каналов
FT8 + JT9/JT65
Здесь мы покажем, как добавить одновременный мониторинг дополнительных QRP-режимов, таких как JT65, JT9 и WSPR. Сначала покажем, как настроить метод dg0opk, описанный в его видеоролике на YouTube для мониторинга только FT8, JT9 и JT65. Так как диапазоны JT9 и JT65 расположены всего на нескольких кГц от FT8, можно просто открыть второй экземпляр WSJT-X, заставить его слушать тот же аудио-поток, что и декодер FT8, и просто расширить полосы декодирования в WSJT-X.
- Чтобы сделать это, сначала откройте второй экземпляр wsjt-x, набрав в терминале “wsjtx -r jt_decode”.
- В продвинутых настройках WSJT-X увеличьте ширину принимаемого диапазона до 4500 Гц.
- Установите режим JT9+J65, и в окне водопада измените настройку “JT65 2500 JT9” на “JT65 4500 JT9”.
FT8 + JT9/JT65 + WSPR
Теперь для мониторинга WSPR нам понадобится открыть второй канал, поскольку максимальная пропускная способность, которую может мониторить WSJT-X, составляет 6000 Гц, а WSPR находится на 28.1696 кГц выше частоты FT8 в диапазоне 20 метров.
Откройте второе окно терминала и снова запустите команду ncat, убедившись, что изменили настроенную частоту. В примере ниже мы изменяем её на частоту WSPR на диапазоне 20 м 14.0956 МГц.
ncat -v 127.0.0.1 4952 | csdr shift_addition_cc `python -c "print float(14100000-14095600)/1200000"` | csdr fir_decimate_cc 25 0.05 HAMMING | csdr bandpass_fir_fft_cc 0 0.5 0.05 | csdr realpart_cf | csdr agc_ff | csdr limit_ff | csdr convert_f_s16 | mplayer -nocache -rawaudio samplesize=2:channels=1:rate=48000 -demuxer rawaudio -
Откройте pavucontrol либо через меню Raspberry Pi -> Звук и видео -> Контроль громкости PulseAudio, либо просто набрав ‘pavucontrol’ в командной строке. Здесь установите новый плеер на использование аудиослива “Virtual 1”.
Откройте третий экземпляр wsjt-x с командой “wsjtx -r wspr”. Затем укажите входную аудиокарту как “Virtual1.monitor” и режим WSPR. Теперь настройка завершена.
На Raspberry Pi 3 нам удалось успешно открыть и запустить два канала и три декодирующих экземпляра WSJT-X. Если использовать JTDX, можно открыть всего один или два экземпляра из-за большого потребления CPU.
Grid Tracker
GridTracker — это полезное ПО, которое автоматически выводит ваши пометки на карте. Чтобы использовать его после установки по инструкциям выше, просто запустите ./GridTracker из командной строки.
Чтобы настроить WSJT-X для GridTracker, перейдите во вкладку Reporting окна настроек и включите “Accept UDP Requests”.
К сожалению, запуск GridTracker с двумя каналами и тремя декодерами может быть слишком ресурсоёмким для CPU Raspberry Pi 3 B. Если вы начнёте замечать пропуски декодов и буферные разрывы в mplayer, закройте GridTracker.
![]()
Советы и выводы
- Изначально мы пробовали использовать sox play и aplay в качестве аудиоплеера. Они не добавляли значительной задержки, поэтому настройка часов не требовалась. Однако со временем плееры начинали периодически выдавать underruns. Со временем чем дольше они прерывали работу, тем выше становилась задержка. Неясно, почему. Если у вас более быстрый аппарат, который никогда не underrun-ится, то это может быть более простым решением.
- FT8 — безусловно самый популярный режим, и мы рекомендуем начинать именно с него. JT9 и JT65 почти «мёртвые».
- Фильтры диапазона действительно помогают улучшить приём на V3. DIY-наборы можно найти у SV1AFN на eBay или на qrp-labs.com. Они требуют немного изменений для добавления разъёма.
- У нас было стабильное рабочее состояние приемника в течение 3 дней, но долгосрочная стабильность системы пока не тестировалась. Хотя dg0opk указал, что его схожие установки работают стабильно уже более полугода.
- Необходимо использовать HF-антенну. Это может быть простой длинный провод (не менее примерно 5 метров). Если вы используете набор multipurpose dipole из нашего комплекта RTL-SDR V3, вам потребуется увеличить длину плеч диполя для HF, используя два куска провода. Просто прищепите около 5 метров и более провода к каждому плечу диполя.
- Мы использовали Raspberry Pi 3B. Новейшая 3B+ может обеспечить лучшую производительность. Разгон Пи может также помочь.
Источник:
- Видео dg0opk
- pic.twitter.com/1c826gDoce
- Raspbian Stretch
- Учётная запись RealVNC Viewer
- Страница WSJT-X
- Учебник N0KEG
- https://tagloomis.com/downloads
- PSKreporter.info
- доступно здесь
- https://github.com/simonyiszk/csdr
- pskreporter.info/pskmap
- hamprefix здесь
- этот калькулятор
- Видео на YouTube
- qrp-labs.com
