LittleSam129 1e4adc0a98 Lab042: correct the sample rate against the real device
Queried the Pluto over IIO before writing any code. Three findings, one
of which invalidated the specification.

The AD9361 will not sample below 2 083 333 Hz, so the 640 kHz taken from
Lab018 is unreachable by a factor of three. Going lower needs the on-chip
FIR decimator, which would add an untested mechanism to the very first
transmit. Instead raise oversampling from 32 to 128 samples per symbol:
the symbol rate stays at 20 000, rolloff, preamble, sync word and guard
are untouched, and the rate becomes 2 560 000 Hz. Only the device
interface changes, not the signal.

Consequence recorded: the shaping filter grows to 1281 taps, so the
convolution has to go through scipy.signal.fftconvolve.

Also from the device:
- it reports as PlutoSDR Rev.C (Z7010-AD9361) with a single RX and a
  single TX buffer channel, so adi.Pluto is right and the adi.ad9361
  fallback is unnecessary
- the chip is a full AD9361: RX tunes 70 MHz to 6 GHz, TX from 46.9 MHz,
  so the sub-350 MHz target band is available without a firmware hack.
  That closes the open question flagged for Lab044
- firmware is v0.32, left alone for now

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 14:06:44 +03:00

SDR Rover Link

1. Назначение проекта

SDR Rover Link — учебно-исследовательский проект по разработке цифрового радиоканала для наземного робототехнического комплекса с использованием программно-определяемого радио — SDR, Software Defined Radio.

Проект должен пройти полный путь от передачи простого текстового пакета до передачи телеметрии и отдельных JPEG-изображений через реальный радиоканал.

Основная задача проекта — не только получить работающую систему, но и последовательно изучить все этапы цифровой радиосвязи:

  • формирование данных;
  • разбиение данных на пакеты;
  • контроль целостности;
  • исправление ошибок;
  • цифровую модуляцию;
  • формирование IQ-сигнала;
  • передачу через SDR;
  • приём и демодуляцию;
  • восстановление исходных данных.

2. Целевой сценарий

Разрабатываемая система предназначена для исследовательского наземного ровера.

Целевые требования:

Параметр Требование
Дальность связи до 10 км
Скорость ровера до 25 км/ч
Прямая радиовидимость может отсутствовать
Рабочие частоты ниже 350 МГц
Основной тип данных телеметрия и отдельные изображения
Формат изображения JPEG
Частота передачи изображений отдельные кадры, не видеопоток
Действие при потере связи безопасная остановка ровера

Дальность 10 км без прямой видимости является целевым исследовательским требованием, а не гарантированной характеристикой первой версии системы.


3. Почему не используется обычное FPV-видео

Типовые FPV-системы работают преимущественно в диапазонах 2,4 и 5,8 ГГц.

Для наземного робота такие диапазоны имеют ряд ограничений:

  • высокие потери при работе у поверхности земли;
  • затенение рельефом, зданиями и растительностью;
  • быстрое ухудшение изображения при слабом сигнале;
  • высокая загруженность распространённых диапазонов;
  • зависимость от постоянного широкополосного видеопотока.

В этом проекте вместо непрерывного видео предполагается передавать отдельные сжатые изображения.

Пример:

Камера
  ↓
JPEG-изображение
  ↓
Разбиение на пакеты
  ↓
Передача через SDR
  ↓
Сборка изображения на наземной станции

Такой подход позволяет существенно снизить требуемую скорость радиоканала.


4. Текущее оборудование

SDR-оборудование

  • RTL-SDR — приёмник;
  • ADALM-PlutoSDR — приёмопередатчик, ожидается поступление;
  • HackRF One — может временно использоваться при необходимости.

Вычислительное оборудование

  • компьютер под управлением Windows;
  • Raspberry Pi — планируется для установки на ровер;
  • бортовой вычислитель ровера — будет выбран позднее.

Программное обеспечение

  • Python 3.12;
  • Anaconda;
  • Spyder;
  • Git;
  • GNU Radio — будет установлен на следующем этапе;
  • libiio и драйверы PlutoSDR — будут установлены после получения устройства.

5. Предварительно рассматриваемые диапазоны

В рамках проекта рассматриваются:

  • 27 МГц;
  • 50 МГц;
  • 144 МГц;
  • другие разрешённые для лабораторных испытаний частоты ниже 350 МГц.

Конкретный диапазон будет выбран после анализа:

  • доступной полосы;
  • требований законодательства;
  • размеров антенны;
  • потерь распространения;
  • уровня внешних помех;
  • возможностей выходного радиочастотного тракта;
  • допустимой мощности передачи.

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


6. Основные этапы проекта

Этап 0. Подготовка среды

  • создание репозитория;
  • настройка Git;
  • настройка Python и Spyder;
  • подготовка структуры каталогов;
  • ведение документации.

Этап 1. Пакетный протокол

  • структура пакета;
  • типы сообщений;
  • порядковый номер пакета;
  • длина данных;
  • CRC;
  • кодирование и декодирование.

Этап 2. Виртуальный канал

  • передача пакетов между Python-программами;
  • имитация потерь;
  • имитация повреждения битов;
  • измерение числа ошибочных пакетов.

Этап 3. Передача файлов

  • разбиение файла на фрагменты;
  • нумерация фрагментов;
  • подтверждение приёма;
  • повторная передача;
  • сборка исходного файла.

Этап 4. Передача изображений

  • загрузка JPEG;
  • разбиение JPEG на пакеты;
  • передача через виртуальный канал;
  • восстановление изображения;
  • обработка потерянных фрагментов.

Этап 5. Физический уровень

  • BPSK;
  • QPSK;
  • формирование символов;
  • IQ-сэмплы;
  • синхронизация;
  • фильтрация;
  • оценка BER и PER.

Этап 6. PlutoSDR

  • подключение устройства;
  • передача несущей;
  • передача тестовой последовательности;
  • передача цифрового пакета;
  • приём сигнала RTL-SDR или вторым SDR.

Этап 7. Радиоканал передачи изображений

  • передача JPEG через SDR;
  • измерение времени доставки;
  • испытания при различных уровнях сигнала;
  • испытания при наличии помех;
  • подбор скорости и модуляции.

Этап 8. Полевые испытания

  • испытания на малой мощности;
  • испытания на малой дистанции;
  • постепенное увеличение расстояния;
  • испытания с ретранслятором;
  • испытания на наземном ровере.

7. Структура репозитория

SDR_Rover
│
├── README.md
├── docs
├── protocol
├── rover
├── ground_station
├── gnuradio
├── tests
└── tools

docs

Документация, лабораторные работы, схемы и отчёты.

protocol

Реализация пакетного протокола:

  • структура пакета;
  • CRC;
  • кодирование;
  • декодирование;
  • типы сообщений.

rover

Программы, которые будут работать на борту ровера:

  • получение изображения;
  • сжатие JPEG;
  • передача телеметрии;
  • формирование радиопакетов.

ground_station

Программы наземной станции:

  • приём пакетов;
  • сборка изображений;
  • отображение телеметрии;
  • управление передачей.

gnuradio

Схемы GNU Radio Companion:

  • передатчик;
  • приёмник;
  • BPSK-модем;
  • QPSK-модем;
  • тестовые генераторы.

tests

Автоматические и лабораторные тесты.

tools

Вспомогательные программы:

  • анализ пакетов;
  • генераторы тестовых данных;
  • построение графиков;
  • анализ журналов.

8. Принципы разработки

В проекте применяются следующие правила:

  1. Каждый новый термин сначала объясняется, затем используется.
  2. Каждый этап должен завершаться работающим результатом.
  3. Радиоканал и пакетный протокол разрабатываются отдельно.
  4. Код проверяется автоматическими тестами.
  5. Все существенные решения фиксируются в документации.
  6. Сложность увеличивается постепенно.
  7. Испытания по эфиру начинаются только после проверки через виртуальный канал.
  8. Передатчик сначала проверяется через аттенюатор или эквивалент нагрузки.

9. Текущий статус

Выполнено:

  • установлен Python;
  • установлена Anaconda;
  • выбран Spyder;
  • установлен Git;
  • создан локальный Git-репозиторий;
  • создана базовая структура каталогов.

Следующая задача:

Создать первый Python-модуль пакетного протокола и передать сообщение через виртуальный канал без SDR-оборудования.


10. Ближайший контрольный результат

Первая рабочая версия должна выполнять следующий цикл:

Текстовое сообщение
        ↓
Преобразование в байты
        ↓
Формирование пакета
        ↓
Добавление CRC
        ↓
Имитация радиоканала
        ↓
Проверка CRC
        ↓
Восстановление сообщения

Первое тестовое сообщение:

HELLO SDR

11. Автор

Антон

НИЯУ МИФИ

2026

Description
No description provided
Readme 22 MiB
Languages
Python 100%