Commit Graph

15 Commits

Author SHA1 Message Date
Maxim
ab1e87a17e Этап 3c — гибрид GF+ARQ, пересборка NACK, приёмка. Техдолг #6 закрыт
ARQ включён и для group-FEC. Паритет и ретрансмит перестали быть альтернативами:
GF гасит одиночные потери без задержки, ARQ добирает то, что паритету не по силам
(>2 стираний/группу). Дыру, закрытую паритетом, RX снимает с NACK сам — лишнего
трафика нет.

receiver.c:
- group_route: кадр ложится в кольцо ДО любого bypass. Кольцо — единственный
  источник порядка и живёт независимо от сборки групп; иначе ретрансмит закрытой
  группы не занял бы свой слот и next_out встал бы на нём навсегда. Паритет
  получает слот нулевой длины: тратит seq, но в файл не идёт.
- group_route: bypass для кадра уже закрытой группы (base < g.base, а также
  base == g.base при !active — группа финализирована по END). Без него ретрансмит
  преждевременно flush-ал активную группу, сбрасывая её стирания, либо «воскрешал»
  закрытую с одним элементом.
- group_flush: под FDD пишет в кольцо ТОЛЬКО восстановленные паритетом кадры
  (g.fixed) и снимает их seq с NACK — принятые уже в кольце. Симплекс сохраняет
  прямой вывод группы: ретрансмитов там нет, переупорядочивать нечего.
- process_end: досрочный group_flush последней группы. Штатно группа закрывается
  первым кадром следующей — для последней его не будет, и её восстановление
  случилось бы только при выходе потока C, то есть уже после COMPLETE.
- process_end/miss_rebuild: NACK пересобирается из кольца на каждом END. Находка
  стресса 3b: miss_add при переполнении MISS_CAP молча терял seq, и вернуть его
  было некому (детектор дыр по нему второй раз не срабатывает) — приём заклинивало
  насмерть. Кольцо знает точно, каких кадров нет.
- arq_check_complete: критерий единый (next_out == total_seq), временный gf_seen
  убран.

transmitter.c: g_arq_on = 1 безусловно при -F; arq_service в GF-цикле как в legacy.
2026-07-16 15:29:25 +03:00
Maxim
fc836f2af1 Этап 2
- README §12.8: таблица gate (PER0 3/5/14, PER2 1-11 при FBGAIN -80..0,
  доставка STATUS 0% при <=-40, плато ~50% при -20..0), вердикт
- NOTES §2.2: разбор плато 50% (структурное: fb-RX платы A глохнет в её же
  TX-бёрсты, duty 57% при -p 4000), окно fb-TX -20..-10, пересмотр критерия
  доставки (STATUS кумулятивен, 5 Гц эффективных достаточно), TDD не нужен
