Охарактеризованная OTA-линии

This commit is contained in:
Maxim
2026-07-14 11:49:12 +03:00
parent 99ce074886
commit c648c91e1b
2 changed files with 64 additions and 16 deletions

View File

@@ -242,12 +242,15 @@ ssh root@192.168.2.1 '/tmp/ofdm_bench 1.92'
1. ✅ Бенчмарк CPU на ARM Pluto → выбран rate 1.92 MSPS
2. ✅ Перенос TX/RX на Pluto (`local:`), фиксы техдолга #1#7 (см. §9)
3. ⚙️ **текущий этап** — файл через эфир (OTA), md5 на 1 и 10 МБ.
Ввод в строй ведётся строго OTA; кабельный этап осознанно пропущен.
3. ⚙️ **текущий этап** — файл через эфир (OTA). Ввод в строй строго OTA;
кабельный этап осознанно пропущен.
✅ 2026-07-14: цифровой BIST-loopback подтвердил DSP-тракт (§12.2)
✅ 2026-07-14: первый OTA-приём — 10 КБ байт-в-байт, EVM 22.7 дБ (§12.3);
под RS/нагрузкой нужен троттлинг `-p` или двухпоточный RX
4. Антенны на столе: замер скорости, PER, счётчик потерянных seq (#6)
✅ 2026-07-14: первый OTA-приём — 10 КБ байт-в-байт, EVM 22.7 дБ (§12.3)
✅ 2026-07-14: пауза `-p 6000` убрала throughput-потери (100 КБ — 100/100);
на 1 МБ остаточный PER ≈ 0.2% (2 кадра). Побайтовый md5 на объёме отложен
на ARQ/дуплекс (п.5) — решение §12.3; веха симплекса = PHY-линия + PER
4. ✅ 2026-07-14: антенны на столе — PER 10 МБ ≈ 0.36%, свип TX gain (§12.4),
рабочая точка 20 дБ; линия SNR-ограничена, целостность 100%
5. FDD 868/915 двусторонняя + меры из docs/NOTES.md
6. UDP-туннель поверх линка; затем web-настройка (libmicrohttpd)
7. Видео (raw UDP, пакеты ≤1472 Б) — при устойчивом PER
@@ -306,24 +309,68 @@ TX на A (192.168.2.1), TX gain 30 дБ. Опорники плат свед
|---|---|---|---|---|---|---|---|---|---|---|---|
| A | 10 КБ | none | 5000 мкс | 10 | — | — | 0 | 10/10 | ✅ **совпал** | 31 дБ | 22.7 дБ |
| B | 100 КБ | rs8 | 2000 мкс | 77 | 4 | 13 | 26 | 61/100 | ✗ (дыры) | 31 дБ | 25.0 дБ |
| B | 100 КБ | rs8 | 6000 мкс | 100 | 0 | 0 | 0 | 100/100 | ✅ **совпал** | 34 дБ | 16.0 дБ |
| C | 1 МБ | rs8 | 6000 мкс | 1022 | 0 | 0 | 2 | 1022/1024 | ✗ (2 кадра) | 30 дБ | 26.8 дБ |
| D | 10 МБ | rs8 | 6000 мкс | 10240 | 2 | 0 | 37 | 10203/10240 | ✗ (37 кадров) | 30 дБ | 25.9 дБ |
**Главное: первый файл прошёл по воздуху байт-в-байт (тест A)** — OTA-линия
работоспособна. Радиоканал качественный: EVM 2225 дБ, RSSI 31 дБ, CFO ≈ 0,
работоспособна. Радиоканал качественный: EVM 1627 дБ, RSSI 30…34 дБ, CFO ≈ 0,
пойманные кадры почти все декодируются.
**Ограничение (тест B): под нагрузкой с RS и паузой 2 мс теряется ~39% кадров**
причём на двух платах с выделенными ядрами, значит это **не** CPU-contention из
**Пропускная способность (тесты B→B): пауза 2 мс теряет ~39% кадров, 6 мс — 0%.**
Причём на двух платах с выделенными ядрами, значит это **не** CPU-contention из
§12.2. Причина конструктивная: **receiver однопоточный** — RS-декод выполняется
inline в callback синхронизатора и отнимает его пропускную способность. Запас
1.22× (§2) не покрывает добавленную стоимость RS при сплошном потоке: RX отстаёт
от эфира, kernel роняет сэмплы (отсюда и не пойманные кадры, и `RS битых` от
частично побитых). «Второе ядро под RS» из архитектуры пока **не реализовано**.
1.22× (§2) не покрывает добавленную стоимость RS при сплошном потоке; троттлинг
TX паузой `-p 6000` возвращает систематическую потерю в ноль (100 КБ — 100/100).
Рычаги к устойчивой передаче: (1) пауза `-p` — троттлинг TX под возможности RX
(немедленный обход); (2) двухпоточный конвейер RX (refill+конвертация на ядре 1,
синк на ядре 0 — резерв BENCHMARK §«резервы» п.2) — настоящее решение с приростом
throughput. Следующий шаг: подобрать `-p` с нулевой потерей, затем md5 на 1 и
10 МБ; в `test_file_link.sh` дефолт `-p 0` заменён на параметр `PAUSE`.
**Остаточный PER (тесты C, D): 0.2% на 1 МБ (2/1024) и 0.36% на 10 МБ (37/10240).**
Это уже не throughput (кадры не накапливаются, `RS битых: 0` на всех объёмах), а
спорадические одиночные пропуски. `RS битых: 0` на 10 МБ — важно: проверка CRC-
поверх-RS ни разу не пропустила мусор в файл, а RS дважды реально исправил ошибки
(тест D). При симплексе без ARQ пропущенный кадр — молчаливая дыра (техдолг #6),
поэтому md5 на объёме не сходится, хотя PHY-линия по факту надёжна (**PER ≈ 0.3%,
целостность 100%**). CPU RX справляется: PER не растёт с объёмом → отставание не
накапливается.
Дальнейшие рычаги: (1) **устойчивая передача файла** требует избыточности —
на симплексе это forward-redundancy (TX гонит файл N раз, RX пишет кадры по
`seq` в нужное смещение, дыры заполняются за проходы), полноценный ARQ — на этапе
дуплекса (§10 п.5); (2) двухпоточный конвейер RX (BENCHMARK §«резервы» п.2) —
поднимет throughput и позволит убрать паузу. `test_file_link.sh` теперь с
параметрами `PAUSE`/`FEC`/`TXGAIN`.
**Решение (2026-07-14):** побайтовый лосслесс на объёме отложен на этап дуплекса —
там ставится полноценный ARQ с обратным каналом (§10 п.5). На текущем симплекс-
этапе forward-redundancy не внедряем; веха этапа — работоспособная PHY-линия и
измеренный PER.
### 12.4 Свип TX gain — карта PER/EVM (2026-07-14)
1 МБ, rs8, `-p 6000`, дистанция «на столе», симплекс 915 МГц.
| TX gain | RSSI | EVM | Потери seq | RS испр | RS бит | PER (потери) | Примечание |
|---|---|---|---|---|---|---|---|
| 40 дБ | 45 дБ | 15.0 дБ | 33 | 27 | 41 | ~3.2% (+41 неиспр) | SNR-floor: RS активно спасает, но 41 блок неисправим |
| 30 дБ | 31 дБ | 24.8 дБ | 5 | 0 | 1 | 0.49% | рабочая зона |
| 20 дБ | 22 дБ | 32.9 дБ | 3 | 0 | 0 | 0.29% | **рабочая точка** (запас в обе стороны) |
| 10 дБ | 11 дБ | 39.7 дБ | 1 | 0 | 0 | 0.10% | лучший PER; вход RX ещё не насыщен |
Выводы:
- **Линия SNR-ограничена, а не насыщением**: EVM монотонно улучшается 15 → 40 дБ
с ростом мощности; насыщения входа RX (усиление 50 дБ фикс.) не видно даже при
RSSI 11 дБ. Потолок по gain на этой геометрии не достигнут.
- **PER падает с мощностью**: 3.2% (40) → 0.1% (10). Плато 20…10 дБ даёт
PER 0.10.3% при EVM 33…40 дБ, RS даже не требуется (0 неисправимых).
- **RS реально работает под нагрузкой**: на 40 дБ спас 27 кадров, забракованных
liquid-CRC. До фикса #3 они ушли бы мусором или фиктивно «спасёнными» — это
боевое подтверждение всей FEC-цепочки (libfec + CRC-поверх-RS).
- **Рабочая точка симплекса: TX gain 20 дБ** (PER 0.29%, EVM 33 дБ, запас по SNR
вниз и до насыщения вверх); для максимальной надёжности на этой дистанции 10 дБ.
**Итог симплекс-этапа:** PHY OTA-линия работает и охарактеризована по мощности,
целостность 100% (мусор в файл не попадает), PER ≈ 0.10.3% в рабочей зоне.
Остаток к «надёжной побайтовой» передаче = ARQ на этапе дуплекса (§10 п.5).
---
*Ввод в строй: 2026-07-14. Замеры CPU и базовые решения — 2026-07-10.

1
liquid-dsp Submodule

Submodule liquid-dsp added at 9aca82a883