теперь пауза 6000 мкс вместо 0, и таймаут пересчитан под реальную скорость (~80 КБ/с)
This commit is contained in:
34
README.md
34
README.md
@@ -244,7 +244,9 @@ ssh root@192.168.2.1 '/tmp/ofdm_bench 1.92'
|
|||||||
2. ✅ Перенос TX/RX на Pluto (`local:`), фиксы техдолга #1–#7 (см. §9)
|
2. ✅ Перенос TX/RX на Pluto (`local:`), фиксы техдолга #1–#7 (см. §9)
|
||||||
3. ⚙️ **текущий этап** — файл через эфир (OTA), md5 на 1 и 10 МБ.
|
3. ⚙️ **текущий этап** — файл через эфир (OTA), md5 на 1 и 10 МБ.
|
||||||
Ввод в строй ведётся строго OTA; кабельный этап осознанно пропущен.
|
Ввод в строй ведётся строго OTA; кабельный этап осознанно пропущен.
|
||||||
✅ 2026-07-14: цифровой BIST-loopback подтвердил DSP-тракт (§12.2), далее двухплатный 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)
|
4. Антенны на столе: замер скорости, PER, счётчик потерянных seq (#6)
|
||||||
5. FDD 868/915 двусторонняя + меры из docs/NOTES.md
|
5. FDD 868/915 двусторонняя + меры из docs/NOTES.md
|
||||||
6. UDP-туннель поверх линка; затем web-настройка (libmicrohttpd)
|
6. UDP-туннель поверх линка; затем web-настройка (libmicrohttpd)
|
||||||
@@ -294,8 +296,34 @@ RX на одной плате (192.168.2.1), файл 100 КБ случайны
|
|||||||
отброшены (не ушли мусором в файл), 2 кадра реально восстановлены RS — счётчики
|
отброшены (не ушли мусором в файл), 2 кадра реально восстановлены RS — счётчики
|
||||||
`rs_saved`/`rs_fail` теперь достоверны (техдолг #3 закрыт по факту).
|
`rs_saved`/`rs_fail` теперь достоверны (техдолг #3 закрыт по факту).
|
||||||
|
|
||||||
Следующий шаг: двухплатный OTA (192.168.2.1 → 192.168.3.1) — энергетика/несущая
|
### 12.3 Первый двухплатный OTA (2026-07-14) — приём по воздуху
|
||||||
(RSSI при TX-on/off), затем первые кадры без FEC, свип TX gain, md5 на 1 и 10 МБ.
|
|
||||||
|
Антенны, симплекс 915 МГц, дистанция «на столе». RX на плате B (192.168.3.1),
|
||||||
|
TX на A (192.168.2.1), TX gain −30 дБ. Опорники плат сведены достаточно:
|
||||||
|
|CFO| ≈ 0.0005, синхронизатор ловит **без** ручного свипа частоты.
|
||||||
|
|
||||||
|
| Тест | Размер | FEC | `-p` | Поймано | RS испр | RS бит | Потери | Вывод/послано | md5 | RSSI | EVM |
|
||||||
|
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||||
|
| A | 10 КБ | none | 5000 мкс | 10 | — | — | 0 | 10/10 | ✅ **совпал** | −31 дБ | −22.7 дБ |
|
||||||
|
| B | 100 КБ | rs8 | 2000 мкс | 77 | 4 | 13 | 26 | 61/100 | ✗ (дыры) | −31 дБ | −25.0 дБ |
|
||||||
|
|
||||||
|
**Главное: первый файл прошёл по воздуху байт-в-байт (тест A)** — OTA-линия
|
||||||
|
работоспособна. Радиоканал качественный: EVM −22…−25 дБ, RSSI −31 дБ, CFO ≈ 0,
|
||||||
|
пойманные кадры почти все декодируются.
|
||||||
|
|
||||||
|
**Ограничение (тест B): под нагрузкой с RS и паузой 2 мс теряется ~39% кадров** —
|
||||||
|
причём на двух платах с выделенными ядрами, значит это **не** CPU-contention из
|
||||||
|
§12.2. Причина конструктивная: **receiver однопоточный** — RS-декод выполняется
|
||||||
|
inline в callback синхронизатора и отнимает его пропускную способность. Запас
|
||||||
|
1.22× (§2) не покрывает добавленную стоимость RS при сплошном потоке: RX отстаёт
|
||||||
|
от эфира, kernel роняет сэмплы (отсюда и не пойманные кадры, и `RS битых` от
|
||||||
|
частично побитых). «Второе ядро под RS» из архитектуры пока **не реализовано**.
|
||||||
|
|
||||||
|
Рычаги к устойчивой передаче: (1) пауза `-p` — троттлинг TX под возможности RX
|
||||||
|
(немедленный обход); (2) двухпоточный конвейер RX (refill+конвертация на ядре 1,
|
||||||
|
синк на ядре 0 — резерв BENCHMARK §«резервы» п.2) — настоящее решение с приростом
|
||||||
|
throughput. Следующий шаг: подобрать `-p` с нулевой потерей, затем md5 на 1 и
|
||||||
|
10 МБ; в `test_file_link.sh` дефолт `-p 0` заменён на параметр `PAUSE`.
|
||||||
|
|
||||||
---
|
---
|
||||||
*Ввод в строй: 2026-07-14. Замеры CPU и базовые решения — 2026-07-10.
|
*Ввод в строй: 2026-07-14. Замеры CPU и базовые решения — 2026-07-10.
|
||||||
|
|||||||
@@ -16,7 +16,8 @@ RATE=1920000 # НЕ поднимать: бюджет CPU, docs/BE
|
|||||||
BW=1500000
|
BW=1500000
|
||||||
TXGAIN="${TXGAIN:--30}" # OTA: переопредели, напр. TXGAIN=-20 scripts/test_file_link.sh
|
TXGAIN="${TXGAIN:--30}" # OTA: переопредели, напр. TXGAIN=-20 scripts/test_file_link.sh
|
||||||
FEC="${FEC:-rs8}" # rs8 | none — фаза 3.2 гоняет сначала none, потом rs8
|
FEC="${FEC:-rs8}" # rs8 | none — фаза 3.2 гоняет сначала none, потом rs8
|
||||||
TIMEOUT=$(( SIZE_KB / 100 + 30 )) # ~160 КБ/с + запас
|
PAUSE="${PAUSE:-6000}" # пауза TX между кадрами, мкс. -p 0 топит однопоточный RX (§12.3)
|
||||||
|
TIMEOUT=$(( SIZE_KB / 50 + 30 )) # ~80 КБ/с с паузой + запас (см. PAUSE)
|
||||||
|
|
||||||
if command -v sshpass >/dev/null; then
|
if command -v sshpass >/dev/null; then
|
||||||
SSH=(sshpass -p "$PLUTO_PASS" ssh -o StrictHostKeyChecking=no)
|
SSH=(sshpass -p "$PLUTO_PASS" ssh -o StrictHostKeyChecking=no)
|
||||||
@@ -46,7 +47,7 @@ sleep 3 # дать RX прогреться до старта TX
|
|||||||
echo "=== [4/5] Передача с Pluto A ==="
|
echo "=== [4/5] Передача с Pluto A ==="
|
||||||
"${SSH[@]}" "root@$A" \
|
"${SSH[@]}" "root@$A" \
|
||||||
"cat /tmp/link_test.bin | /tmp/transmitter -f $FREQ -r $RATE -b $BW \
|
"cat /tmp/link_test.bin | /tmp/transmitter -f $FREQ -r $RATE -b $BW \
|
||||||
-g $TXGAIN -p 0 -c $FEC -u local: 2>/tmp/tx.log"
|
-g $TXGAIN -p $PAUSE -c $FEC -u local: 2>/tmp/tx.log"
|
||||||
sleep 3 # дохлебать хвост эфира
|
sleep 3 # дохлебать хвост эфира
|
||||||
"${SSH[@]}" "root@$B" "killall receiver 2>/dev/null || true"
|
"${SSH[@]}" "root@$B" "killall receiver 2>/dev/null || true"
|
||||||
wait "$RX_PID" 2>/dev/null || true
|
wait "$RX_PID" 2>/dev/null || true
|
||||||
|
|||||||
Reference in New Issue
Block a user