PhosphorDSC — Decoder Test Results

Accuracy testing of the PhosphorDSC decoder against real over-the-air recordings of HF DSC traffic. The testing CLI (DSCDecode) shares every DSP source file with the iOS app via symlinks — same code, same output.

Decoder stack

Real-world recordings

Tested against the publicly-available HF DSC recordings on the Signal Identification Wiki GMDSS DSC page. These are over-the-air captures — no cleanup, no SNR preconditioning.

RecordingAudio centreCalls decodedContent
GMDSS_1~975 Hz1, ECC OKSafety test call, ship 215322000 to coast station 004634060
GMDSS_2~1709 Hz1, ECC OKSafety test acknowledgement, coast station 002191000 to ship 230145000 (inverted polarity)
GMDSS_3~2245 Hz1, ECC OKSafety call, ship to ship, working on 12360.0 kHz
Dsc_examples~1675 Hz2, ECC OKRoutine call and its acknowledgement between two coast stations, working on 8291.0 kHz

Decoded output — GMDSS_1

--- TEST CALL | ECC OK --- FORMAT INDIVIDUAL TO 004634060 COAST STATION CATEGORY SAFETY FROM 215322000 SHIP TC1 TEST TC2 NO INFORMATION END ACK RQ SYMBOLS 120 120 000 046 034 006 000 108 021 053 022 000 000 118 126 126 126 126 126 126 126 117 085

Decoded output — Dsc_examples

--- ROUTINE CALL | ECC OK --- FORMAT INDIVIDUAL TO 002320001 COAST STATION CATEGORY ROUTINE FROM 005030001 COAST STATION TC1 J3E TP TC2 NO INFORMATION RX FREQ 8291.0 kHz TX FREQ 8291.0 kHz END ACK RQ SYMBOLS 120 120 000 023 020 000 010 100 000 050 030 000 010 109 126 008 029 010 008 029 010 117 085 --- ROUTINE ACK | ECC OK --- FORMAT INDIVIDUAL TO 005030001 COAST STATION CATEGORY ROUTINE FROM 002320001 COAST STATION TC1 J3E TP TC2 NO INFORMATION RX FREQ 8291.0 kHz TX FREQ 8291.0 kHz END ACK BQ SYMBOLS 120 120 000 050 030 000 010 100 000 023 020 000 010 109 126 008 029 010 008 029 010 122 090

Download Test Files

These WAV files are synthesised DSC calls built to ITU-R M.493 — 200-bit dot pattern, phasing, DX/RX time diversity and a computed error-check character. Every one decodes with its error check passing. They can be played from any audio source (laptop, second phone) near the iPhone’s microphone to test the app without a shortwave receiver. All MMSIs are fictitious.

FileDescriptionSize
dsc_01_distress_alert_sinking_off_fastnet.wavDistress alert: sinking, 51°23'N 009°36'W, 14:25 UTC~150 KB
dsc_02_distress_relay_all_ships.wavAll-ships distress relay from a coast station: flooding, no position~150 KB
dsc_03_urgency_all_ships.wavAll-ships urgency call, working on 8291.0 kHz~150 KB
dsc_04_safety_geographic_area.wavSafety call to a geographic area, 55°N 015°W, 10° × 20°~150 KB
dsc_05_routine_individual_call.wavRoutine individual call to a coast station, 8414.5 kHz~150 KB
dsc_06_safety_test_call.wavSafety test call~150 KB
dsc_07_safety_test_call_ack.wavSafety test call acknowledgement~150 KB
dsc_08_routine_sdr_tuning_1000_hz.wavRoutine individual call with tones near 1000 Hz (SDR tuning)~150 KB

Scope

HF and MF DSC only. VHF channel 70 DSC runs at 1200 Bd behind an FM receiver and is not decoded. Two audio-tuning conventions are supported:

AFC search band is 800–2500 Hz to span both, and the decoder runs normal and polarity-inverted lanes in parallel so LSB and USB captures both decode without any manual toggle.