Draw the waterfall for everything that never spoke
Every capture that is not voice, or whose voice yields five characters or fewer of transcript, now gets a PNG of the waterfall it would have painted on screen: spectrogram from the IQ where it was kept, from the demodulated audio otherwise, captioned and labelled either way. The browser shows it in the picture panel, but only when there is no transcript, Morse or decoded data to show instead. bandsaunter waterfall [PATH...] [--all] [--redraw] [--min-chars N] draws them after the fact for recordings already on disk. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016PsWPTweCT6pwxKngvVxcg
This commit is contained in:
parent
7e8b9b268d
commit
dee262e130
17 changed files with 1383 additions and 35 deletions
47
README.md
47
README.md
|
|
@ -876,6 +876,53 @@ picture is still a picture.
|
|||
> demodulates. Where a decoded byte stream begins with its magic number it is
|
||||
> named; nothing here fetches or renders one.
|
||||
|
||||
## Waterfalls
|
||||
|
||||
Most of what a scanner records cannot be turned into words. A data burst, a
|
||||
keyed carrier, a pager, a trunking control channel, a stretch of something
|
||||
unidentified — the classifier names what it can and the rest is a WAV file
|
||||
that tells you nothing until you open it in something else.
|
||||
|
||||
A waterfall says something about every signal there is, because it shows the
|
||||
shape of the thing rather than its meaning: how wide it is, how long it
|
||||
lasted, whether it was keyed, swept, hopping or steady, and whether it was
|
||||
one signal or three side by side. So **every capture that produced no
|
||||
readable words gets one drawn beside it** as a PNG — no voice, or voice that
|
||||
came back from the recogniser with fewer than five characters, which is what
|
||||
a recogniser handed something that is not speech reliably does.
|
||||
|
||||
```bash
|
||||
bandsaunter waterfall # draw a directory already recorded
|
||||
bandsaunter waterfall --all # including the ones that read fine
|
||||
bandsaunter waterfall --redraw recordings/
|
||||
```
|
||||
|
||||
Time runs down the picture and frequency across it, which is the way a
|
||||
receiver draws one. The frequency scale is on top, the seconds down the
|
||||
left, and the caption underneath says what the capture was.
|
||||
|
||||
**It says which picture it is, and that matters.** Where the raw IQ was kept
|
||||
(`--save-iq`) this draws the radio spectrum around the tuned frequency — the
|
||||
waterfall an operator would have been watching. Where only the audio was
|
||||
kept, which is the usual case, it draws the demodulated audio instead: after
|
||||
an FM detector the frequency axis is no longer radio frequency, and a picture
|
||||
that did not say so would be a lie told in a convincing font. The caption
|
||||
ends in `RF SPECTRUM` or `DEMODULATED AUDIO` accordingly.
|
||||
|
||||
The PNG is written the same way the SSTV and satellite pictures are — from
|
||||
zlib and struct, with no imaging library — including the 5×7 font the axis
|
||||
labels are drawn with, so a machine with nothing installed but numpy draws
|
||||
the same picture as one with everything.
|
||||
|
||||
`saunterbrowse` marks the capture `waterfall`, gives the path in full, and
|
||||
`o` prints it: there is no listening to a data burst. A decoded pager
|
||||
message or a Morse ident still wins the panel, because a waterfall is a view
|
||||
of a signal rather than a reading of one.
|
||||
|
||||
Pictures are around half a megabyte each — 542 of them for one directory of
|
||||
677 recordings came to 302 MB, against 1.8 GB of audio. `--no-waterfall`
|
||||
turns it off.
|
||||
|
||||
## Aircraft
|
||||
|
||||
```bash
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue