Hear the short replies, and read the other kind of callsign

Two things, both found by measuring rather than by reading the code.

The voice-activity filter inside the recogniser is off. It was costing
words: across a night of land-mobile captures it dropped 5-15% of what
the same model finds without it -- 491 against 507, 339 against 384,
263 against 310 -- because a single-word over between two
transmissions looks to a VAD exactly like the noise it exists to
remove, and on a scanner those short replies are the ones worth
having.

Turning it off has a cost, and the cost is that Whisper hands back
"You" for five seconds of hiss as confidently as it hands back a
sentence. So the whole capture is now asked once whether anything in
it rises above its own noise. Digital silence measures 0.0 dB of
contrast and hiss at any level 0.7, while the quietest real capture of
that night measures 8.9 and most measure 10-27; the bar sits at 3, an
order of magnitude clear of both. It can veto a capture but never trim
one, which is the whole difference between it and the filter it
replaces.

The second thing: callsigns like WQVF960 were being missed entirely.
The shape being matched was the amateur one -- prefix, district digit,
suffix -- and everything else the FCC licenses is written the other
way round, the letters first and then the digits. On the GMRS and
business channels that is most of what is said: nine callsigns across
five transcripts of one evening went by unrecognised, and now do not.

The shape is written as the three allocations that exist rather than
as "letters then digits", which claims KN95, WD40 and KC135. Its
letters are checked against the word list even when they arrive as a
single token, which the amateur shape does not need -- no English word
has a digit in the middle of it, but "west 120" and "word 100" fit
this one exactly.

Lookups now fall back to hamdb.org when callook has nothing. Not a
spare copy: callook holds United States amateur licences only, so
DL1ABC and VE3ABC are INVALID there and resolve perfectly well from
the other. And a GMRS callsign is not looked up at all -- every
database reachable without an account is an amateur register, so
reporting WQVF960 as "unlisted" would blame the callsign for the
absence of a source.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PsWPTweCT6pwxKngvVxcg
This commit is contained in:
The Dust Council 2026-09-02 00:30:02 -07:00
parent 0f378c4d6c
commit 8a789e57e1
14 changed files with 679 additions and 74 deletions

View file

@ -1198,6 +1198,23 @@ downloaded once.
since on a short noisy clip automatic detection often guesses wrong and
returns nonsense in another language.
**No voice-activity filter runs inside the recogniser.** It used to, and it
cost words: measured across a night of land-mobile captures it dropped 515%
of what the same model finds without it — 491 words against 507, 339 against
384, 263 against 310 — because a single-word over between two transmissions
looks to a VAD exactly like the noise it is there to remove. On a scanner
those short replies are the ones worth having.
What replaces it is a single question asked of the whole capture: does
anything in it rise above its own noise? Nothing does in digital silence
(0.0 dB of contrast) or in hiss at any level (0.7 dB), while the quietest
real capture of that night gives 8.9 dB and most give 1027. Below 3 dB the
clip is refused before a recogniser sees it — which matters, because with no
filter at all Whisper hands back *"You"* for five seconds of hiss as
confidently as it hands back a sentence. The check can only veto a capture
entirely, never trim one, so the short over in the middle of a quiet channel
survives.
Existing recordings can be transcribed after the fact:
```bash
@ -1418,11 +1435,26 @@ are one callsign, and all of them read back correctly:
| `wiskey one alfa whisky` | spelled the way it sounded |
| `whiskey one alpha, uh, whiskey` | said with a hesitation in the middle |
| `W1AW-4`, `W1AW/B`, `DL/W1AW` | a suffix, which is not part of the callsign |
| `WRUC 242`, `7-3-W-F-K-L-2-0-4` | a GMRS or business callsign, said the same ways |
A word is only taken apart when it is phonetic *all the way through*, which is
what keeps this away from English: "kilometre" begins with a phonetic word and
"victorious" contains one, and neither can be consumed to the end.
**Two shapes, not one.** An amateur callsign is a prefix, a district digit and
a suffix — `W1AW`, `KU0W`, `2E0ABC`. Everything else the FCC licenses is
called the other way round, letters first and then the digits: `WQVF960` is a
GMRS licence, `WXG204` an old Part 90 one. On 462 and 464 MHz those are most
of what is said, and reading only the amateur shape found none of them — nine
callsigns across five transcripts of one evening's GMRS traffic went by
unrecognised.
The shape is written as the three allocations that exist rather than as
"letters then digits", which would claim `KN95`, `WD40` and `KC135`. The
length matters for a second reason: `"7-3-W-F-K-L-2-0-4. 0-4-W-R-C-U"` is a
real transcript of someone spelling a callsign out, and a looser pattern read
the `0` that began the next one as part of this one.
Callsigns arrive from three directions and all three end up in the same list
and on the same map: **spoken and transcribed, sent in Morse, or carried in
the header of an APRS packet.** Neither of the last two involves a speech
@ -1446,17 +1478,29 @@ saunterbrowse --callsigns # everyone who identified themselves, and where
saunterbrowse --no-lookup # find them, but contact nothing
```
Lookups use the FCC's own licence data via [callook.info](https://callook.info),
which needs no account or key. The callsign is the only thing sent; results are
cached in `~/.cache/bandsaunter/callsigns.json`, so the same net is looked up
once however many nights you record it, and a lookup never delays the display —
the entry reads `looking up…` and fills itself in.
Lookups use the FCC's own licence data via [callook.info](https://callook.info)
and fall back to [hamdb.org](https://hamdb.org), both of which need an account
or a key from nobody. The callsign is the only thing sent; results are cached
in `~/.cache/bandsaunter/callsigns.json`, so the same net is looked up once
however many nights you record it, and a lookup never delays the display — the
entry reads `looking up…` and fills itself in.
The second source is not a spare copy of the first. callook holds United
States amateur licences and nothing else, so `DL1ABC` and `VE3ABC` come back
`INVALID` from it and resolve perfectly well from the other; and when one
service is down or rate-limiting, the other usually is not. It is asked only
when the first has nothing, and which one answered is recorded.
**A GMRS or business callsign is not looked up at all**, and says so rather
than saying "unlisted". Every database reachable without an account is an
amateur register, and `WQVF960` was never in one — reporting it as missing
would blame the callsign for the absence of a source. It is still recognised,
still listed, and still described as what it is.
`--no-lookup` contacts nothing. Callsigns are still found and still described
from their own structure: the prefix is allocated by the ITU and the digit is
the US licensing district, so `VE3ABC` is Canada and `N7XYZ` is US district 7
with no database at all. Outside the US that structural description is all
there is — callook.info holds US licences only.
with no database at all.
US amateur licence records are public by law and include the licensee's
address; that is what is shown.