
SDR - Программно определяемая радиосистема (англ. Software-defined radio, SDR, рус. ПОР) — радиопередатчик и (или) радиоприёмник, использующий технологию, позволяющую с помощью программного обеспечения устанавливать или изменять рабочие радиочастотные параметры, включая, в частности, диапазон частот, тип модуляции или выходную мощность.
Появление SDR приёмников, передатчиков и приёмо-передатчиков открыло широкие возможности работы в области радиосвязи в связке с цифровой техникой и в частности с компьютерами.
SDR приёмники содержат в себе скоростной аналогово-цифровой преобразователь (АЦП), способный оцифровывать радиосигнал для последующей цифровой обработки. В этой статье мы покажем возможности работы SDR-приёмника совместно с одноплатным компьютером Repka Pi, это может позволить создать компактное решение для широкого круга задач и просто сделать интересный проект для обучения или в качестве хобби.
В приёмниках SDR есть и аналоговая часть, например, для смещения частоты входного сигнала, поступающего с антенны, на АЦП. К таким приёмникам обычно подключают еще фильтры и антенные усилители. Фильтры убирают помехи, спектр которых лежит за пределами рабочего диапазона частот. Антенные усилители включают после фильтров, если принимаемый сигнал слабый.
Что же касается демодуляции, то она выполняется уже после оцифровки. Поэтому SDR-приёмники, в отличии от аналоговых, могут работать практически с любыми видами модуляции без изменения аппаратной части.
Низкочастотный сигнал в недорогих приёмниках SDR, наподобие RTL-SDR Blog 4, превращается в звук с помощью внешних компьютеров или микрокомпьютеров. Для этого на них устанавливается драйвер RTL-SDR и специальное программное обеспечение.
В этой статье мы рассматриваем обработку сигнала от приёмника RTL-SDR Blog 4 и используем одноплатный компьютер модели Repka Pi 4 (отечественной разработки и производства).
Первым делом рассмотрим установку на Repka Pi 4 программного обеспечения SDR++, которое можно использовать для различных приёмников SDR и для RTL-SDR Blog 4 в том числе. И расмотрим, как с помощью Repka Pi 4 и SDR++ сканировать эфир и прослушивать радиостанции.
К сожалению, диапазон сплошного сканирования у недорогих приёмников SDR не превышает несколько МГц. В этой статье рассмотрим использование программы rtl_power, которая устанавливается вместе с драйвером RTL-SDR и позволяет сканировать широкие диапазоны частот. Конечно, сканирование в этом случае выполняется по частям, но результат объединяется в общий CSV-файл. Рассмотрим, как обработать такой файл, чтобы получить в графическом виде спектр или «водопад».
Настройка SDR++ с приёмником RTL-SDR Blog V4
Приёмник RTL-SDR Blog 4 как сервер на базе Repka Pi
Готовим оборудование
Отечественный микрокомпьютер Repka Pi 4 (рис. 1).

К порту USB микрокомпьютера подключаем через короткий удлинитель SDR-приёмник RTL-SDR Blog 4 (рис. 2).

В качестве источников сигнала от радиоэфира мы использовали телескопическую и штыревую антенны с удлинительной катушкой (рис. 3).

Штыревая антенна шла в комплекте с приёмником RTL-SDR Blog 4, а телескопическую приобрели дополнительно.
Антенны разместили снаружи на балконе и подключал по очереди к разъёму SMA приёмника. Максимальный уровень сигнала получился при использовании полностью раскрытой телескопической антенны.
К микрокомпьютеру конечно так же подключили монитор, клавиатуру и мышь. Для удалённого управления была использована сеть WiFi.
Установка SDR++
Прежде всего вам нужно загрузить прошивку операционной системы Repka OS, доступную в разделе «РепкаОС для Repka Pi 4» и записать ее на SD-карту.
Теперь займёмся установкой SDR++, описанной в документации. Рассмотрим особенности установки этой программы на микрокомпьютер Repka Pi 4.
Загрузившись с SD-карты, проверьте версию ОС:
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.5 LTS
Release: 22.04
Codename: jammy
Далее зайдите на страницу дистрибутивов SDR++ и найдите там файл дистрибутива, соответствующий вашей версии ОС. В данном случае нужен файл sdrpp_ubuntu_jammy_aarch64.deb.
Откройте в графическом интерфейсе Repka OS командную строку и загрузите в домашний каталог этот файл:
# wget https://github.com/AlexandreRouma/SDRPlusPlus/releases/download/nightly/sdrpp_ubuntu_jammy_aarch64.deb
Далее обновите список пакетов и установите необходимые пакеты:
# apt update
# apt install libfftw3-dev libglfw3-dev libglew-dev libvolk2-dev libsoapysdr-dev libairspyhf-dev libiio-dev libad9361-dev librtaudio-dev libhackrf-dev zstd mesa-utils
Установите пакет sdrpp_ubuntu_jammy_aarch64.deb командой dpkg:
# dpkg -i sdrpp_ubuntu_jammy_aarch64.deb
После установки запустите программу с параметром h:
# sdrpp -h
[25/09/2025 09:22:46.000] [INFO] SDR++ v1.2.1
-a --addr Server mode address
--autostart Automatically start the SDR after loading
-h --help Show help
-p --port Server mode port
-r --root Root directory, where all config files are stored
-s --server Run in server mode
Помимо краткой справки, эта команда выведет в консоль версию программы SDR++.
Перед тем как запускать программу sdrpp в режиме приёмника, проверьте версию OpenGL в вашей ОС:
# glxinfo | grep "OpenGL version"
OpenGL version string: 4.5 (Compatibility Profile) Mesa 25.0.3 - kisak-mesa PPA
Теперь подключите к микрокомпьютеру антенну и наушники, после чего запустите SDR++ из командной строки, указав версию OpenGL:
# MESA_GL_VERSION_OVERRIDE=4.5 sdrpp 2>&1| tee sdrpp.log
Может так получиться, что SDR++ будет показывать только шум. Проверьте содержимое файла sdrpp.log на предмет наличия в нём строки «[R82XX] PLL not locked!». Если такая строка есть, приёмник не может захватить частоту.
В этом случае нужно обновить драйвер для тюнера R828D. Для этого прежде всего удалите старые пакеты:
# apt remove --purge rtl-sdr librtlsdr*
Далее поставьте актуальную библиотеку librtlsdr из исходников (с поддержкой RTL-SDR Blog 4):
# apt install git cmake build-essential libusb-1.0-0-dev
# git clone https://github.com/rtlsdrblog/rtl-sdr-blog
# cd rtl-sdr-blog
# mkdir build && cd build
# cmake .. -DINSTALL_UDEV_RULES=ON
# make
# make install
# ldconfig
Затем нужно выгрузить конфликтующий драйвер:
# rmmod dvb_usb_rtl28xxu
Теперь запустите проверку:
# rtl_test -t
Found 1 device(s):
0: RTLSDRBlog, Blog V4, SN: 00000001
Using device 0: Generic RTL2832U OEM
Found Rafael Micro R828D tuner
RTL-SDR Blog V4 Detected
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
Sampling at 2048000 S/s.
No E4000 tuner found, aborting.
Строку «No E4000 tuner found, aborting.» можно игнорировать. В данном случае она говорит о том, что у вас нет старого тюнера E4000, которого в новом приёмнике RTL-SDR Blog V4 действительно нет.
Настройка SDR++ с приёмником RTL-SDR Blog V4
После запуска программы SDR++ на экране появится её главное окно (рис. 4).

Теперь можно переходить к настройкам. Я расскажу, как выполнить настройку SDR++ для приёмника RTL-SDR Blog V4.
Выбор источника сигнала
Для выбора источника сигнала раскройте список Source, расположенный в верхнем левом углу главного окна программы и выберите в нём строку RTL-SDR (рис. 5).

Настройка на нужную частоту
В верхней части окна по центру отображается текущая частота настройки приёмника. Щелкая мышью верхнюю часть изображения цифр частоты, можно увеличивать эти цифры на единицу, а нижнюю — уменьшать. Добейтесь чтобы частота соответствовала одной из станций FM-радио, вещающей в вашем регионе.
Запуск приёмника
Для запуска щёлкните кнопку с изображением треугольника, расположенную слева в верху главного окна. После этого, а также после настройки SDR++ для приёма одной из станций FM-радио, в верхней части главного окна появится спектр принятого сигнала, а в нижней — так называемый «водопад» (рис. 6).

