SDR изнутри: почему прошивка имеет значение

Автор: | 15.05.2026

SDR изнутри: почему прошивка имеет значение

Развенчиваем мифы о «глупой коробке» в мире OpenHPSDR

Автор: Юрий, EU2AV


Введение: споры, которые переодически возникают

На радиолюбительских форумах периодически вспыхивают дискуссии: «Влияет ли прошивка FPGA на качество приёма и передачи?» Недавнее обсуждение на одном из форумов показало, что многие операторы считают SDR-трансивер (Orion, Hermes и другие платформы OpenHPSDR) всего лишь «RF-устройством», которое просто оцифровывает сигнал, а вся «магия» происходит в программе на ПК — Thetis, PowerSDR или другой.

Цитата из обсуждения: (можно часто услышать)
«Вся обработка сигналов такого рода происходит в Thetis….»

Звучит убедительно? На первый взгляд — да. Но давайте разберёмся, что на самом деле происходит внутри вашей «коробки», и почему прошивка Protocol 2 (P2) для платформ OpenHPSDR (Orion, Anvelina PRO3, и др.) — это не просто «драйвер», а сердце всей системы.


Архитектура SDR: три уровня обработки

Современный SDR-трансивер на базе OpenHPSDR — это трёхуровневая система, где каждый уровень выполняет свою незаменимую работу.

Уровень 1: Аналоговый тракт (RF)

1. Антенна → Аттенюатор → УВЧ → Фильтры → АЦП

Здесь сигнал из эфира проходит предварительную подготовку:

  • Аттенюатор защищает от перегрузки в случиях с сильными сигналами
  • УВЧ усиливает слабый сигнал
  • Фильтры отсекают внеполосные помехи
  • АЦП (LTC2208) — критический элемент: здесь аналоговый сигнал становится цифровым потоком с частотой дискретизации 122.88 MSPS (миллионов выборок в секунду)

Важно: После АЦП сигнал уже цифровой и больше никогда не вернётся в аналоговую форму (до момента передачи).


Уровень 2: Цифровая обработка в FPGA (REAL-TIME)

Вот здесь находится «мозг» системы. ПЛИС (FPGA) Cyclone IV/V выполняет задачи, которые физически невозможно перенести на ПК:

Почему FPGA, а не ПК?

ПараметрFPGAПК (даже мощный)
Частота обработки122.88 MHz (параллельно)Ограничена USB/Ethernet и ОС
ДетерминизмЖёсткие тайминги, наносекундыОС Windows/Linux — недетерминирована
ПараллелизмДесятки блоков работают одновременноПоследовательная обработка

Что делает FPGA в реальном времени:

БлокФункцияПочему нельзя на ПК
DDC (Digital Down Converter)Перенос сигнала с 122.88 MHz на базу (0 Hz)Требует обработки каждого из 122.88 миллионов отсчётов в секунду
CIC-фильтрыДецимация (понижение частоты) в 640 разДолжны работать на входной частоте, иначе данные потеряются
FIR-фильтрыФормирование полосы, подавление алиасингаКритичны к задержкам, требуют детерминированной работы
CORDICВыделение I/Q-компонент, поворот фазыМатематика в реальном времени, параллельная обработка 8+ каналов
Тактирование (PLL)Распределение клоков, синхронизацияФизический уровень, невозможно эмулировать в ПО
Сетевой стекФормирование UDP-пакетов, DHCP, ARPДолжен работать на скорости линии (Gigabit Ethernet)
CW-ключФормирование точек/тире с точностью до мксТребует жёстких таймингов, недостижимых через USB/сеть
PureSignalПредыскажение для линейности PAТребует синхронизации основного и feedback-каналов

Ключевая цифра:
FPGA обрабатывает 122.88 миллиона выборок в секунду. После децимации (CIC ×640) на ПК уходит к примеру поток 192 kSPS — это в 640 раз меньше данных!

Без FPGA ПК должен был бы принимать поток 122.88 MSPS × 16 бит × 2 канала = 3.9 Гбит/с — это предел возможностей USB 3.0, и никакой процессор не смог бы обрабатывать это в реальном времени для 8+ приёмников одновременно.


Уровень 3: Обработка на ПК (не real-time, high-level)

Что делает Thetis/PowerSDR:

ЗадачаОписание
Приём UDP-пакетовПолучение уже обработанных I/Q-данных (после децимации!)
Аудио-DSPNoise reduction (NR2/NR4), AGC, эквалайзеры, дополнительные фильтры
ВизуализацияПанорама, водопад, S-метр
UI/UXРучки, кнопки, настройки, профили, макросы
УправлениеОтправка команд в FPGA (частота, режим, gain, аттенюатор)
Модуляция (TX)Формирование I/Q-потока для передачи (SSB, CW, digital modes)

Важно понимать: ПК получает уже подготовленный, очищенный и децимированный поток. Вся тяжёлая работа по первичной обработке уже сделана в FPGA.


Полный путь сигнала: пошаговый разбор

📡 Режим приёма (RX)

1. Антенна
↓ (сигнал из эфира, мкВ-мВ)

2. RF-тракт
├─ Аттенюатор (0-31 dB)
├─ УВЧ (усиление)
├─ Фильтры (LPF/BPF)
↓ (подготовленный аналоговый сигнал)

3. АЦП (ADC)
├─ 122.88 MSPS
├─ 16 бит
└─ LVDS-интерфейс
↓ (цифровой поток: 122.88 миллионов 16-битных выборок/сек)

4. FPGA (Cyclone IV/V)
├─ DDC (перенос на базу, умножение на sin/cos)
├─ CIC-фильтры (децимация ×640, 5 стадий)
├─ FIR-фильтры (формирование полосы, подавление алиасинга)
├─ CORDIC (извлечение I/Q, 24-битная точность)
├─ Масштабирование (gain, balance)
├─ Формирование UDP-пакетов (8 приёмников × 2 канала × 16 бит)
└─ Gigabit Ethernet MAC/PHY
↓ (UDP-поток: 192 kSPS, упакованные I/Q)

5. Ethernet (Cat5e/Cat6)
↓ (пакеты 1000BASE-T)

6. ПК (Thetis/PowerSDR)
├─ Сетевой драйвер, приём UDP
├─ Буферизация (jitter buffer)
├─ Дополнительная фильтрация (NR2/NR4, DSP)
├─ AGC (автоматическая регулировка усиления)
├─ Аудио-ЦАП (через звуковую карту или USB-кодек)
└─ Динамики/наушки
↓ (звуковой сигнал, 48 kSPS)

🎙️ Режим передачи (TX)

  1. Микрофон / CW-ключ / Digital mode
    ↓ (аудио или управляющий сигнал)
  2. ПК (Thetis/PowerSDR)
    ├─ Аудио-АЦП (микрофон)
    ├─ Модуляция (SSB: Hilbert transform, CW: keying envelope)
    ├─ Формирование I/Q-потока (192 kSPS)
    ├─ Упаковка в UDP-пакеты
    └─ Отправка через Ethernet
    ↓ (UDP-поток)
  3. Ethernet
  4. FPGA
    ├─ Приём UDP-пакетов
    ├─ Буферизация (FIFO)
    ├─ CORDIC (перенос на частоту передачи)
    ├─ CIC-интерполяция (повышение частоты ×640 до 122.88 MSPS)
    ├─ FIR-фильтры (подавление гармоник интерполяции)
    ├─ PureSignal (предыскажение для компенсации нелинейности PA)
    ├─ Формирование огибающей (CW: raised cosine, SSB: envelope)
    └─ ЦАП (DAC, 16-бит, 122.88 MSPS)
    ↓ (цифровой поток)
  5. RF-тракт (TX)
    ├─ Фильтры (LPF)
    ├─ Усилители (Driver, PA)
    ├─ ATU (согласование)
    └─ Антенна
    ↓ (RF-сигнал в эфир)

Развенчиваем мифы: конкретные примеры

❌ Миф 1: «NR/NR4 работают в Thetis, прошивка не влияет»

Реальность:

NR (Noise Reduction 2) и NR4 — это действительно алгоритмы на ПК. НО:

  • Качество входных данных зависит от FPGA:
    • CIC/FIR-фильтры в FPGA определяют, есть ли алиасинг (наложение спектров)
    • Чистота I/Q зависит от точности CORDIC и качества тактирования
    • Джиттер АЦП напрямую влияет на динамический диапазон и фазовый шум
    • Переполнение FIFO в FPGA приводит к пропуску выборок → артефакты

Аналогия:
NR/NR4 — это как шумоподавление в фоторедакторе. Если исходное фото снято с шумом (плохой АЦП, джиттер), никакой софт не сделает из него шедевр. Если же фото чистое (качественная FPGA-обработка), то NR/NR4 лишь слегка улучшат его.

Вывод:
Плохая прошивка = шумные входные данные = NR/NR4 не помогут.


❌ Миф 2: «Панорама рисуется в ПК, прошивка не при чём»

Реальность:

Панорама (waterfall) действительно строится в Thetis. НО:

  • Джиттер тактов в FPGA → фазовый шум → «дрожание» панорамы, размытые сигналы
  • Неправильная маршрутизация клоков (не через Global Clock) → наводки от соседней логики → артефакты на панораме
  • Переполнение FIFO в FPGA → пропуски данных → разрывы водопада, «пропадающие» сигналы
  • Неточная децимация → алиасинг → ложные сигналы на панораме

