Честные 24 бита, 16-бит TX DAC и стабилизация PureSignal
Технический обзор модернизации SDR-трансивера Anvelina PRO III rev 4.0
Введение
Данный релиз охватывает три независимых слоя системы: аппаратный (аудиокодек и аналоговый тракт), прошивочный (FPGA, TX-тракт, DSP) и хостовый (Thetis, PureSignal).
Работа велась итеративно; представленный результат является третьей ревизией после двух полных циклов доработки.
|
+12
дБ к полке TX
|
24
бита аудио
|
16
бит TX DAC
|
0
сбоев старта
|
+10
дБ пик-фактор
|
Миф «16 бит в 32-битной обёртке»
С 2008 года протокол HPSDR передаёт аудиоданные в 32-битных словах, однако реальная разрядность составляла 16 бит. Старшие 16 бит заполнялись нулями.
«Установка внешней звуковой карты с поддержкой 24/32 бита обеспечит честные 24 бита.»
✕ Ошибка: настройка интерфейса не изменяет разрядность протокола.
| 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Рис. 2. 32-битное слово HPSDR: биты 0–15 — данные, биты 16–31 — padding
01. Аппаратная часть
1.1 Аудиокодек TLV320AIC3204
Плата rev 4.0 оснащена кодеком TLV320AIC3204 взамен TLV320AIC23B.
| Параметр | AIC23B | AIC3204 |
|---|---|---|
| SNR | ~90–95 дБ | ~100–106 дБ |
| THD+N | ~−85 дБ | ~−100 дБ |
| Разрядность | 16 бит | 24 бита |
| Noise floor | ~−90 дБ | ~−104 дБ |
1.2 Практический эффект
Переход на AIC3204 обеспечивает снижение собственного шума аналогового тракта на 14 дБ. Пик-фактор улучшился минимум на 10 дБ.
Thetis считывает hw_rev из discovery-пакета. Rev 4.0 → 24-битный режим; legacy → 16-битный. Обратная совместимость сохраняется.
1.3 Оптимизация аналогового тракта
- Микрофон (WM-61A): MICBIAS = 1.7 В, входное сопротивление 20 кОм, ток 0.3 мА. Линейный режим.
- Наушники: выходные конденсаторы 10 мкФ → 100 мкФ. Частота среза ~500 Гц → ~50 Гц.
02. FAQ: 24-битный аудиотракт
03. Прошивка 2.2.15
3.1 TX DAC: расширение окна до 16 бит
Ранее DAC MAX5891 управлялся 14-битным окном [21:8] с двумя нулевыми LSB. Теперь окно [21:6] — полные 16 бит с round-to-nearest и TPDF-дизером.
Шум квантования ∝ 2−N
Переход 14 → 16 бит: 20·log₁₀(2²) ≈ +12.04 дБ
Потолок SNR: 6.02·16 + 1.76 = ~98.1 дБ
3.2 CORDIC: повышение разрядности
- Внутренние стадии: 20 → 22 итерации, шина 24 → 26 бит. Снижена угловая систематика (дискретные спуры CW).
- Выходная шина: 22 → 24 бита. Устранён wrap на полном драйве (документированное отклонение 4 194 304).
3.3 RX-спур 28.431 МГц — устранение
Выявлен побочный эффект: гребёнка LFSR-дизера (период 255 тактов при 122.88 МГц → шаг 481.882 кГц, 59-я гармоника = 28.431 МГц) попадала в приёмник.
- Гейтирование LFSR по сигналу TX.
- Удлинение LFSR до 24 бит: период ~16.78 млн тактов, шаг спектральных линий 7.3 Гц.
3.4 Стабилизация холодного старта PSA
Проблема: в 25–33% случаев при холодном старте — высокая IMD-гребёнка на двухтоновом тесте.
Источник дефекта находился в wdsp. Исправление применимо ко всем платформам, использующим Thetis (Anan, Hermes, Red Pitaya).
Два корневых дефекта:
- Случайная фаза TX NCO (
cpl_cordicне сбрасывался): θ₀ случайная → m0 варьировался 0.78…1.12. Фикс: жёсткий сброс фазы NCO при каждом рестарте. - Экстремальные ym на нулях биения (шум feedback) искажали МНК-фит бина 0 на ±5–20%. Фикс: нижний гейт
env ≥ 1/256.
Результат: серия 20+ циклов power on/off, m0 ≈ 1.00 при каждом включении; отказов 0.
3.5 Тайминг и CDC
Исправлена ошибка CDC: гейт дизера вводил асинхронный PTT-сигнал в быстрый домен. Добавлен 2-FF синхронизатор + регистр.
STA: 0 violations, setup slack +0.75 нс (было −4.489 нс, критический фейл).
04. Thetis: надзорный движок PureSignal
Ядро фита (wdsp calcc) оставлено без изменений. Надзорный слой обеспечивает следующие гарантии:
[wdsp calcc] ядро фита (стоковое)
+ jump-check (cm/cc/cs vs опорная)
+ DCB-якорь (гейт 24-бит)
+ нижний гейт сбора (env >= 1/256)
+ P1 кэш кривых / P2 двухскоростная
[Thetis PSForm] оркестрация · индикация · ATT
[ChannelMaster] сетевой паддинг (гейт rev4)
└─────────────────────────────────────────────┘
- Jump-check: свежая кривая сравнивается с опорной. Скачок > 0.05 → отклонение. Одиночные шумные калибровки не проходят.
- Контекстная память (P1): кэш по частоте/бенду (16 слотов, персистентность). Ретюнинг = мгновенная коррекция.
- Двухскоростная калибровка (P2): грубый проход 64/бин при отсутствии кэша; уточняющий 256/бин.
- DCB-якорь: «загрязнённые» бины заменяются донорскими. Только 24-битный режим.
- Сетевой паддинг: потерянные UDP-кадры заполняются нулями. Только rev 4.
05. Результаты на стенде
| Метрика | Было (2.2.14) | Стало (2.2.15) |
|---|---|---|
| Окно TX DAC | 14 бит + 2’0 | 16 бит + дизер |
| Полка квантования TX | ~86 дБ | ~98 дБ |
| RX-спур 28.431 МГц | нет | устранён |
| Холодный старт PSA | решено (Thetis/wdsp) | решено (Thetis/wdsp) |
| m0 (бин 0) | 0.78…1.12 | ≈ 1.00 |
| STA setup slack | +0.001 нс (крит.) | +0.75 нс |
| Звук RX (наушники) | шум при нуле | тишина |
| Пик-фактор | — | +10 дБ |
Верификация
- iverilog тестбенчи: TB1 (DAC/округление/дизер), TB2 (CORDIC/wrap) — PASS.
- Quartus STA: 0 violations, все slacks положительны.
- Стенд: CW, двухтон, серия power on/off, RX/TX.
Ресурсы FPGA
| Ресурс | Занято | Примечание |
|---|---|---|
| Logic Elements | 70 097 / 114 480 (61%) | +~400 к изменениям |
| Память (бит) | 1 116 064 / 3 981 312 (28%) | — |
| 9-бит умножители | 202 / 532 (38%) | — |
| PLL | 4 / 4 (100%) | — |
06. Дальнейшие шаги
- Работа в эфире на КВ-диапазонах, накопление статистики.
- Дополнительная оптимизация аналогового тракта.
- Оценка возможности расширения 24-битного режима на legacy-платы.
- Подготовка ревизии 4.1.
Thetis v2.10.3.16 Extended (Final) — версия с поддержкой GPU FFT, стабилизацией PureSignal и всеми исправлениями, описанными в статье.
Выражаю признательность группе тестеров за терпение при проверке промежуточных сборок, предоставление логов и конструктивную обратную связь. Без участия сообщества данный релиз был бы невозможен.
Юрий, но ведь по даташиту AIC23B может работать вплоть до 32-х бит. Шумновата относительно конечно. но что могло бы дать просто увеличение разрядости ? для начала. Вот пример какой-то нашел — https://docs.rs/tlv320aic23/latest/tlv320aic23/enum.InputBitLength.html
Владимир Здравствуйте! Да я хорошо знаю этот кодек, и изначально так вопрос и стоял расширить его до 24-битт но вы прочитайте внимательно маю статью там я писал в чем проблема, то есть короче говоря такой действия только добавило бы мусорные биты и не чего не дало бы по факту. Второй сам кодек не просто старый а очень древний развязка внутренних цап и адц развязки каналов и тд.. плохое вернее было достаточное на 2001год но недостаточное на сегодняшний день.
Принято, Юрий ! вот почему и стало интересным почему бы его не заставить работать на 24-х битах. ну за не невозможностью пока засунуть в корпус вместо него некой платки с другим кодеком. ну раз нет смысла… спасибо, Юрий.
Владимир Есть такие мысли попробовать, тут смысл в том, если это не ухудшит параметры и останется не хуже чем было, то смысл есть для для внешнего звука и обработки на стороне пк.
Вот ! ну вот это же я и имею в виду ! именно звук. Спасибо, Юрий.
Владимир если готовы протестировать напишите мне на имейл, сам аудио кодек работает как и раньше 16бит в завернутой оболочке 24. Со стороны компьютера теперь мы видим настоящий 24 аудио поток rx/tx.
Юрий, да конечно же ! Всегда готов с удовольствием. не совсем понял на счет оболочки.