Передвигая ползунок Gain, регулируйте усиление. Оно не должно быть слишком большим, чтобы помехи не «забили» полезный сигнал.
Вы так же можете включить автоматическую регулировку усиления АРУ (Automatic Gain Control, AGC). Для этого можно отметить флажки RTL AGC и Tuner AGC. Первый из них запускает АРУ на уровне чипа RTL2832U (цифровая регулировка после АЦП), а второй — на уровне аналоговой части приёмника.
Для сильных сигналов, таких как сигналы FM-радио, можно включить Tuner AGC, а для слабых — RTL AGC или использовать ручную регулировку ползунком Gain.
Выбор способа демодуляции
В списке флажков Radio нужный вид модуляции отмечается автоматически в зависимости от установленной частоты. Отмечая тот или иной флажок, вы можете указать и другие способы, например:
NFM — узкополосная частотная модуляция, 12.5–25 кГц, используется для радиосвязи;
WFM — широкополосная ЧМ для FM-радиостанций;
AM, LSB, USB — амплитудная модуляция и модуляция с одной боковой полосой — для коротковолновых КВ диапазонов;
CW — работа телеграфом, азбука Морзе;
DSB — двухполосная амплитудная модуляция;
RAW — получение данных в необработанном, «сыром» виде
На рис. 7 показана настройка для приёма текущих погодных условий от диспетчерской станции аэропорта.

Обратите внимание, что здесь выбрана амплитудная модуляция АМ, а с помощью движка Gain установлено усиление 36.4 дБ. Также отмечен флажок Carrier AGC, задающий такой режим работы схемы АРУ, при котором уровень усиления приёмника подстраивается не по модулированному сигналу (голосу), а по уровню несущей компоненты сигнала.
Запись аудио
Если вам удалось «поймать» интересную радиопередачу, её можно записать в файл. Для этого прокрутите вниз левую полосу и найдите там блок Recorder (рис. 8).

Укажите каталог, в который нужно сохранить звук, а затем щёлкните кнопку Record для начала записи. После этого кнопка будет называться Stop и с её помощью можно остановить запись звука в файл.
Сканирование радиодиапазона
Максимальный диапазон сканирования приёмника RTL-SDR Blog 4 не превышает 2 МГц, поэтому на его базе не получится сделать сканер, показывающий спектрограмму широкого диапазона частот в реальном времени. Однако есть хорошая новость — с помощью программы командной строки rtl_power можно запустить такое сканирование, хотя и не в реальном времени.
Программа rtl_power сканирует широкий радиочастотный диапазон
Если у вас в системе есть драйверы RTL-SDR (а они были добавлены при установке программы SDR++), то в вашем распоряжении уже есть программа rtl_power. В процессе сканирования она измеряет мощность сигнала для частот заданного диапазона, записывая мощность сигнала для каждой частоты в CSV-файл.
Далее вы можете анализировать этот файл, формировать спектрограммы и графическое отображение в виде «водопада».
Параметры программы rtl_power
При запуске программы можно задавать частотный шаг сканирования (-f), интервал интеграции (-i), длительность сканирования (-e) и окно сглаживания (-w).
Параметр -f задаёт диапазон и шаг сканирования частот в формате:
-f <start_freq>:<stop_freq>:<step>
Например, если нужно просканировать диапазон частот FM-радио с шагом 31.25 КГц, укажите этот параметр так:
-f 87M:109M:31.25k
Параметр -i задаёт время усреднения мощности на каждой точке спектра и указывается в секундах, например:
-i 1s
Здесь сигнал усредняется в течение 1 секунды для каждой частоты. Увеличение времени интеграции уменьшает шум, но увеличивает общее время сканирования.
Параметр -e задаёт общую продолжительность работы программы в секундах (s), минутах (m), или часах (h). В следующем примере сканирование будет выполняться пять минут:
-e 5m
Параметр -w задаёт тип окна, применяемого к спектру для уменьшения побочных эффектов дискретного преобразования Фурье (DFT). Можно задавать такие типы, как rect, hamming, hann, blackman:
-w hamming
Этот параметр уменьшает утечки мощности в соседние частоты и делает график спектра более точным, но немного снижает разрешение.
Далее я буду использовать такую команду:
# rtl_power -f 87M:109M:31.25k -s 2.4M -g 20 -w hamming -P -c 0.05 -i 1s -e 3m spectrum/out87-109.csv
Она сканирует FM-диапазон с высокой точностью, усредняя сигнал каждую секунду, и сохраняет спектральные данные для дальнейшего анализа. Ниже приведено описание её параметров:
-f 87M:109M:31.25k — задан диапазон сканирования от 87 до 109 МГц с частотным шагом 31,25 КГц;
-s 2.4M — ширина полосы пропускания (sample rate) 2,4 МГц для RTL-SDR;
-g 20 — усиление ресивера 20 dB;
-w hamming — окно Хэмминга для сглаживания спектра, уменьшает утечки в соседние частоты:
-P — включение «поэтапного» (progressive) сканирования;
-c 0.05 — порог коррекции смещения мощности (calibration offset) 0,05 dB;
-i 1s — интервал интеграции 1 секунда для каждой точки спектра;
-e 3m — общая длительность сканирования 3 минуты;
spectrum/out87-109.csv — путь и имя CSV-файла для сохранения результатов
Параметр -P необходим для поэтапного сканирования большого диапазона частот. Я указал его, потому что приёмник RTL-SDR не может охватить весь нужный мне диапазон.
Параметр c (calibration offset) нужен для получения более точных значений мощности в CSV-файле. Приёмник RTL-SDR может измерять мощность с небольшим систематическим смещением (offset) из-за особенностей ресивера или усилителя. Параметр -c позволяет компенсировать это смещение.
Формат создаваемого CSV-файла
Программа rtl_power формирует CSV-файл с временными и частотными данными, состоящими из ряда строк для каждого интервала измерений.
Поля строк включают:
timestamp— время проведения измерения, в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС (UTC);
f_start — начальная частота сканируемого диапазона (Гц) данного интервала;
f_stop — конечная частота сканируемого диапазона (Гц) данного интервала;
f_step — частотный шаг между точками измерения (Гц);
power_1, power_2, ... power_n — измеренные уровни мощности сигнала для каждой частотной точки в dBm
Таким образом, каждая строка CSV соответствует одному временному интервалу и набору измерений мощности по выбранному диапазону частот. Этот формат позволяет строить тепловые карты, водопады и графики спектральной активности с помощью различных программ.
Нужно учесть, что длительное сканирование создаёт CSV-файлы большого размера.
Более подробное описание rtl_power можно найти на странице RTL_POWER(1) - Linux manual page online.
Строим водопад на базе CSV-файла
Приведем две программы, обрабатывающие CSV-файлы, созданные программой rtl-power. Одна из них создает графическое изображение водопада для диапазона FM-радио, а вторая рисует спектр в графическом виде для этого же диапазона.
Чтобы запустить сканирование, я создал каталог /root/spectrum и в нём запустил утилиту rtl_power:
# rtl_power -f 87M:109M:31.25k -s 2.4M -g 20 -w hamming -P -c 0.05 -i 1s -e 3m spectrum/out87-109.csv
Программа работала у меня несколько десятков минут и создала CSV-файл размером 1,7 Мбайт.
Далее я загрузил программу heatmap.py из репозитория https://github.com/CGrassin/rtl_power_scripts и запустил её:
# python3 heatmap.py spectrum/out87-109.csv spectrum/out87-109.png
В результате был очень быстро создан файл с изображением водопада, показанный на рис. 9.

