CW Transcription
Morse code decoding, conversation tracking, and auto-fill
CW Transcription decodes Morse code audio from your radio, helping you copy callsigns and exchange information. The decoder uses real-time audio processing with adaptive frequency and speed tracking.
Enabling Transcription
- Open the Logger tab
- Tap the CW button
- Grant microphone permission when prompted
The transcription panel appears below the logger.
How It Works
- Audio capture - Microphone picks up your radio’s audio
- Tone detection - Goertzel algorithm identifies CW tones at the target frequency
- Frequency tracking - Automatically locks onto the dominant tone and follows drift
- Speed estimation - Adaptive WPM tracking adjusts to the sender’s speed in real time
- Decoding - Morse patterns converted to text using timing analysis
- Display - Decoded text shown in real-time with conversation separation
Audio Processing
Goertzel Filter
The decoder uses the Goertzel algorithm for efficient single-frequency tone detection:
- Targeted detection - Computes signal energy at a specific frequency rather than performing a full FFT
- Low CPU overhead - Runs continuously in real time without significant battery impact
- Configurable bandwidth - Detection window can be narrowed to reject adjacent signals
- Sample-by-sample processing - Operates on the audio stream with minimal latency
The Goertzel filter is more efficient than FFT when monitoring a single tone, making it ideal for CW decoding on mobile devices.
Adaptive Thresholds
Background noise is analyzed to set:
- Tone detection threshold (auto-adjusts to ambient noise floor)
- Noise gate level
- Signal-present confidence score
Audio Input Sources
- Device microphone - Hold phone near speaker
- Wired audio - Connect via audio cable for cleaner signal
- WebSDR audio - When connected to a WebSDR receiver, CW transcription can decode the receiver’s audio stream directly
Frequency Tracking
Automatic
The decoder automatically finds and tracks the CW tone:
- Detects dominant tone frequency in the audio passband
- Adaptive tracking follows the tone as it drifts (common with analog receivers or temperature changes)
- Works across typical CW pitch ranges (400-900 Hz)
- Lock indicator shows when the decoder has acquired a stable tone
Manual
If automatic tracking struggles:
- Tap the frequency indicator
- Adjust the target frequency manually
- Tap to lock
Manual lock is useful in high-QRM conditions where multiple tones compete for the decoder’s attention.
WPM Estimation
Adaptive Speed Tracking
The decoder continuously estimates and adapts to the sender’s speed:
- Initial detection - Analyzes the first few characters to estimate base speed
- Running average - Maintains a weighted moving average of dot and dash lengths
- Speed display - Current WPM shown in the transcription panel
- Range - Tracks speeds from approximately 5 WPM to 40 WPM
- Speed changes - Adapts within 2-3 characters when the sender’s speed changes
Farnsworth Timing
The decoder handles Farnsworth-spaced CW (where character speed is faster than word speed) by independently tracking:
- Intra-character timing (dots and dashes within a character)
- Inter-character spacing (gaps between characters)
- Inter-word spacing (gaps between words)
Transcription Display
Live Transcript
Characters appear as they’re decoded. The display shows:
- Decoded text in a scrolling view
- Current character in progress (partial decode indicator)
- Timing indicators for element detection
CW Conversation Tracker
The CW Conversation Tracker uses a state machine to separate and identify the two sides of a QSO:
State Machine:
- Listening - Waiting for initial transmission
- Station A transmitting - Receiving from the first station
- Pause detected - Gap between transmissions
- Station B transmitting - Receiving from the second station
- QSO in progress - Alternating between stations
Identification heuristics:
- Callsign detection - When a callsign is decoded, the tracker associates it with the current transmission
- Timing patterns - Long pauses indicate station transitions
- Frequency shift - Slight frequency differences between stations (RIT offset) help distinguish them
Chat-Style Conversation View
For extended QSOs, the conversation view presents decoded text in a chat-bubble layout:
- Left bubbles - Station A transmissions
- Right bubbles - Station B transmissions (or your own, if identified)
- Timestamps between exchanges
- Callsign labels when identified
- Color coding distinguishes the two stations
This view makes it easy to follow the flow of a QSO, especially at higher speeds where real-time copying is challenging.
Callsign Detection
The decoder identifies likely callsigns in the transcript:
- Highlighted in the transcript with a distinct background color
- Common patterns recognized (W/K/N/A prefix for US, VE for Canada, international prefixes)
- Confidence indicator shows how likely the detected string is a valid callsign
- Tap to auto-fill the Logger callsign field
Auto-Fill Integration
When a callsign is detected:
- Callsign appears highlighted in the transcript
- Tap to fill the Logger callsign field
- QRZ lookup triggers automatically
- Continue copying the QSO
WebSDR Integration
When connected to a WebSDR receiver, CW transcription integrates with the tuning system:
- Auto-retune - If the CW tone drifts significantly, the decoder can request the WebSDR to retune for optimal reception
- Frequency sync - The decoder’s target frequency stays in sync with the WebSDR’s passband center
- Transcript sync with playback - During recording playback, the transcript scrolls in sync with the audio position
Tips for Best Results
Audio Setup
- Hold phone near speaker, or use audio cable
- Reduce background noise
- Moderate volume (not too loud, not too quiet)
- For best results, use the WebSDR audio path which bypasses the microphone entirely
Tuning
- Center the signal in your passband
- Use narrow filter if available
- Reduce QRM by tuning away from interference
Limitations
CW transcription works best with:
- Clean, well-spaced sending
- Single signal (no QRM)
- Standard timing
Challenging for:
- Very fast sending (35+ WPM)
- Poor sending (irregular timing)
- Heavy QRM/QRN
- Multiple overlapping signals
Accuracy
Machine CW decoding isn’t perfect. Use transcription as an aid, not a replacement for developing your own ear. When in doubt:
- Ask for repeats
- Verify callsigns via QRZ lookup
- Use your own ears for critical info
See Also
- Logger - Log decoded contacts
- WebSDR Integration - Remote receiver audio for decoding
- Settings - Audio preferences