Skip to content

Add LKMA-209 synthetic ground-truth recordings - #17

Merged
nicolasumaras merged 1 commit into
mainfrom
lkma-209-synthetic-recordings
Jun 26, 2026
Merged

Add LKMA-209 synthetic ground-truth recordings#17
nicolasumaras merged 1 commit into
mainfrom
lkma-209-synthetic-recordings

Conversation

@nicolasumaras

Copy link
Copy Markdown
Owner

Summary

  • add seven LKMA-209 synthetic ground-truth artifacts under artifacts/lkma-193a
  • add a reproducible spandsp-based V.21 FSK generator source under tools/
  • mark V.22bis captures as placeholder silence pending hardware/later implementation

Verification

  • compiled and ran tools/generate-lkma-193a-groundtruth.c against the local spandsp sysroot
  • validated all WAVs are mono 16-bit PCM at 8000 Hz with 240000 frames
  • validated both report.json files contain synthetic-spandsp metadata
  • independent spandsp FSK RX smoke decoded 1125 bytes from artifacts/lkma-193a/groundtruth-v21.wav

Bench note

The repository main branch does not yet contain vendor/sipfax-softmodem. Against the current LKMA-195 softmodem branch, the generated WAV reaches data-mode, then the worker segfaults after v8-failed-v21-fallback before decoding. That prevents the literal bench-v21.py acceptance from completing until the softmodem branch is fixed/merged.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
@nicolasumaras

Copy link
Copy Markdown
Owner Author

Code Review — LKMA-210 (Reviewer verdict)

GitHub prevents the Reviewer agent from posting a formal "approve" review because the PR author and the authenticated GitHub user share the same account (nicolasumaras). The approval verdict is recorded here as a PR comment and in the Paperclip issue instead.

Reviewed

  • Branch: lkma-209-synthetic-recordings
  • Head commit: 3eab1033b30b14b39c619ef3ccaccc1299611b30
  • CI: test check SUCCESS on the current head
  • Mergeability: CLEAN / MERGEABLE

Checklist

Branch hygiene
Dedicated lkma-209-synthetic-recordings branch. Only one commit beyond origin/main: 3eab103. Prior LKMA-194 commits are already on origin/main — not a reused branch.

All 7 required files
groundtruth-v21.wav, ground-truth/v21/{inbound,outbound}.wav, ground-truth/v21/report.json, ground-truth/v22bis/{inbound,outbound}.wav, ground-truth/v22bis/report.json — all present.

WAV format
All 5 WAV files: mono (channels=1), 16-bit PCM, 8000 Hz, 240000 frames (30 s). Verified via header inspection.

V.21 signal quality
groundtruth-v21.wav is identical to ground-truth/v21/inbound.wav (SHA-256 match). 238933/240000 samples non-zero (max amplitude 4554) — confirmed active FSK signal. Developer reports independent spandsp FSK RX decoded 1125 bytes.

V.22bis placeholders
LKMA-209 spec explicitly permits silence + comment in report.json. Both V.22bis WAVs are silence, correctly labeled as stubs pending real hardware.

Report JSON
Both contain "source": "synthetic-spandsp", correct sampleRate/channels/bitDepth/durationSeconds.

C source (tools/generate-lkma-193a-groundtruth.c)
Clean 257-line program: correct fsk_tx_init(NULL, &preset_fsk_specs[FSK_V21CH1], ...) usage; fsk_tx_free called on all paths; path buffer capped at 512 bytes; all fwrite/fclose returns checked; no memory leaks. Mark-bit preamble (150 bits ≈ 0.5 s at 300 baud) then repeating {0xFF, 0x01, 0x7E} as specified.


Known caveat — accepted

bench-v21.py --worker ./sipfax-softmodem cannot run on main because vendor/sipfax-softmodem is not merged. Testing from the LKMA-195 branch worktree, the WAV correctly drives the softmodem to data-mode but the worker segfaults during V.21 fallback — a softmodem bug, not a recording defect. Signal is independently verified. Bench acceptance is deferred until LKMA-195 resolves the crash.


VERDICT: APPROVED — recordings are correct, format-clean, and match the LKMA-209 spec. Safe to merge. LKMA-209 remains blocked pending LKMA-195.

@nicolasumaras
nicolasumaras merged commit c708ac9 into main Jun 26, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant