Repository navigation
Releases: NR5P/SherlockMorse
Release list
Sherlock Morse v0.5.2
Sherlock Morse 0.5.2 is a small update about two stations at once: a weak station sending while a strong one keys nearby, and less junk in a selected signal's row.
A weak station beside a strong one
- Weak stations are no longer dropped when a strong station keys nearby. When a strong station keys, the receiver's AGC turns the gain down across the whole passband, and a rule removes the "keying" this makes out of empty band noise. That rule also removed real weak stations that happened to send at the same time. On 40 m, a weak station calling CQ 270 Hz from a strong QSO disappeared halfway through its CQ. Now a channel is only removed if it shows no keying of its own while the strong station's carrier is up: the AGC can only push a frequency down then, while a real station keys right through.
- Skirt and splatter junk stays out. Next to a strong, fluttering station (W1AW on 40 m), the noise beside it rises and falls with its level. That part is taken out first, so that kind of junk is still removed.
- Results. A real CQ next to a stronger station, and a station sending "QRL?" 1.5 kHz from W1AW, are now shown. Junk rows on the W1AW evening recordings are the same or slightly fewer. The benchmarks, ARRL practice files and the hand-checked off-air passages are unchanged.
The selected signal
- No more noise text after the station stops. A selected signal used to show everything its decoder produced. When the station finished, it kept spelling noise into the row and the conversation panel, about one character a second ("0KINO HR WEEKU2 K BE T@@i"). Now, when no Morse-like keying has been heard on it for 8 seconds, its text is held back. When keying comes back, the last few seconds are shown, so the first word of the next over is not lost.
Tools
cwtool decode rec.wav --pin 701decodes a whole recording with one signal selected, as in the app.
Download
sherlock-morse-v0.5.2-linux-x86_64.tar.gzcontains the Linux x86_64 binary (self-contained), README, licenses, a.desktopfile and an icon. The.sha256file holds its checksum.
Only tested on Linux so far, with a Yaesu FTDX3000. Licensed under GPL-3.0-or-later. The dictionary data is from SCOWL; see LICENSE-SCOWL.txt.
Sherlock Morse v0.5.1
Sherlock Morse 0.5.1 is a small update: heavy bug fists, months and days in the text prediction, and a fix for an old saved setting.
Bugs (semi-automatic keys)
- Heavy bugs are read right from the start. A bug sends short machine-made dits and much longer hand-timed dashes (4–6 times longer), with a longer gap after each dash. The speed estimate used to drop those short dits as noise and read the dashes as dots, so a heavy bug either decoded well or turned to garbage. Now the start of each over is read two ways, ordinary timing and bug timing, and the reading that explains the keying better is kept. Keyers and straight keys never fit the bug reading better and are unaffected.
- Noisier real bugs are recognised too. On air, a bug's dits vary more than a test signal's; that is now allowed when the dashes are clearly bug-like.
- Results. On the benchmark of sending styles, a heavy bug went from 9 % to 6 % character errors on a good signal and from 37 % to 20 % on a weak one. Every other style is unchanged. A heavy bug in a QRP QSO on 40 m went from "W A S O N D F I D H A L F A A V D I P O L" to "... FIVE WATTS ... DIPOLE".
Text prediction
- Months and days. Month names were missing from the text the prediction learns from, so "OUR LAST QSO WAS IN JULY" came out "JUDY" when a dit faded. Common date phrases ("CU ON SUNDAY", "LICENSED SINCE MARCH") are now included. Copy of the W1AW bulletins improved slightly.
- Old prediction setting fixed. Settings saved before 0.2.0 kept the old Text prediction (LM weight) default of 0.7, which spots about twice as many wrong calls and doubles the error on real off-air passages. A saved 0.7 is now moved to 0.5 once, on startup. Any other value you chose is kept.
Download
sherlock-morse-v0.5.1-linux-x86_64.tar.gzcontains the Linux x86_64 binary (self-contained), README, licenses, a.desktopfile and an icon. The.sha256file holds its checksum.
Only tested on Linux so far, with a Yaesu FTDX3000. Licensed under GPL-3.0-or-later. The dictionary data is from SCOWL; see LICENSE-SCOWL.txt.
Sherlock Morse v0.5.0
Sherlock Morse 0.5.0 is about keeping real stations on screen, dropping junk, and copying more kinds of fists. The changes come from off-air recordings on 20 and 40 m, where the keying was drawn as a picture, read by eye and compared with what the decoder printed.
Stations no longer go missing
- QSO partners keep their row. While one station sends, the radio's AGC makes its partner's frequency look keyed, and that channel was removed and the frequency blocked for a minute. The partner's whole answer was lost (K4WNY on 40 m, after N4RDX's over). The frequency now frees up as soon as the strong station pauses.
- Stations that fade come back at once. A real station removed during a fade is let back after 10 s, not 60 s.
- Stations next to a busy QSO are kept. A strong station keying 90 % of the time made any station near it look like its "copy", so that station was thrown away for good.
- Lone T's are kept. A word of only T's from a strong, cleanly keyed station is shown, so "P PL T B", a cut zero or a lone "T" in a QSO no longer drop out. Lone E's are still treated as noise.
Less junk
- Skirts and AGC junk next to strong stations are dropped. A channel close to a much stronger station must show keying of its own once the strong station's tone is cancelled. Skirt copies and noise "keyed" by the receiver's AGC fail that test. On W1AW night recordings, shown rows dropped from 26 to 7 and from 60 to 12.
- Birdies. A steady carrier that only looks keyed because a strong station pumps the AGC is no longer shown as a station.
Different fists
- Bugs. A bug sends machine-made dits and hand-timed dashes, and leaves a longer gap after each dash. That gap was read as a letter gap, so "1" came out as "ATTT". The decoder now learns that gap for each station, and uses it only when it fits that station's timing better. Keyers and straight keys are unaffected.
- Farnsworth and slow senders. A slow sender's long letter gaps used to be read as word gaps for a long time ("B R I G H T C O L D"). The spacing is now learned much sooner.
- Weak signals. A noise blip much weaker than the marks around it is more easily treated as noise, so stray E's ("BKE", "CLOCKSE") mostly go away. A fading station's own weak dits are still kept.
- Results. On a new benchmark of twelve sending styles, the character error rate on weak signals went from 12 % to 9 %. A heavy bug went from 31 % to 18 % on a good signal, and Farnsworth from 30 % to 22 % on a weak one. On ARRL code practice faded into real band noise, errors at −8 to −11 dB dropped by 1–3 points. Copy of clean, strong signals was already near exact and is unchanged.
For testing
cwtool fistsscores twelve sending styles (keyers of all weights, straight keys, bugs, sideswiper, Farnsworth, run-together words) at a good and a weak signal.cwtool synth --fist <name>writes one as a WAV.tools/keystrip.pydraws one signal's keying as a picture, with its mark and gap timings, for reading by eye.tools/handcheck.shscores the decoder on real off-air passages whose text was read from those pictures.
Download
sherlock-morse-v0.5.0-linux-x86_64.tar.gzcontains the Linux x86_64 binary (self-contained), README, licenses, a.desktopfile and an icon. The.sha256file holds its checksum.
Only tested on Linux so far, with a Yaesu FTDX3000. Licensed under GPL-3.0-or-later. The dictionary data is from SCOWL; see LICENSE-SCOWL.txt.
Sherlock Morse v0.4.1
Sherlock Morse 0.4.1 explains every setting right where you change it.
Settings
- A small circled ? next to every setting. Click it to see what the setting does and how to adjust it: which way to move it, when, and what the default is. This covers receiving, station lookup, the country file, activity flags and all transmit settings.
- Restore default settings at the bottom of the panel puts every setting back to its default after asking. Your call, grid, logins, radio and audio choices, keying port and keyer memories are kept.
Help
- The Settings help topic now lists every setting with the same explanations, and the help search finds them.
Download
sherlock-morse-v0.4.1-linux-x86_64.tar.gzcontains the Linux x86_64 binary (self-contained), README, licenses, a.desktopfile and an icon. The.sha256file holds its checksum.
Only tested on Linux so far, with a Yaesu FTDX3000. Licensed under GPL-3.0-or-later. The dictionary data is from SCOWL; see LICENSE-SCOWL.txt.
Sherlock Morse v0.4.0
Sherlock Morse 0.4.0 adds optional CW transmit with a memory keyer, and a built-in help guide.
Transmit (optional)
- Hidden unless you want it. Tick Settings → Transmit → Show the transmit panel. With it off, the panel is hidden and no keying port is ever opened.
- Keyboard sending. Type a message and press Enter, or tick Send as I type to send each letter as you type it (Backspace takes back letters not yet sent). Esc or ■ Stop stops at once. The line under the box shows what was sent, the letter on the air and what is queued.
- Keys the radio through DTR or RTS of a serial port. FTDX3000: the second (Standard) port, key line DTR, Menu 065 PC KEYING = DTR, BK-IN on. An optional PTT line with lead and tail times is available for radios without break-in.
- Adjustable timing: speed, weight, dah length, letter and word gaps (Farnsworth) and key compensation. The defaults are standard Morse at 20 WPM.
- Test mode. Until you choose a keying port, everything runs but nothing is keyed.
- Logged. What you send goes into the conversation as
TX:lines.
Memory keyer
- Up to 12 memories on buttons and F1–F12, for CQ, reports, 73 and the like, using
{MYCALL}and{CALL}. Clicking any callsign fills the Call box. - Edit them in place. Right-click a memory button (or ✏) to change, add, delete or reorder memories.
- Auto-repeat for calling CQ. A memory with a repeat time is sent again that many seconds after it ends, until Esc, Stop, typing, another message, or (optionally) a station answering on your frequency.
Help
- ? Help in the top bar opens a searchable guide to every part of the program, from getting started to troubleshooting.
Tools (cwtool)
cwtool tx-testruns the transmit keyer in test mode, measures its timing and decodes what it would have sent.
Download
sherlock-morse-v0.4.0-linux-x86_64.tar.gzcontains the Linux x86_64 binary (self-contained), README, licenses, a.desktopfile and an icon. The.sha256file holds its checksum.
Only tested on Linux so far, with a Yaesu FTDX3000. Transmitting has been tested without the radio (timing, test mode and error handling); check the keying with BK-IN off first. Licensed under GPL-3.0-or-later. The dictionary data is from SCOWL; see LICENSE-SCOWL.txt.
Sherlock Morse v0.3.0
Sherlock Morse 0.3.0 is mostly about spotting more callsigns correctly, especially weak ones and stations in crowded spots.
Display
- Abbreviations are highlighted. Abbreviations, Q-codes and prosigns (TNX, QTH, 73, …) in the conversation, selected-signal and history text get a tinted background, and hovering one shows its meaning. The Explain abbreviations checkbox and the small meanings printed under the words are gone.
- Text size. A Text size slider in the bottom panel sets the size of the decoded text there (10–32 pt). It is saved with your settings.
Spotting calls
- Weak calls are pieced together from several copies that differ, and a call sent twice with one copy garbled is still spotted.
- Calls split by a gap are joined. A call cut short by a letter gap is joined with its one- or two-letter remainder, and a letter glued onto the front of a call is removed.
- Run-together words are cut at calls. Glued words are now split at a known call or at a call from the same country.
- Calls heard once in clear context are spotted, for example a caller answered with a repeated contest exchange or a 5NN report. A call heard only once must come from a strong enough signal.
Crowded frequencies
- Two stations 40–60 Hz apart are heard as two channels.
- A second station keying inside a channel's passband is heard.
- A fast station on a slow station's frequency is followed.
Cleaner decoding
- Multipath echo. When an echo fills the gaps between elements, the slicer threshold is raised so the gaps are heard again.
- AGC-junk rule. Real stations that the AGC-junk rule used to drop are now kept.
- Removed decoders. A frequency you remove stays suppressed for 10 s instead of 60 s if it had been a real, displayed channel.
- Muted audio. Decoding survives muted audio.
Tools (cwtool)
cwtool export-benchwrites the benchmark scenes as WAV files with their truth text, to test other decoders.
Download
sherlock-morse-v0.3.0-linux-x86_64.tar.gzcontains the Linux x86_64 binary (self-contained), README, licenses, a.desktopfile and an icon. The.sha256file holds its checksum.
Only tested on Linux so far, with a Yaesu FTDX3000. Licensed under GPL-3.0-or-later. The dictionary data is from SCOWL; see LICENSE-SCOWL.txt.
Sherlock Morse v0.2.0
Sherlock Morse 0.2.0 is mostly about weak signals in real band noise, and about showing less junk.
Weak signals
- Signals are measured against the noise right around them. The receiver's filter makes band noise several dB stronger in the middle of the passband (500–1000 Hz on the FTDX3000), so weak signals there used to look stronger than they were.
- Narrower filter for weak signals. It now goes down to 15 Hz instead of stopping at 30 Hz.
- Weak stations near the edge of the passband are found. They are no longer removed as artifacts of a strong QSO far away.
- Results. W1AW received off the air on 80 m at night (weak, near the top of the passband) went from 61 % to 21 % character error rate, measured against the ARRL's published bulletin text. In the benchmark, errors at −8 dB SNR went from 10 % to 6 %.
Cleaner display
- Fewer junk rows. Across a night of 40/80 m recordings, rows that flash up for a few seconds and vanish dropped by about two thirds. More of the decoded words are real words.
- Row dropout setting. Settings → Row dropout sets how long a proven station's row stays visible through a fade. The default is 30 s, so weak stations stay in one row.
- Slow senders keep their spacing. A slow straight key's long gaps between letters are no longer read as word gaps ("W 0 U" → "W0U").
- Run-together words are split. "CQCQDE XE1FRFK" now reads "CQ CQ DE XE1FRF K", and "CQDXE71A" reads "CQ DX E71A".
- The conversation panel follows the highlighted station. Junk from phantom channels stays out of it.
- Fast keying. Above 30 WPM a channel is shown only if it fits Morse timing well.
- AGC artefacts. Channels made by the receiver's AGC next to a strong station are dropped.
Decoding
- Each over is checked first. The speed is checked at the start of each over, and the start of a transmission is re-decoded once the speed is known.
- Speed and fist. Speed is measured more accurately. Sloppy fists, Farnsworth spacing and drifting transmitters are followed better.
- Calls and words. Repeated words and calls are favoured, and calls are confirmed across overs. Garbled words with a single lost dit are mended.
- New experimental option: Settings → Sensitive slicer. It weighs each whole element against the noise instead of deciding frame by frame. You get more copy from weak and fluttering signals and more calls spotted correctly, but also more junk rows. It is off by default.
- Language-model weight. The default is now 0.5. At the old 0.7, twice as many wrong calls were spotted. If you set it before, you can change it under Text prediction (LM weight).
Other
--no-rigdecodes without taking the CAT port.- Recordings stay playable if the program is killed.
Download
sherlock-morse-v0.2.0-linux-x86_64.tar.gzcontains the Linux x86_64 binary (self-contained), README, licenses, a.desktopfile and an icon. The.sha256file holds its checksum.
Only tested on Linux so far, with a Yaesu FTDX3000. Licensed under GPL-3.0-or-later. The dictionary data is from SCOWL; see LICENSE-SCOWL.txt.
Sherlock Morse v0.1.0
First release of Sherlock Morse, a CW (Morse code) skimmer for Linux, written in Rust.
Highlights
- Decodes the whole passband at once. Every keyed carrier gets its own decoder, with a 1.5 s pre-roll so the first characters aren't lost.
- Probabilistic decoder. Log-normal timing likelihoods, adaptive speed tracking, beam search that accounts for static crashes and QSB, and a trigram language model of amateur traffic.
- Weak-signal decoding with robust levels and speed lock, tested on live recordings.
- Waterfall with callsign labels. Click to follow a signal, double-click or right-click to tune the radio, mouse wheel for ±50 Hz.
- Spots list with RF frequency, speed, SNR, the DXCC country (AD1C
cty.datbuilt in, updatable from Settings), and activity flags (POTA, SKCC, CWT, …). You can filter it to flagged stations. - Station info popups. Click a callsign for name, location, grid, distance, beam heading, photo and a QRZ link.
- Conversation capture on your frequency, with history and explanations of CW abbreviations.
- CAT control with mode-aware tuning, reading the CW pitch from Yaesu radios (KP), and closed-loop zero-beat.
- Safe with your radio. RTS/DTR are held low and PTT ports are never probed, so the skimmer never keys the transmitter.
- Logs every station's decoded text and can record audio.
Downloads
sherlock-morse-v0.1.0-linux-x86_64.tar.gz: Linux x86_64 binary (self-contained), README, license,.desktopfile and icon.
Only tested on Linux so far, with a Yaesu FTDX3000.
Licensed under GPL-3.0-or-later.