diff options
| author | Leah Rowe <leah@libreboot.org> | 2026-03-12 23:26:47 +0000 |
|---|---|---|
| committer | Leah Rowe <leah@libreboot.org> | 2026-03-26 06:59:40 +0000 |
| commit | 68fb740da20e59b18e43edbc3642c3a9a4f8948b (patch) | |
| tree | f945b10748e38577ae35e1641768383b1905d105 /util/spkmodem_decode | |
| parent | 4dc39990e1a8a5e916fedbabde6f6fabd0ddac2c (diff) | |
util/spkmodem-decode: separate silence check
i conflated two separate tests in a previous change.
the silence check was defeated by still checking f
alongside it, which would be set, thus satisfying
the condition, and proceeding, which defeats the
purpose of the silence check (ignore false signal
that is actually noise) - so in the original patch
that i wrote, the extra checks actually do nothing.
this patch fixes that, and makes the logic a bit
clearer.
Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'util/spkmodem_decode')
| -rw-r--r-- | util/spkmodem_decode/spkmodem-decode.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/util/spkmodem_decode/spkmodem-decode.c b/util/spkmodem_decode/spkmodem-decode.c index dd7b4dcb..99ef87f1 100644 --- a/util/spkmodem_decode/spkmodem-decode.c +++ b/util/spkmodem_decode/spkmodem-decode.c @@ -460,25 +460,30 @@ auto_detect_tone(struct decoder_state *st) { int f; + if (st->learn_samples >= LEARN_SAMPLES) + return; + /* - * Don't also run auto-detect during decode, - * otherwise it would run for every sample. + * Ignore silence / near silence. + * Both FIR windows will be near zero when no signal exists. */ - if (st->learn_samples >= LEARN_SAMPLES) + if (st->freq_data <= 2 && st->freq_separator <= 2) { + st->learn_samples++; return; + } /* - * Check both FIR windows. - * Inside separator frames, the separator window contains tone, - * during data frames the data window does; a minimum of - * the two captures the lowest active tone cluster more reliably. + * Choose the lowest active tone. + * Separator frames carry tone in the separator window, + * data frames carry tone in the data window. */ f = st->freq_data; - if (st->freq_separator > 0 && st->freq_separator < f) + + if (f <= 0 || (st->freq_separator > 0 && + st->freq_separator < f)) f = st->freq_separator; - if (f > 0 || /* prevent noise from corrupting tone-learning */ - st->freq_data > 2 || /* <--- stop from */ - st->freq_separator > 2) { /* learning silence if no signal */ + + if (f > 0) { if (f < st->freq_min) st->freq_min = f; |