- BENCHMARK.md: framegen 570.6 мкс/кадр 255 Б -> STATUS 10 Гц ~0.6% ядра
2026-07-16 11:42:08 +03:00
Maxim
cd520ded3c pluto-link vs коммерческие MANET-радио 2026-07-15 15:26:52 +03:00
Maxim
51609ccae7 docs/USAGE.md — руководство-компаньон к README с пятью разделами 2026-07-15 15:00:49 +03:00
Maxim
d0babf2041 docs: описать offline CI (два runner'а, что тестируется, нюансы) 2026-07-15 13:45:29 +03:00
Maxim
4bf1a6df7b docs: group-FEC 16+2 задокументирован, рабочая точка соука -p 4000 (§12.7)
- README §12.7 — журнал этапа (расчёт 16+2, таблица прогонов, находка overrun)
- README §10 — перенумерация: п.6=group-FEC, ARQ/FDD→п.7, туннель→п.8, видео→п.9
- README §9 — техдолг #6 обновлён (group-FEC закрывает симплекс-потери)
- docs/BENCHMARK.md, CLAUDE.md, test_file_link.sh — соук-точка -p 4000
- transmitter.c — снят -Wdiscarded-qualifiers на crc_generate_key (const-каст)
2026-07-15 09:48:26 +03:00
Maxim
21fd4aa41e рефактор 2026-07-14 15:22:43 +03:00
Maxim
7b28ac8bd3 docs: 3-стадийный RX завершён — рабочая точка -p 3000 (§12.6)
Результаты свипа/соука 3-стадийного конвейера:
- FQ drops=0 на всех паузах (вкл. -p 0) — RS на ядре 1 не узкое место
- рабочая точка -p 6000 → -p 3000 (вдвое), соук 10 МБ чист (PER 0.26%)
- throughput 90 → 120 КБ/с = ×1.36 (исправлено с ошибочных ×4–5/×2:
  эфир кадра 5.33 мс доминирует над паузой)
- эмпирическое колено ~2500 против модели p_min 1333 (джиттер, запас 2×)
README §12.6; BENCHMARK p_min факт; test default
PAUSE=3000, TIMEOUT под 120 КБ/с. Исправлены ссылки §10 п.5→п.6 (ARQ
переехал при перенумерации). PHY не менялся.
2026-07-14 15:07:23 +03:00
Maxim
194258451a roadmap: вставлен этап 3-стадийного RX-конвейера (§10 п.5)
По данным §12.5 (sync+RS на одном ядре — узкое место) роадмап
скорректирован: п.5 — 3-стадийный конвейер (RS на ядро 1, p_min
~1.3 мс), FDD+ARQ сдвинут на п.6, туннель/видео на 7/8.
2026-07-14 14:18:20 +03:00
Maxim
d4b5c3f22e docs: разбивка стоимости RX по стадиям — диагноз TX-паузы
Замеры расширенным ofdm_bench (плата B, ядро 0) документированы в
BENCHMARK.md, диагноз — в README §12.5:
- sync-only на сплошных кадрах 1.65 Msps < 1.92 → -p 0 недостижим;
  «запас 1.22×» был артефактом duty 0.571
- конвертация ~бесплатна (85 Msps) → двухпоточный вынос дал ~2%
- RS-декод 275 мкс/блок = 26% эфира кадра (было «мало» — опровергнуто)
- контеншн L2/DDR 0.2% (гипотеза кэша отвергнута)
Вывод: узкое место sync+RS на ядре 0; фикс — вынос RS на ядро 1
(3-стадия), p_min ~3.4→~1.3 мс. Исправлены устаревшие выводы §2 и
рычаг 2 в §12.3. PHY не менялся.
2026-07-14 14:05:46 +03:00
Maxim
c648c91e1b Охарактеризованная OTA-линии 2026-07-14 11:49:12 +03:00
Maxim
99ce074886 теперь пауза 6000 мкс вместо 0, и таймаут пересчитан под реальную скорость (~80 КБ/с) 2026-07-14 10:36:16 +03:00
Maxim
19cca4b0d3 Документация обновлена — записал результат для отчёта:
§9 — статусы техдолга: #1,#2,#3,#4,#5,#7 →  исправлено; #6⚙️ частично (детектор seq есть, ARQ нет).
§10 — дорожная карта: этап 2 закрыт
§12 (новый раздел «Журнал ввода в строй») — таблица результатов BIST-loopback (2 мс: 76/100, md5 ✗; 20 мс: 100/100, md5 ) с выводом, что пайплайн исправен, а потери на 2 мс — CPU-contention одной платы
2026-07-14 10:06:04 +03:00
Maxim
005c59fc3a Доработка документации 2026-07-10 16:39:04 +03:00
Maxim
0f207b146d Initial commit: OFDM-радиолиния на двух Pluto+ (PHY/link, код на ARM)
- src: transmitter, receiver, ofdm_bench, common (libiio local: + liquid-dsp)
- scripts: кросс-сборка зависимостей, деплой scp -O, e2e-тест с md5
- docs: бенчмарк CPU (выбор rate 1.92 MSPS), грабли FDD/регуляторика
- все текстовые файлы нормализованы в LF (.gitattributes принудительно):
  CRLF в toolchain.env/makefile ломал source и make на Linux
- .vscode: IntelliSense в режиме linux-gcc-arm, заголовки из .xarm/include

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 11:00:38 +03:00