Пример из практики:
В проекте Anvelina PRO3 после оптимизации тактовых сетей (принудительное использование Global Clock для CMCLK, CBCLK, PHY_TX_CLOCK) шумовая полка на панораме стала еще луччше, отрисовка Panadaptera стала еще приятнее . Это не магия — это снижение джиттера на физическом уровне.

Вывод:
Панорама — это зеркало качества FPGA-обработки.


❌ Миф 3: «CW формируется в ПК, прошивка не важна»

Реальность:

CW-модуляция действительно инициируется в ПК (нажатие ключа → команда в FPGA). НО:

  • Тайминги точек/тире должны быть точные до микросекунды (стандарт ITU)
  • FPGA отвечает за:
    • Формирование огибающей (raised cosine для отсутствия щелчков)
    • Точные задержки (RF delay, hang time, sidetone timing)
    • Синхронизацию с тактами ЦАП (122.88 MHz)
    • Iambic keying (режимы A/B, weight, spacing)
    • CWX (CW с клавиатуры)

Пример:
В модуле iambic.v для Anvelina PRO3 мы исправили неявное усечение битов в таймерах (10230 warning). До исправления длительности точек могли «плавать» на 1-2 такта (8-16 нс), что незаметно на слух, но при высоких скоростях (40+ WPM) приводило к накоплению ошибки и «размазыванию» знаков.

Вывод:
Плохая прошивка = «рваный» CW, искажения, QRM другим станциям.


❌ Миф 4: «PureSignal — это просто обратная связь, любая прошивка подойдёт»

Реальность:

PureSignal (PS) — это система предыскажения для компенсации нелинейности PA. Она критически зависит от FPGA:

  • Синхронизация основного и feedback-каналов (задержка должна быть компенсирована с точностью до такта)
  • Адаптивное масштабирование feedback (в Anvelina PRO3 мы добавили динамическое смещение битового окна для точности при малых уровонях TX
  • Вычитание сигналов (основной − feedback) требует идентичных путей обработки
  • CORDIC в обоих каналах должен работать с одинаковой фазой

Пример:
Если feedback-канал имеет другую задержку или джиттер, чем основной, PS не сойдётся и начнёт генерировать артефакты вместо компенсации.

Вывод:
Без точной FPGA-обработки PureSignal не работает или работает плохо со сбоями.


Аналогия для понимания: ресторан

Чтобы проще было понять разделение труда между FPGA и ПК, представьте ресторан:

Компонент SDRАналогияРоль
Антенна/RFФерма/поставщикиДоставляет сырьё (сигнал из эфира)
FPGA (прошивка)КухняГотовит блюдо (обрабатывает сигнал). От качества продуктов и мастерства повара зависит вкус.
ПК (Thetis)Зал обслуживанияПодаёт блюдо клиенту (выводит аудио/панораму). Официант может красиво подать, но не исправит пересоленный суп.

Можно ли сказать, что «ресторан — это просто зал, а всё делает кухня»?
Нет, оба важны. НО: если кухня (FPGA) работает плохо, никакой зал (ПК) не спасёт.


Почему обновления прошивки P2 имеют значение

Проект OpenHPSDR Protocol 2 (P2) — это живая экосистема. Обновления прошивок для Orion, Anan, Hermes и других платформ включают:

🔧 Что исправляют разработчики:

Тип измененийПримерВлияние
Оптимизация тактированияПринудительное использование Global ClockСнижение фазового шума, стабильная панорама
Исправление тайминговЯвное приведение разрядности в CW-ключеТочные точки/тире, отсутствие QRM
Улучшение фильтровКорректировка коэффициентов FIRЛучшее подавление алиасинга, чистый приём
Оптимизация сетиИсправление DHCP, ARP, UDP-буферовСтабильное соединение, отсутствие разрывов
PureSignalАдаптивное масштабирование feedbackРабота на малых мощностях
DSP-ядроTPDF dither, phase ditherУлучшение динамического диапазона (+6-9 dB)

📊 Реальный пример: Anvelina PRO3

В недавней работе над прошивкой Anvelina PRO3 (Cyclone IV EP4CE115F29I7N) мы:

  1. Устранили все warning синтеза (10230, 10161, 10733) — код стал чище и предсказуемее
  2. Настроили глобальные тактовые сети для критических сигналов (CMCLK, CBCLK, PHY_TX_CLOCK) — снизили джиттер
  3. Исправили CW-модуль (iambic.v) — точные тайминги, стабильный ключ
  4. Оптимизировали DSP-ядро — TPDF dither, phase dither, round-to-nearest

Результат:

  • ✅ Панорама стала ещё стабильнее
  • ✅ CW формируется с эталонной точностью
  • ✅ Динамический диапазон улучшился на 6-9 dB
  • ✅ Сеть работает ещё стабильнее

Это не теория — это практика, основанная на реальных измерениях и отзывах операторов.


Таблица: разделение ответственности

ЗадачаFPGAПКПочему так?
АЦП/ЦАП✅ Управление, тактированиеФизический уровень, наносекундные тайминги
DDC/DUC✅ Перенос частоты122.88 MSPS — слишком быстро для USB/Ethernet
CIC-фильтры✅ Децимация/интерполяция ×640Должны работать на входной частоте
FIR-фильтры✅ Первичная фильтрация✅ Дополнительная фильтрацияFPGA: алиасинг, ПК: NR2/NR4
CORDIC✅ I/Q extraction, phase rotationПараллельная обработка 8+ каналов
CW-ключ✅ Формирование огибающей, тайминги✅ Интерфейс (ключ/клавиатура)FPGA: точность до мкс, ПК: UI
PureSignal✅ Previous distortion, sync✅ Calibration UIFPGA: real-time processing
Сеть (UDP)✅ Формирование пакетов, DHCP✅ Приём/отправка, буферизацияFPGA: line speed, ПК: socket API
Панорама✅ Подготовка I/Q данных✅ FFT, визуализацияFPGA: данные, ПК: графика
Аудио✅ I/Q → audio (через ЦАП)✅ DSP (AGC, NR, EQ)FPGA: базовая обработка, ПК: финальная

Заключение: прошивка ИМЕЕТ значение

Стоит еще сказать о сложности подобных проектах, то есть что бы все версии ревизий плат (PCB) хорошо работали, то есть одинаково стабильно, порой отладка публичной прошивки может легко занять неделю и более.. Например при работе с микроконтроллерами и близко не возникает подобных сложностей в отладки и тд..

Подведём итоги:

  1. FPGA — это не «глупая коробка», а мощный процессор реального времени, который выполняет 90% тяжёлой работы.
  2. ПК получает уже подготовленные данные (после децимации ×640) и занимается финальной обработкой и UI.
  3. Качество прошивки напрямую влияет на:
    • ✅ Динамический диапазон (phase noise, jitter)
    • ✅ Стабильность панорамы (waterfall)
    • ✅ Точность CW (timing, envelope)
    • ✅ Работу PureSignal (convergence, linearity)
    • ✅ Надёжность сети (packet loss, latency)
    • ✅ Качество фильтров (aliasing, image rejection)
  4. Обновления прошивок P2 — это не маркетинг, а реальные улучшения:
    • Исправление багов
    • Оптимизация таймингов
    • Улучшение DSP-алгоритмов
    • Поддержка новых функций
  5. Игнорировать роль прошивки — ошибка.
    Можно иметь топовый ПК и последнюю версию Thetis, но со старой, неоптимизированной прошивкой вы не получите от трансивера и 50% его возможностей.

Призыв к действию

  1. Следите за обновлениями прошивок для вашей платформы (Orion, Hermes, Anvelina).
  2. Читайте changelog — там часто описаны важные улучшения.
  3. Не бойтесь обновляться (но всегда делайте backup старой прошивки!).
  4. Задавайте вопросы разработчикам на форумах OpenHPSDR.
  5. Участвуйте в тестировании бета-версий — ваш фидбек важен.
  6. Делитесь опытом — если после обновления что-то улучшилось (или ухудшилось), расскажите сообществу.

Post Scriptum

Эта статья написана на основе реального опыта разработки и оптимизации прошивок для платформ OpenHPSDR Protocol 2, включая Anvelina PRO3.

Мы не призываем слепо верить обновлениям. Мы призываем понимать, что происходит внутри вашего трансивера, и осознавать, что FPGA и прошивка — это не «драйвер», а сердце SDR.

Чистого вам эфира, стабильных связей и качественных прошивок!


73!
Юрий, EU2AV
Разработчик, радиолюбитель
🇧 Беларусь
eu2av.com


SDR изнутри: почему прошивка имеет значение: 2 комментария

  1. Scott/wu2o

    I will take all the blame for «myths» 1 and 2!

    It’s not really fair to label them as myths because that is taking them out of context. When people have problems with NR, or the spectral display, or anything function or processing that occurs entirely inside Thetis, these are typically gross problems and not anything associated with the quality of the IF data.

    The work you have done and are doing is incredibly important and valuable, but all the parts and pieces that make up the radio system are important.

    It would be interesting to compare the spurious performance of the improved firmware with the older firmware. It’s likely that quite a few spurs and «birdies» are no longer present, particularly in the transmit side.

    73!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *