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.
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
- Positions come as text in degrees and minutes (
4903.50N/07201.75W), compressed into base-91 characters, as raw GPS sentences ($GPRMC,$GPGGA,$GPGLL; only with a valid fix), or as Mic-E, where the latitude digits and a status such as “En Route” or “Emergency” hide in the destination call sign. A station may leave out its last digits to give only an area; the map then draws a dashed box and measures to its centre. - Weather reports use °F, mph and hundredths of an inch of rain; the page converts them to your units.
- Telemetry sends five numbers and eight bits. When the station also sends the channel names, units and equations (a × v² + b × v + c), the Selected station panel applies them.
- Messages go to a call sign and may carry a number that the receiver acknowledges; bulletins go to BLN0 to BLN9.
- Objects and items are positions of things, such as a meeting point, sent by a station under their own name.
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.
- 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.
- 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.
- 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.
- A recording. Load a WAV or MP3 file with Open audio file.
Receiver setup
| Setting | Value |
|---|---|
| Frequency | 144.800 MHz in Europe (IARU Region 1 band plan), 144.390 MHz in North America. |
| Mode | FM (narrow FM on a web receiver). |
| Output | The 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. |
| Level | Loud enough for the level bar to move well, but never “clipping”: clipped tones lose packets. |
| Squelch | Open, 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
- Mouse: drag the map to move it, scroll to zoom at the pointer, click a station to select it.
- Touch: drag with one finger to move the map, pinch to zoom, tap a station to select it.
- Keyboard (map focused): arrows move the map, + and − zoom, F fits all stations, Enter selects the station nearest to the centre. Tab reaches every row of the Stations table; Enter selects that station.
- Buttons: the audio sources and Stop; Fit all, zoom and Centre on me under the map; the column headings sort the Stations table (again to reverse); Pause scrolling, Copy, Save as .txt and Clear all under the Frames list, where any line opens its anatomy.
- Settings: your position; km or mi (with km/h or mph, m or ft); °C or °F; distance rings, tracks and call signs on the map; removal of short silences; audio files at real time or fast; demo scenario, noise and receiver output; monitor volume and mute.
Things to try
- Play the demo with “Speaker (de-emphasis)” and compare the Tone balance and the Decoders readout with “Data socket”.
- Set heavy noise and watch the frames thin out: the check sum rejects every damaged one, so the map stays clean.
- Open the anatomy of a Mic-E frame of the demo car: its destination field holds the latitude, not a call sign.
- Find a frame with a
*in its path and the same packet without it: the digipeated copy came a moment later. - Set your position, then sort the Stations table by distance.
Limits
- Only 1200 baud AFSK: not 9600 baud packet, and not the FX.25 or IL2P frame formats.
- Only frames with a correct check sum are shown; damaged bits are not repaired.
- The page only listens. It never transmits or forwards anything.
- The map has no background. It uses a flat projection around its centre, fine for a few hundred kilometres; distances and bearings assume a sphere of radius 6371 km, within about 0.5 % of the real Earth.
- Some formats, such as raw weather station data and direction-finding details, appear only with their name and text.
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
- APRS Working Group (2000). APRS Protocol Reference, version 1.0.1. The origin of APRS (page 7), the UI frame with control 03, protocol F0 and up to eight digipeaters (chapter 3), WIDEn-N paths, and the position, compressed, Mic-E, object, weather, telemetry and message formats.
- Beech, W. A., Nielsen, D. E. and Taylor, J. (1998). AX.25 Link Access Protocol for Amateur Packet Radio, version 2.2, TAPR. The flag, bit stuffing, check sum and address fields (section 3).
- Langner, J. (2015). Building a Better Demodulator for APRS / AX.25 Packet Radio, Part 1: 1200 Baud AFSK. The 1200 and 2200 Hz tones, pre- and de-emphasis, decoders with several gains for the higher tone, and the WA8LMF TNC Test CD with frame counts and tone ratios.