Clever Quest Lab ← Labs

APRS Decoder

Turn 1200 baud packet radio from 144.800 MHz into stations on a simple map, with distance and bearing from your position, and see how each frame was decoded.

Sound is off – choose an audio source to start decoding.

Microphone, computer and file audio is decoded in your browser and is not uploaded. Captured audio is not played back. When you share computer audio, the picture of your screen is not used, recorded or uploaded.

Drag to move the map, wheel or pinch to zoom, click a station to select it: its details appear in the Selected station panel and in the Stations table. Keys (map focused): arrows, + −, F fit all, Enter select.

  • moving
  • fixed station
  • digipeater
  • weather
  • object

Last frame: –

Input level
– Tone balance–

Readouts

Frames
0
Stations
0
Bad check
0
Gaps removed
0
Last frame from
–
Decoders
–

“Bad check” counts frames whose check sum failed; they are not shown. “Decoders”: how many of the 17 decoders read the last frame.

Your position

Not set: distances and bearings need it.

Units and map

Distance
Temperature

Selected station

No station selected. Click one on the map or in the Stations table.

Decoder

Web receivers sometimes insert 3 ms of silence into their sound; each one breaks a packet. With this box ticked the page cuts such holes out before decoding.

Demo signal

Invented N0CALL stations around your position (or around 48.15° N, 17.11° E). Noise is the signal-to-noise ratio in a 3 kHz bandwidth.

Monitor

Only the demo signal and audio files at real time are played through the speakers. Computer audio and the microphone are analysed silently.

Runs on your device. Uses your microphone or the sound of another tab or the screen; the audio is processed on your device. Nothing you type or record is uploaded. Keeps working without a connection while the page is open. Works with touch. Saves your position, units, map, decoder, demo and volume settings and the chosen microphone on this device. Stations and frames last until you reload.

Added

Stations

Each row selects the station on the map. Distances are from your position.

No stations yet.

Messages

No messages or bulletins yet.

Frames

In the usual text form: source>destination,path:information. A * marks the last digipeater that repeated it. The newest 300 are listed; pick one to see its anatomy.

No frames yet.

Frame anatomy

When a frame arrives, its fields, bits and tones appear here.

How to use it

Tune a receiver to the APRS channel (144.800 MHz in Europe, 144.390 MHz in North America) in FM and bring its audio in as described under “Getting the audio in” below. Every packet with a valid check sum appears in the Frames list, and stations that send a position appear on the map and in the Stations table. Type your position or Maidenhead locator to get distances and bearings. “Play demo signal” generates packets from invented stations, so you can try everything without a radio.

Decoding keeps running while this tab is in the background. Stations and frames are kept until you reload the page: the Frames list shows the newest 300, and Copy and Save as .txt take all of them, up to the newest 20 000.

What you are decoding

APRS (Automatic Position Reporting System) was designed by Bob Bruninga, WB4APR, and introduced at the 1992 TAPR/ARRL Digital Communications Conference. Stations share one channel and send short packets to everyone: positions of cars, trackers and balloons, weather reports, messages, telemetry and bulletins. Nobody confirms a position report, and two stations that transmit at the same moment lose both packets.

Each packet is an AX.25 UI frame (“unnumbered information”): destination, source call sign, up to eight digipeaters, a control byte 03, a protocol byte F0 and the information field. A digipeater is a station, usually on a high site, that receives packets and sends them again, marking the address it used as repeated (the H bit, written as *). N0CALL-9>APZDMO,N0CALL-10*,WIDE2-1 was therefore heard from N0CALL-10, not from N0CALL-9, and the Heard column says “via N0CALL-10”. In a path entry such as WIDE2-2 each digipeater that repeats the packet counts the number down by one, so it is repeated at most twice.

The signal

The bits travel as 1200 baud audio frequency-shift keying with the Bell 202 tones, 1200 Hz and 2200 Hz, inside an ordinary FM voice channel. A 0 is sent as a change of tone and a 1 as no change (NRZI coding), so the decoder works whichever tone a receiver calls mark.

An AX.25 frame: flag, destination (7 bytes), source (7 bytes), digipeaters (0 to 8, 7 bytes each), control, protocol, information (1 to 256 bytes), check sum (2 bytes), flag. Below, the bits 1 1 0 1 0 0 1 as tones: the tone changes at every 0. flag7E destination7 bytes source7 bytes digipeaters0 to 8 × 7 bytes control03 protocolF0 information1 to 256 bytes check2 bytes flag7E bits 1101001 1200 Hz2200 Hz
The parts of a frame, and how bits become tones: the tone changes at every 0 and stays at every 1.

A frame starts and ends with the flag 01111110. So that the data never contains six 1s in a row, the sender inserts a 0 after any five 1s and the receiver removes it again (bit stuffing). The last two bytes are a 16-bit check sum (the CRC of the HDLC standard), and a frame is shown only when it matches. The Frame anatomy panel shows this for a real frame: the bytes of each field, every received bit with the inserted zeros marked, and the tone of each bit.

How the page decodes it

The audio is filtered to 900–2500 Hz and thinned out to about 11 000 to 12 000 samples per second. Two correlators measure the strength of each tone over a window two bit times long. Then 17 decoders compare the tones, each with its own bit clock (pulled a little towards every tone change) and its own frame decoder. Thirteen first add a gain to the 2200 Hz tone, from −6 to +12 dB in steps of 1.5 dB; four level each tone with its own automatic gain control. A frame counts when its check sum is right and its address part is valid; the same bytes from several decoders count once.

Why so many? Radios do not deliver both tones at the same level. FM transmitters boost high audio frequencies (pre-emphasis) and receivers cut them again at the speaker output (de-emphasis), while some outputs stay flat. On the de-emphasised test track below, the decoder that weighs both tones equally reads 518 frames, the one that adds 7.5 dB to the higher tone 969, and all 17 together 992. Running several decoders with different gains side by side is the method of Langner (2015).

The Tone balance readout gives the level of 2200 Hz against 1200 Hz: 0 dB is balanced, negative means the higher tone is weaker. For every bit the page fits a sine wave of that bit’s tone to the middle 60 % of the bit and compares the average amplitudes.

Tested on the TNC Test CD that WA8LMF published for this purpose (scripts in the site’s repository, 28 October 2026): from 25 minutes 49 seconds of a busy channel the page decodes 1012 frames on the flat track and 992 on the same traffic with de-emphasis, with a median tone balance of +1.7 dB and −9.5 dB (2200 Hz against 1200 Hz). Langner (2015) reports 1011 and 1004 frames for his nine-decoder method without bit repair. He gives the tone levels the other way round, as mark-to-space amplitude ratios (1200 over 2200 Hz) with medians of 0.81 and 2.48; in this page’s convention those are +1.8 and −7.9 dB, measured with his own method.

Web receivers add a problem of their own: their sound contains short inserted silences. In recordings of the University of Twente web receiver the page found up to one every two seconds, each 2 to 3 ms long, and a packet that one falls into is lost. With “Remove short silences” ticked, the page cuts out quiet gaps of 1.8 to 4 ms inside a signal. In a synthetic test with one such gap every two seconds on average, 64 to 65 % of 600 frames survived without the removal and all 600 with it.

A real test on 29 October 2026: 20 minutes of 144.800 MHz from a public web receiver near Frankfurt, recorded with the receiver’s own recording function, gave 200 frames from 45 stations on this page, against 202 from an independent decoder written from the specifications. That receiver inserted far fewer silences, about one every 30 seconds.

Reading the packets

Where to find it and how to tune

Getting the audio in

There are four ways to get the signal in. Nothing is uploaded: all decoding happens in this tab.

  1. No radio needed — a web receiver in another tab. Open a public web-based SDR receiver in a second tab (universities and radio clubs run many of them; websdr.org lists receivers that are online now; pick one that covers the 2 m band), tune it to 144.800 MHz in FM as described below and start its audio. Here, press Use computer audio, choose that tab in the sharing dialog and switch on sharing of the tab’s audio. Keep the receiver tab playing; this page can stay in the background.
  2. Your own receiver or SDR program on this computer. Press Use computer audio and share the program’s window or the entire screen together with system audio, or send the program’s output to a virtual audio cable and pick that cable after pressing Use microphone.
  3. A radio with a speaker. Hold it near the microphone and press Use microphone. It works, but room noise hurts weak signals; a cable from the headphone socket to the line or microphone input is better.
  4. A recording. Load a WAV or MP3 file with Open audio file.

Receiver setup

SettingValue
Frequency144.800 MHz in Europe (IARU Region 1 band plan), 144.390 MHz in North America.
ModeFM (narrow FM on a web receiver).
OutputThe speaker or headphone output is de-emphasised; a data or packet socket usually gives flat audio. Both work, and the Tone balance readout shows which one you have.
LevelLoud enough for the level bar to move well, but never “clipping”: clipped tones lose packets.
SquelchOpen, or just above the noise, so the start of a packet is not cut off.

Packets are short bursts, so watch the Frames list rather than listening for them.

Controls

Things to try

Limits

Frequently asked questions

Why does the map have no streets?

Streets would need map pictures from an outside map service; this page draws the map itself from the decoded positions. The grid shows degrees, the rings the distance from you, and each station’s locator is in the Selected station panel.

Why are some packets missing?

Two stations that transmit at the same time destroy each other’s packets, distant stations arrive with damaged bits, and clipped or very quiet audio loses more. A frame with one wrong bit fails the check sum and is not shown. Often a digipeater’s copy gets through.

Sources