Skip to content

D-001: OpenWSFZ co-channel and weak-signal decode gap vs WSJT-X [HIGH] #3

Description

@frank001

Summary

Decode gap against WSJT-X confirmed in both synthetic R&R study (S7) and real off-air corpus replay (S6, 2026-06-11). Severity escalated to High following corpus evidence.

Severity

High (escalated from Medium, 2026-06-11).

The synthetic S7 result (OpenWSFZ overall recovery ~47% vs WSJT-X ~78%) was classified Medium because normal single-signal operation was unaffected. The corpus replay (S6) extends this finding to real-world conditions:

  • 42 off-air WAVs, 2,799 observations across K=3 runs
  • OpenWSFZ decoded 69.7% of what WSJT-X finds (1,831 TP vs 795 FN)
  • Between-appraiser Cohen's κ = 0.084 (slight agreement) — almost entirely driven by these missed decodes
  • This is not a pileup/contest-only condition: the corpus represents a typical band scene across 35+ minutes of live 20 m activity

At roughly 1 in 3 signals missed, this is a material product quality defect.

Synthetic Evidence (R&R S7, run 6bab388)

Family WSJT-X OpenWSFZ
co_channel (equal SNR) 38.1% 0–5%
time_freq (co-freq, staggered DT) 100.0% 39–44%
near_collision (3–50 Hz sep.) 87–100% 77–80%
capture (unequal SNR) 67–88% 50%
overall ~78% ~46–47%

Real-World Evidence (S6 corpus replay, run bd1e157, 2026-06-11)

Metric Value
WAV files 42
Runs (K) 3
Total observations 2,799
TP (both decoded) 1,831
FN (WSJT-X decoded, OpenWSFZ did not) 795
FP (OpenWSFZ decoded, WSJT-X did not) 78
TN (neither decoded) 95
OpenWSFZ decode rate vs WSJT-X 69.7%
Cohen's κ 0.084

Full results: qa/rr-study/results/corpus-2026-06-11/report.md

Root Cause

OpenWSFZ relies on a single ft8_decode_all call plus a spectrogram-domain second-pass (p15). The FFT bin resolution (±3.125 Hz) is insufficient for coherent cancellation of co-channel signals. WSJT-X is believed to use PCM-domain iterative successive interference cancellation (SIC), which requires sub-Hz carrier estimation and waveform reconstruction.

What a Fix Requires

  1. Sub-Hz carrier frequency re-estimation from matched filter peak after each decode
  2. PCM waveform reconstruction of the decoded signal
  3. Subtraction from raw PCM buffer and re-run of ft8_decode_all

Medium-high effort. Architecture is open to it (existing p15 second-pass infrastructure is the natural extension point).

Acceptance Criteria

  • S7 overall OpenWSFZ recovery ≥ 65% (vs current ~47%) on the next R&R run after any fix is applied, with co_channel (P0 2-stack equal 0 dB) ≥ 3/6
  • S6 corpus replay between-appraiser κ ≥ 0.70 (substantial agreement)
  • OpenWSFZ decode rate vs WSJT-X ≥ 85% on the 42-WAV corpus

🤖 Escalated by QA following S6 corpus replay bd1e157 (2026-06-11)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions