Soundcard APRS

Warning (added on June 14): the conclusions at the end of this post are wrong; see a followup post for a more likely reason for the failure to decode packets.

Over the past few weeks I’ve been trying out APRS, a digital communication mode that is popular mostly on the 144Mhz band. APRS mostly consists of short location announcements that are sent over radio. These are displayed on nearby radios that receive them, and if one of the receivers is connected the internet, which is often the case, they are uploaded to internet servers. Websites like and can display the information on a map. You can also use APRS to send email and announcements over radio, but the main use appears to be dissemination of location information.

Some high-end VHF radios have built-in APRS capabilities: they can transmit APRS packets (using a built-in or attached GPS to determine the location) and they can display received APRS packets. With less capable radios, you connect the radio to a computer via a specialized modem called a TNC, or you connect the radio to the computer’s sound card and use a software modem. Either way, an APRS client program running on the computer sends messages and displays received messages. I don’t have a TNC, so I experimented with software modems.

I started with a software modem program called AGWPE, which runs under Windows. Several APRS client programs can use it; the one I like best is APRSISCE32, but I’ve also used UI-View32. I set up the software and was quickly able to send location packets to nearby stations. In the screenshot on the right you can see my location, as received by a station about 30km away (interestingly, this station did not upload my position to the internet; it retransmitted it, and the retransmitted packet was picked up and uploaded by a station in Cyprus that is 350km away from here). Decoding packets was another matter. I heard packets on the radio, but the software did not decode a single packets. I decided to try another software modem, AX.25-SCS, also running on Windows (Thanks to Julian for the link). Same thing; I can send packets but I can’t receive.

I decided to see if I can send or receive APRS packets from the international space station (ISS). The ISS has a radio that is used for APRS most of the time, but not all the time. I waited for a convenient pass, tuned the radio, and heard packets being send from the ISS. The software, AGWPE, was able to decode some of them! Not all, but at least some. I don’t know if my packets were received by the ISS (they were not gated to the internet and I did not decode them being retransmitted, so perhaps the ISS did not decode my packets). Here is one: “UR3QLZ>CQ,RS0ISS-4*:Hello To All!  op. Grigorij qth Zaporozhye Ukraine KN77MT”.

I still could not figure out why the software was not decoding local packets, which I could hear pretty well. I disconnected the computer from the radio, and told APRSISCE/32 to transmit a packet. I could hear it in the laptop’s speaker. I recorded it with an iPod Touch. Then played it back, expecting the software to pick it up though the laptops microphone and to decode it. Nothing.

I got pretty desperate, but decided to try one more thing. I downloaded soundmodem, a software modem that comes with sources and which can be compiled under both Linux and Windows. On Windows, it depends on a lot more software, so I decided to use it on Linux instead. Same thing; I can transmit packets (send from Xastir, a Linux APRS client), but the modem won’t decode packets I hear on the radio. However, soundmodem has a diagnostic mode in which it will print out corrupt packets. Running it in this mode, I could see that the software decoded the packets, but very poorly (there were mistakes every few characters).

At that point I decided that the only possible explanation is that the signal-to-noise ratio (SNR) of the packets I’m receiving is just not good enough for the demodulator. That could explain why the software decoded packets from the ISS ,which is pretty far (several hundred kilometers) but within a line of site, but could not decode packets from terrestrial stations that I can’t see directly from my balcony (where the antenna is).

To test this hypothesis, I ran the software on the computer-radio setup that I normally use to stream VHF voice traffic to the internet. That radio is connected to antenna on a high roof, with good reception of repeaters up to 100km away. I installed soundmodem on it and waited for packets. It decoded them without any problem.

The main conclusion: APRS needs a really good signal-to-noise ratio to decode packets. I am not sure if hardware modems can do a better job than the software modems; I don’t see why they would.

Some technical comments on soundmodem:

  • Until the APRS client connects to it, it consumes 100% of the CPU; once it is connected, CPU usage drops dramatically. Seems like a bug that’s probably not hard to fix.
  • The software chooses a sampling rate, starting from 5000 samples per second and going up until it finds a rate that the sound card supports. This often leads to 9600s/s. I modified the code to start at 11025, as suggested in some forums. Not sure if it made any difference, but it still works 🙂
  • To get soundmodem to compile on Ubuntu 10.04, I had to install libxml2-dev, libgtk2.0-dev, and libaudiofile-dev. It is probably possible to install binaries from a package, but I didn’t try.

5 Responses to Soundcard APRS

  1. Julian G4ILO says:

    Hello Sivan. Your attempts to get APRS packet decoding are interesting. In general, I would expect that software DSP packet decoders should work better than most hardware TNCs which are based on what is quite old technology. They should decode under worse S/N conditions. However there are a few things that can throw a spanner in the works of sound card decoding. One is the clock speed (true sample rate) of the sound card. If this is a few percent out the baud rate will be incorrect and this can cause failed decodes. I would recommend that you try MixW. It has a program (CheckSR.exe) that can be used to detect the sample rate error. It can also display the measured baud rate of received packets. If you see other than 1200Hz some correction is required. Unfortunately AGWPE is one program that cannot correct for sound card sample rate error.

    Other things that can cause a problem is receiving through too narrow an IF filter ( we usually use Wide FM settings here) and the wrong de-emphasis on the audio. Here is an article about audio levels. The 2200Hz tone should have twice the amplitude of the 2400Hz tone. A series capacitor may help here.

    • Sivan Toledo says:

      Thanks a lot Julian. I tried to decode packets using two different computers with both the built-in sound cards and USB sound cards, so I don’t think that the problems were due to the sampling rate, but I’ll definitely check these. I did not use a narrow IF filter, but in many of the experiments I used an isolated sound-card interface; perhaps the transformers attenuate parts of the audio spectrum. I’ll take a look.

  2. Marc F4FDQ says:

    Hi Sivan

    I had the same problem with my HT ,mainly because it doesn’t have a discriminator output and deemphasis prevented my soundcard software from decoding APRS packets.
    After reading the same webpage as G4ILO :
    I learnt that MFJ hardware TNC “include a passive low pass filter network that accomplishes the same thing, but without the limitations of the MF-10” so I found this webpage :
    and built the Rx Audio Decode Improvement circuit (without L1 as I didn’t have inductances in my junkbox !)
    and put it in line with my HT audio output.Now the audio coming out of my soundcard interface is very low HIx3 but it is easily manageable with the built-in amp of the mic input of my souncard.
    Anyway, using different soundcard software (AGWPE, Flexnet…) I can decode almost every packet I hear, It works as well as my TM-D710 or my TNC2 wired on a FT-817.
    It might be a good idea to redesign the filter for less attenuation but it works as it is and costed me close to nothing so if you have some caps and resistors left it may work for you too

    73 de Marc

  3. Pingback: Soundcard now Decodes APRS « Eclectic Technical Experiences

  4. Hi Sivan,

    Very interesting! I have used the following links to try to record and decode the APRS messages sent by my APRS mini tracker (see: with a rtl-sdr dongle (ezcap):

    In the program SDR# I can actually see and hear from y sound card the data sent by the APRS mini tracker, which is nice. However I tried with VB-Cable to record and decode these data using Qtmm AFSK1200 Decoder as shown in the above facebook link. For some reason this last step fails. (:

    Therefore my question is how I can decode and next see the APRS data from my APRS mini tracker on the internet to check if it is sending its messages in a good way. Perhaps I have made a wrong choice of the callsign and its suffix?? Next I wonder if this callsign needs to be registered somewhere to get noticed on APRS google maps sites. Or do I need a license to send and receive APRS data? I use 144.800 MHz of the Radiomterix HX1. Actually I am puzzled about what I am doing wrong.

    Could you please give me some help/suggestions here?

    Best wishes,

    P.S. I am investigating the use of APRS in wildlife monitoring applications.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: