[feat](trx-vdes): implement Turbo FEC, CRC-16, and link-layer parsing

Add the three missing VDES decoder components per ITU-R M.2092-1:

- turbo.rs: Turbo FEC decoder with dual 8-state RSC constituent
  encoders, BCJR/MAP iterative decoding (8 iterations), QPP
  interleaver, and rate-1/2 depuncturing
- crc.rs: CRC-16-CCITT validation (poly 0x1021, init 0xFFFF) for
  decoded link-layer frames
- link_layer.rs: Structured parsing of M.2092-1 link-layer frames
  (Messages 0-6) including station addressing, ASM identification,
  geographic bounding boxes, and ACK/NACK reporting

The main decode pipeline now attempts turbo decoding first with CRC
validation, falls back to Viterbi when turbo fails, and reports
crc_ok=true when either path validates. 27 tests covering all new
modules.

https://claude.ai/code/session_01SJSN7cv3zoL1xNcb8ex2zY
Signed-off-by: Claude <noreply@anthropic.com>
This commit is contained in:
Claude
2026-03-29 12:47:02 +00:00
committed by Stan Grams
parent ef9d97d4b5
commit d512268526
6 changed files with 1398 additions and 31 deletions
+6 -6
View File
@@ -125,14 +125,14 @@ differs from the current reading, inference correctly assigns to VFO A. When
frequencies match (ambiguous), defaults to VFO A — resolved after VFO toggle
primes both sides. Added detailed comments explaining the inference logic.
### VDES decoder has incomplete FEC
### ~~VDES decoder has incomplete FEC~~ — RESOLVED
**Location:** `src/decoders/trx-vdes/src/lib.rs`
**Location:** `src/decoders/trx-vdes/src/`
Burst detection and pi/4-QPSK demodulation work, but Turbo FEC (1/2 rate) and
link-layer (M.2092-1) parsing are not implemented. CRC validation is stubbed
(`crc_ok: false`). Output limited to raw symbols. This is a substantial DSP
implementation task requiring Turbo code decoder research.
Turbo FEC decoder (dual 8-state RSC with BCJR/MAP iterative decoding, QPP
interleaver), CRC-16-CCITT validation, and M.2092-1 link-layer frame parsing
(Messages 06) have been implemented. The decode pipeline now attempts turbo
decoding first, falls back to Viterbi, and validates CRC on both paths.
### ~~Plugin system lacks versioning and lifecycle~~ — DROPPED