Здесь полосы соответствуют обнаруженным FM-станциям. Чем полоса ярче, тем сигнал станции мощнее.
Строим спектр диапазона FM-радио
Чтобы получить в графическом виде более информативный спектр по результатам работы программы rtl_power я подготовил на Python скрипт fm_plot.py. Вы можете скачать его из моего репозитория:
import sys
import os
import argparse
import csv
import numpy as np
import matplotlib.pyplot as plt
from collections import defaultdict
from scipy.signal import find_peaks
# --- Аргументы командной строки ---
parser = argparse.ArgumentParser(description="Построение спектра RTL-SDR с выделением станций")
parser.add_argument("-f", "--file", type=str, required=True, help="Путь к CSV файлу")
parser.add_argument("-t", "--threshold", type=float, default=1.5,
help="Порог обнаружения пиков: среднее + X * стандартное отклонение (по умолчанию 1.5)")
parser.add_argument("-o", "--output", type=str, default="spectrum_full_marked.png",
help="Путь для сохранения графика (PNG)")
args = parser.parse_args()
csv_file = args.file
output_png = args.output
threshold_multiplier = args.threshold
# --- Считываем данные ---
spectrum = defaultdict(list)
with open(csv_file, "r") as f:
reader = csv.reader(f)
for row in reader:
if len(row) < 7:
continue
try:
start_freq = float(row[2])
stop_freq = float(row[3])
bin_size = float(row[4])
powers = list(map(float, row[6:]))
except ValueError:
continue
bin_count = len(powers)
freqs = np.linspace(start_freq, stop_freq, bin_count)
for f_val, p_val in zip(freqs, powers):
spectrum[f_val].append(p_val)
# --- Усреднение ---
all_freqs = np.array(sorted(spectrum.keys()))
avg_powers = np.array([np.mean(spectrum[f]) for f in all_freqs])
# --- Обнаружение пиков ---
threshold = np.mean(avg_powers) + threshold_multiplier * np.std(avg_powers)
peaks, _ = find_peaks(avg_powers, height=threshold, distance=5)
# --- Построение графика ---
plt.figure(figsize=(12, 6))
plt.plot(all_freqs / 1e6, avg_powers, color='blue', linewidth=1, label='Спектр')
plt.plot(all_freqs[peaks] / 1e6, avg_powers[peaks], 'ro', label='Станции')
for f, p in zip(all_freqs[peaks], avg_powers[peaks]):
plt.text(f/1e6, p + 0.5, f"{f/1e6:.2f}", color='red', fontsize=8, rotation=45)
plt.title("Усреднённый спектр RTL-SDR с выделенными станциями")
plt.xlabel("Частота (МГц)")
plt.ylabel("Мощность (дБ)")
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.savefig(output_png, dpi=150)
plt.close()
print(f"График сохранён в {output_png}")
print(f"Найдено станций: {len(peaks)}")
Перед запуском этого скрипта установите пакет scipy:
# python3 -m pip install --user scipy
При запуске нужно указать путь к CSV-файлу, полученному от программы rtl_power, порог обнаружения пиков для выделения станций, а также путь к создаваемому графическому файлу спектра:
# python3 fm_plot.py -f fm_scan.csv -t 1.3 -o my_spectrum.png 2>/dev/null
Чтобы избавиться от предупреждений GTK, связанных с установленной нестандартной темой, можно просто игнорировать эти сообщения, отправив их в /dev/null.
Пример построенного программой fm_plot.py спектра показан на рис. 10.

Как видите, было обнаружено довольно много радиостанций, но отмечены не все. Вы можете попробовать изменить значение порога обнаружения пиков, чтобы найти станции с относительно слабыми сигналами.
Сканируем авиа радиочастотный диапазон
Очень интересно прослушивать авиа- диапазон, в котором общаются пилоты и авиадиспетчеры, транслируется текущие состояние погоды и ведутся служебные переговоры.
Чтобы сканировать авиа- диапазон, изменим параметры команды rtl_power:
# rtl_power -f 127M:129M:5k -s 1.2M -g 20 -w hamming -P -c 0.05 -i 2s -e 5m out118-137_precise.csv
Созданный этой командой CSV-файл я передал программе fm_plot.py для построения спектра:
python3 fm_plot.py -f out118-137_precise.csv -t 1.5 -o out118-137_precise.png 2>/dev/null
Полученное изображение спектра показано на рис. 11.

Здесь не так много станций, причём разговоры пилотов с диспетчерской обычно длятся очень недолго.
Приёмник RTL-SDR Blog 4 как сервер на базе Repka Pi
Можно сделать удалённый доступ по сети к приёмнику RTL-SDR Blog 4. При этом приёмник и микрокомпьютер, такой как Repka Pi, может быть расположен рядом с антенной, фильтром и малошумящим антенным усилителем. При этом удалённо работать можно через SSH, используя такие программы, как PuTTY или подобные. Так же можно использовать варианты установки программ для управления удалённым рабочим. Статьи с подробными инструкциями, как это можно сделать, есть в блоге со статьями на сайте проекта Репка.
Принятый сигнал будет транслироваться по сети, локальной или через интернет, и его можно принять, например, с помощью программы SDR#, аналогичной по своему назначению программе SDR++.
Такое решение позволяет отказаться от длинного фидера, соединяющего антенну с приёмником и вызывающим ослабление сигнала. Вы можете установить антенну с фильтром, усилителем, приёмником и микрокомпьютером Repka Pi на крыше, а управлять этим хозяйством из любой комнаты вашего дома или (при соответствующих сетевых настройках) через интернет.
Что дальше
Надеемся, что с помощью этой статьи удастся получить удовольствие от сканирования радио эфира и сделать первые шаги в цифровой радиотехнике с помощью приёмника RTL-SDR Blog 4 и на удивление получившегося удачным микрокомпьютера Repka Pi 4, работающего в отличии от Raspberry Pi в т.ч. с накопителем не только в виде SD карты, но и в виде более быстрого и надёжного EMMC модуля. Дальнейшая работа в данном направлении.
Дальнейшие шаги могут быть уже куда более интересными - работа с SDR приёмо- передатчиками, написание собственного программного обеспечения для управления системными функциями работы с радио эфиром, создание Web сервера и программно управляемой радиоточки или сканера эфира с самыми разнообразными функциональными возможностями.
Важно подчеркнуть, что уверенность приёма, особенно слабых сигналов, зависит от выбора антенны и места её установки и это уже отдельная большая тема для изучения.
Что же касается одноплатников Repka Pi, то тут остаётся так же посмотреть статьи с самыми разными DIY проектами в блоге этого российского проекта, так же сейчас уже много статей с проектами на базе Репки тут, на нашем любимом Хабре.
73! На связи.