PhosphorCW — Decoder Test Results

Independent accuracy testing of the PhosphorCW Morse decoder using the CLI test harness (CWDecode). The CLI uses identical DSP code to the iOS app via symlinks — same source files, same binary logic.

Methodology

Decoder Settings (defaults unless overridden)

Test Files

File Source Type Duration Format Nominal Speed
cw_qso_20wpm.wav archive.org Live QSO via ICW server (paddles + keyboard) 7m 23s 8 kHz, 16-bit, mono ~18–20 WPM
w1aw_10wpm.wav ARRL W1AW W1AW code practice (Farnsworth timing) 7m 49s 8 kHz, 16-bit, mono 10 WPM (Farnsworth, ~15 WPM char speed)
cw_handkey_vail.wav archive.org (NW6V) Historical hand key (straight key, Vail telegraph) 2m 47s 8 kHz, 16-bit, mono ~25–30 WPM (variable)
cw_cootie_n1ea.wav archive.org (N1EA) Cootie (sideswiper) key demonstration 1m 18s 8 kHz, 16-bit, mono ~20 WPM (highly variable)

Results

File Mode Decoded Chars Tracked WPM AFC Events Quality Assessment
cw_qso_20wpm.wav AUTO 821 19.1 52 Excellent Full QSO readable; minor dropped chars in fast passages
Fixed --tone 784 --no-afc 828 18.4 Excellent Slightly cleaner — no AFC retune glitches
w1aw_10wpm.wav AUTO 716 14.7 1 Perfect chars Every character correct; excess word spaces (Farnsworth)
Fixed --tone 750 --wpm 15 --no-afc 716 15.0 Perfect chars Identical — Farnsworth spacing inherent to source
cw_handkey_vail.wav AUTO 502 27.0 19 Fair Readable fragments; irregular hand timing causes errors
Fixed --tone 700 --no-afc Similar — timing irregularity dominates over AFC effects Fair
cw_cootie_n1ea.wav AUTO 312 19.8 10 Poor Opening words decoded; sideswiper timing defeats adaptive tracker
Fixed --tone 700 --no-afc Similar — cootie key timing is inherently irregular Poor

Decoded Output Samples

cw_qso_20wpm.wav — Fixed Tuning (best result)

K8IF DE AA0HW ON THE ICW SERVER CALLING BK AA0HW DE K8IF = R FB CHUCK = OK SOUNDING GOOD CHUCK HOW ARE WE DOING? BK R R FB THMM USIN MY PADDRE ES N W ES NICE TO BE ABLE TO USE PADDLES ON ICW ES AS ASL ALSO BE ABLE TO USE THE KEYBOARD TOO ANYWAY BACK TO YOU K8IF DE AA0HW BK AA0HW DE K8IF - FB CHUCK, GOOD SOUNDING WITH THE PADDLES TOO, NICE AUDIO = WEATHER IS CHANGING NOW, CLOUDS ARE GETTTING THICK, HW? SA0HW DE K8IF K OK 60 <..-.-...> <.--.-..> I AM USIN 2 DIFF PROGRAMES TO SE<-.-..> <.--..>TH THIS ONE NW WITH PAD<-...-..>ES IS CWTYPE AND THIS ONE WITH THE KEYBOARD IS FLDIGI WELL I WILL CLOSE NOW AND GET THIS RECORDING EDITED AND LOADED UP ON THE WEBSITE FOR OTHERS TO HEAR THANK YOU FOR HELPING ME THOM K8IF DE AA0HW BK FB CHUCK LET YOU GET WORKING ON THAT EDIT 73 FOR NOW CUL AA0HW DE K8IF EE <..-...> THOM 73 T U EE E

cw_qso_20wpm.wav — AUTO Mode

K8IF DE AA0HW ON THE ICW SERVER CALLING BK AA0HW DE K8IF = R FB CHUCK = OK SOUN ING GOOD CHUC HOW ARE WE DOING? BK R R FB THMM USIN MY PADDRE ES N W ES NICE TO BE ABLE TO USE PADDLES ON ICW ES II ASL ALSO BE ABLE TO USE THE KEYBOARD TOO ANYWAY BACK TO YOU K8IF DE AA0HW BK AA0HW DE K8IE - FB CHUCK, GOOD SOUNDING WITH THE PADDLES TOO, NICE AUDIO = WEATHER IS CHANGG NOW, CLOUDS ARE GETTTING THICK, HW? SA0HW DE K8IF K OK 60 <..-.-...> <.--.-..> I AM USIN 2 D IFF PROGRAMES TO SE<-.-..> <.--..>TH THIS ONE NW WITH PAD<-...-..>ES IS CWTYPE ND THIS ONE WITH THE KEYBOARD IS FLDIGI WELL I WILL CLOSE NOW AND GET THIS RECORDING EDITED AND LOADED UP ON THE WEBSITE FOR OTHERS TO HEAR THANK YOU FOR HELPING ME THOM K8IF DE AA0HW BK FB CHUCK LET YOU GET WORKIN MN THAT EDIT 73 FOR NOW CUL V0HW DE K8IF EE <-.-...> THOM 73 T U EE

w1aw_10wpm.wav — AUTO Mode (Farnsworth timing)

= N O W 1 0 W P M = T E X T I S F R O M A P R I L 2 0 2 4 Q S T P A G E 3 7 = I F I W E R E T O R E D O M I N E , I W O U L D R A I S E T H E O U T E R H O L E S B Y 1 / 3 2 I N C H T O S L I G H T L Y P R E T I L T T H E E L E M E N T S U P W A R D . S P A C E T H E E N D S O F T H E L E F T A N D R I G H T E L E M E N T S A B O U T 1 I N C H A P A R T A T T H E B O O M , A N D U S E U B O L T S T O A T T A C H T H E B R A C K E T S T O T H E B O O M . M A K E S U R E T H E E L E M E N T S D O N T C O N T A C T T H E B O O M U B O L T S , W H I C H W O U L D S H O R T T H E E L E M E N T S T O T H E B O O M . T H E L P D A F E E D L I N E . E A C H L P D A = E N D O F 1 0 W P M T E X T = Q S T D E W 1 A W

cw_handkey_vail.wav — AUTO Mode (historical hand key)

VVV VVV DE NW6V NW6V EVERYTHINGWE NTWELL L&TPEKANDS<..--.-.>HAN EXCINBNTH& NEVER <----.-.>CFRREB BEF<---.-.>E IRE<.-...-.>D9TOPYNEW6ING<-....-.><---..-.>GHTBEF<---.-.>E 6EP<..--...>LIC. HUNDREDS BEGGEDPDPLE<.--..>EDTOBE <.-.-..>L<---.-->EDGRELY<----.-..>OOKW6EINSCUGN<-.-.-.-.>6EYDEC<.-...-.-.>L6EY<.-----..-.-..>DNOTS<.--.--><.-.-----.-.>D<---.-.>SDR ANDDIDNTC+E<.--....>E6ER6EY<..--.>DERSTO<----..><---.-.>N<---->,9LY6EY<.--.--.>NDYS<.--.-->6EYHADSEENI<-.-.-.-.> <.-.-..>BERTV<.-...-..> <.---..-.>NE31844

Notes on Specific Files

cw_qso_20wpm.wav — ICW Server QSO

A live CW QSO between K8IF (Chuck) and AA0HW (Thom) via an Internet CW server. The operator uses both paddles and keyboard (CWType and fldigi). The decoder correctly identifies both callsigns throughout, reads full sentences, and tracks speed changes as the operator switches between input methods. Fixed tuning at 784 Hz produces marginally cleaner output by avoiding AFC retune transients during operator pauses.

w1aw_10wpm.wav — Farnsworth Timing

ARRL W1AW code practice file from 2024. Uses Farnsworth timing: characters are sent at ~15 WPM but inter-character spacing is stretched to achieve an effective 10 WPM overall rate. The decoder identifies every single character correctly but inserts word spaces between all characters because the extended Farnsworth inter-character gaps exceed the word gap threshold. This is a known limitation — proper Farnsworth detection would require measuring both character speed and effective throughput speed independently, a future enhancement. The decoded text reads: "NOW 10 WPM = TEXT IS FROM APRIL 2024 QST PAGE 37 = IF I WERE TO REDO MINE, I WOULD RAISE THE OUTER HOLES BY 1/32 INCH TO SLIGHTLY PRETILT THE ELEMENTS UPWARD..."

cw_handkey_vail.wav — Historical Straight Key

Recording by NW6V of a hand-keyed transmission describing the history of the Vail telegraph. Hand-keyed CW has inherently irregular timing — dit and dah durations vary significantly with operator technique. The decoder picks up readable fragments ("EVERYTHING WENT WELL", "HUNDREDS BEGGED", "THEY HAD SEEN") and correctly identifies the callsign (NW6V), but the variable timing produces frequent classification errors. This is characteristic of all adaptive CW decoders with hand-keyed input.

cw_cootie_n1ea.wav — Sideswiper Key

A cootie (sideswiper) key demonstration by N1EA. Sideswiper keys produce uniquely erratic timing because the operator must manually control both make and break actions, with no mechanical detent for dit or dah lengths. The decoder correctly identifies "DEMONSTRATION OF" at the opening and the operator's callsign fragments, but the majority of the transmission produces unrecognised element sequences. This is expected behaviour — cootie key recordings challenge even experienced human operators.

AUTO vs Fixed Tuning

FileAFC EventsAUTO QualityFixed QualityDifference
20 WPM QSO 52 (retunes during pauses) Excellent Excellent Fixed slightly cleaner — no retune transients
W1AW 10 WPM 1 Perfect chars Perfect chars Identical — clean signal, stable tone
Hand key 19 Fair Fair Negligible — timing irregularity dominates
Cootie key 10 Poor Poor Negligible — sideswiper timing defeats decoder

Summary

The PhosphorCW decoder demonstrates strong performance on clean, well-timed CW signals and degrades gracefully with increasingly irregular hand-keyed input: