group-FEC 16+2: стирающее восстановление кадров без обратного канала (§10 п.6)
Групповой FEC над GF(256), RAID-6-стиль: 16 кадров данных + P(⊕) + Q(Σgⁱ·dᵢ)
закрывают до 2 стёртых кадров на группу. Потеря (пропуск seq или битый CRC) —
это стирание с известной позицией, поэтому 2 паритета оптимальны (overhead 12.5%,
~99% передач 10 МБ байт-в-байт при PER 0.26%).
- src/group_fec.{c,h}: GF(256) polynom 0x11d, gf_encode/gf_recover + self-test
(make gftest, нативный cc). Восстановление 1 стирания через P или Q, 2 — P+Q.
- transmitter.c: флаг -G, вынесен tx_frame(); копит группу, шлёт k данных +
P/Q с флагами в hdr[11]. Мета паритета: k′ + длина хвостового кадра.
- receiver.c: групповой ассемблер в потоке C, автодетект по hdr[11], финализация
группы на смене базы seq и на выходе потока. Счётчики Rec/GrpF в статистике.
- hdr[11] (был резерв): bit7 режим, bit6 паритет, bit5 Q, bits4-0 idx. RS/CRC
слой прозрачен — геометрия кадра не тронута, PHY-бенчмарк не требуется.
- test_file_link.sh: GROUPFEC=1 по умолчанию (TX -G, RX автодетект).
README §12.7 + перенумерация роадмапа — отдельным коммитом после верификации.
This commit is contained in:
23
makefile
23
makefile
@@ -25,18 +25,24 @@ all: $(BIN)/transmitter $(BIN)/receiver $(BIN)/ofdm_bench
|
||||
$(BIN):
|
||||
mkdir -p $(BIN)
|
||||
|
||||
$(BIN)/transmitter: $(SRC)/transmitter.c $(SRC)/common.c $(SRC)/common.h $(DEPS_LIBS) | $(BIN)
|
||||
$(CC) $(CFLAGS) $(SRC)/transmitter.c $(SRC)/common.c -o $@ $(LDFLAGS) -lad9361 -liio $(LDLIBS)
|
||||
$(BIN)/transmitter: $(SRC)/transmitter.c $(SRC)/common.c $(SRC)/group_fec.c $(SRC)/common.h $(SRC)/group_fec.h $(DEPS_LIBS) | $(BIN)
|
||||
$(CC) $(CFLAGS) $(SRC)/transmitter.c $(SRC)/common.c $(SRC)/group_fec.c -o $@ $(LDFLAGS) -lad9361 -liio $(LDLIBS)
|
||||
|
||||
$(BIN)/receiver: $(SRC)/receiver.c $(SRC)/common.c $(SRC)/common.h $(DEPS_LIBS) | $(BIN)
|
||||
$(CC) $(CFLAGS) $(SRC)/receiver.c $(SRC)/common.c -o $@ $(LDFLAGS) -lad9361 -liio $(LDLIBS)
|
||||
$(BIN)/receiver: $(SRC)/receiver.c $(SRC)/common.c $(SRC)/group_fec.c $(SRC)/common.h $(SRC)/group_fec.h $(DEPS_LIBS) | $(BIN)
|
||||
$(CC) $(CFLAGS) $(SRC)/receiver.c $(SRC)/common.c $(SRC)/group_fec.c -o $@ $(LDFLAGS) -lad9361 -liio $(LDLIBS)
|
||||
|
||||
$(BIN)/ofdm_bench: $(SRC)/ofdm_bench.c | $(BIN)
|
||||
$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) $(LDLIBS)
|
||||
|
||||
tx: $(BIN)/transmitter
|
||||
rx: $(BIN)/receiver
|
||||
bench: $(BIN)/ofdm_bench
|
||||
# Оффлайн-самопроверка GF(256) — нативная сборка (gcc хоста, напр. RPi/aarch64)
|
||||
$(BIN)/gftest: $(SRC)/group_fec.c $(SRC)/group_fec.h | $(BIN)
|
||||
cc -O2 -Wall -DGF_SELFTEST $(SRC)/group_fec.c -o $@
|
||||
|
||||
tx: $(BIN)/transmitter
|
||||
rx: $(BIN)/receiver
|
||||
bench: $(BIN)/ofdm_bench
|
||||
gftest: $(BIN)/gftest
|
||||
$(BIN)/gftest
|
||||
|
||||
# --- деплой (scp -O: на прошивке v0.38 нет sftp-server) ---
|
||||
deploy: all
|
||||
@@ -60,10 +66,11 @@ clean:
|
||||
help:
|
||||
@echo "make [all] — собрать transmitter, receiver, ofdm_bench (static armhf)"
|
||||
@echo "make tx|rx|bench — собрать отдельную цель"
|
||||
@echo "make gftest — оффлайн-самопроверка group-FEC (нативный cc)"
|
||||
@echo "make deploy — залить бинарники на обе платы (scp -O в /tmp)"
|
||||
@echo "make test — e2e-тест передачи файла с md5-сверкой"
|
||||
@echo "make check-env — проверить тулчейн и $(XARM)"
|
||||
@echo "make clean — удалить build/"
|
||||
@echo "переменные: PLUTO_A=$(PLUTO_A) PLUTO_B=$(PLUTO_B) XARM=$(XARM)"
|
||||
|
||||
.PHONY: all tx rx bench deploy test check-env clean help
|
||||
.PHONY: all tx rx bench gftest deploy test check-env clean help
|
||||
Reference in New Issue
Block a user