PhosphorFAX — Decoder Test Results

Accuracy testing of the PhosphorFAX radiofax receiver against synthetic charts and real over-the-air recordings of US Coast Guard weather fax broadcasts. The test tool runs exactly the same decoder and encoder code as the app — same code, same output. Results below are from the current build.

What is tested

Synthetic charts

A 1809 × 1300 chart encoded by the app's own transmitter, then decoded. Offset and skew are measured against the original chart row by row; skew is the drift across all 1300 lines.

CaseMeasured LPMSlant ppmOffset pxSkew pxEnd
Clean, 120 LPM120.0000.00.00.0STOP TONE
Clock +200 ppm119.976+200.0−1.00.0STOP TONE
Clock −200 ppm120.024−200.0−0.1−0.1STOP TONE
Clock +500 ppm119.940+500.0−0.5−0.1STOP TONE
Tuned 20 Hz off120.0000.0+0.10.0STOP TONE
60 LPM60.0000.00.00.0STOP TONE
90 LPM90.000−0.3−0.1+0.5STOP TONE
180 LPM180.000+0.7−2.2−1.5STOP TONE
240 LPM240.0000.0−0.2−0.1STOP TONE
850 Hz shift (DWD)120.0000.00.00.0STOP TONE
Noise σ 0.2 (about 6 dB SNR), five runs120.000−30 to +13−16 to +221 to 44STOP TONE
Noise σ 0.3, clock +150 ppm119.981+156.4−8.2−15.0STOP TONE
Noise σ 0.5 (about −2 dB SNR)————STOP TONE, NO PHASE

Under heavy noise the chart is still received, but the slant taken from phasing varies from run to run. RE-SLANT in the chart viewer straightens it afterwards from the stored signal.

Send and receive round trip

The test card sent by PhosphorFAX's own transmitter in every format it offers, then received by PhosphorFAX. Each format was sent as 8 kHz audio, as a WAV export, and as 48 kHz audio, as the iPhone plays it through its speaker. A pass means the chart started on its start tone, stopped on its stop tone, and came out at the right IOC and line rate within 2 pixels of the original.

IOC60 LPM90 LPM100 LPM120 LPM180 LPM240 LPM
576PASSPASSPASSPASSPASSPASS
288PASSPASSPASSPASSPASSPASS
OptionResult
850 Hz shift, IOC 576 and 288PASS, within 4 pixels
60 phasing linesPASS

Real-world recordings

Publicly available recordings of live broadcasts, decoded at the app's default settings. These are over-the-air captures — no cleanup, no SNR preconditioning.

RecordingDurationResult
NMC Point Reyes, 17151.2 kHz, 30 Jan 2013 — OPC 48-hour wind and wave forecast (source) 9 min 57 s Start tone to stop tone, 1114 lines, 120.001 LPM, −8.2 ppm
US Coast Guard New Orleans, 8502 kHz dial, 14 Mar 2013 — NHC 24-hour surface forecast (source) 9 min 29 s Joined mid-phasing, locked, 1092 lines, 120.005 LPM, −41.9 ppm

Decoded — Point Reyes wind and wave forecast

Decoded 48-hour wind and wave forecast chart from NMC Point Reyes

Decoded — New Orleans tropical surface forecast

Decoded 24-hour tropical surface forecast chart from US Coast Guard New Orleans

The recording begins partway through the phasing signal, so no start tone was heard. The receiver locked on phasing alone.

Download Test File

A test card encoded by PhosphorFAX's own transmitter: start tone, 20 phasing lines, 300 image lines at IOC 576, 120 LPM, stop tone. Play it from any audio source near the iPhone's microphone to test the app without a shortwave receiver.

FileDescriptionSize
phosphorfax_test_card.wav3 min 2 s — test card, 302 lines expected~3 MB

Expected result:

Decoded PhosphorFAX test card: grey wedge, centre cross and resolution bars

Testing Instructions

  1. Download the WAV file above.
  2. Launch PhosphorFAX on an iPhone. Open the DECODE tab (F1).
  3. Leave the defaults (AUTO on in CONFIG). Tap ARM and grant microphone permission when asked.
  4. Play the WAV on a laptop or second device at conversational volume, 15–30 cm from the iPhone’s microphone.
  5. STATE moves to START on the start tone, then PHASING, then RECEIVING as the chart begins.
  6. The test card paints line by line: a grey wedge, the PHOSPHORFAX TEST label, a centre cross and three sets of resolution bars.
  7. On the stop tone the chart saves to LOG and the receiver re-arms for the next one.

The real recordings above can be played the same way from their sources.

Scope