Amalgamated DGPS

Software To Decode The Entire DGPS Band From WAVE, and I/Q Recording Files

For Windows and Macintosh

The Differential Global Positioning System (DGPS) transmits correction information that improves the accuracy of the GPS system, from 15 meters to as good as 10 cm. These transmissions are in the 283.5-325.0 kHz band, and are interesting DX targets.

Stations in the United States and Canada typically transmit on 1 kHz channel steps, while those outside of North America can also use 0.5 kHz channels. Transmissions are at 100 or 200 baud, using MFSK. DGPS Data packets contain a 10 bit ID. This ID is not unique, but using a combination of the ID along with the frequency and baud rate allows the specific station to be identified. Data transmissions are continuous, so it is possible to receive many messages per minute from strong stations, as well as the occasional message from more distant or weaker stations. DGPS stations can be used as propagation beacons, observing when messages from the various stations are being received.

Amalgamated DGPS can decode the entire 285 to 325 kHz DGPS beacon band at the same time, from I/Q recording files made by several SDR (Software Defined Radio) programs. Namely:

I do not have all of these SDR programs, so I rely on recording files made by others, and therefore cannot guarantee that all work correctly.

It can also decode from a normal WAVE file, as well as from live audio.
For decoding from audio, you specify the frequency the radio is tuned to (in USB mode) and the audio bandwidth, and it will try to decode any DGPS stations in that bandwidth,
so you can monitor multiple frequencies at the same time, as many as will fit in the passband.
Please note that live audio decoding is under development and may not work properly, and the main purpose of the program is decoding from SDR recording files.

This app creates up to 164 parallel DGPS demodulators and decoders in software, and processes the entire DGPS band at once, looking for DGPS transmissions, decoding them if they are found, and adding timestamps to a log.

Decoding From SDR I/Q Recording Files

Ideally, set your SDR up to record a 50 kHz bandwidth from 280 to 330 kHz.

To analyze a recording file, run the app, choose Open I/Q File from the File menu, select the file. The app will then process it. It sets up a thread for each decoder, so it will use all of the available cores on your computer. This will cause your fans to run at full speed and stress test your processor(s)! Use at your own risk.

As the app runs, it will update a list of received stations, with the columns containing the following information:

Count: the number of decodes of this station.

ID: The ID number of the station, stations transmit either the ID or one of the reference IDs.

RefID1: The first reference ID of the station.

RefID2: The second reference ID of the station.

kHz: Frequency.

Baud: The baud rate, 100 or 200.

City: Station Location

Country: Station Location

Lat: Station latitude

Lon: Station longitude

km: The distance to the station from your location (make sure you set your location!)

deg: The bearing to the station from your location (make sure you set your location!)

(Click on the image to view full size)

While running, a progress indicator will update, showing how far along the decoding process is. You can select Stop Processing File from the Edit menu to stop.

Note that you can queue multiple files to decode one after the other. Click load and select the first file. Once it starts decoding, click load again, and select the next file, and so on. After a first file is decoded, the app will start decoding the next file.

Save Decodes from the File menu will save the decode information to a special binary file, which Load Decodes, also in the File menu, can be used to re-load. This is useful because it takes a long time to process I/Q recording files, so you can save the results after decoding them, then load them again to re-examine.

Save Tab Delimited from the File menu will save the list of decoded stations as a tab delimit text file.

Clicking on a station line will bring up a tooltip, showing the times of the first and last decode.

Double clicking on a station line will bring up another window showing the timestamps of all of the received messages. Selecting Copy Formatted Text from the Edit menu will copy the list of decodes to the pasteboard, so you can paste it into an email, word processor, etc.

If a timestamp is selected, and you select Delete Timestamp from the edit menu, you can delete that time stamp.

Copy will copy the list of decodes to the pasteboard, so you can paste it into an email, word processor, etc.

Back to the main window:

Selecting a line and then picking Delete Timestamps from the Edit menu will delete all of the timestamps for that station. Be careful if doing this while a file is still decoding, as the selected line could change, and you might end up deleting timestamps for the wrong station!

Also from the Edit menu:

You can clear all of the timestamps for the entire window.

You can copy the text from the window, to paste elsewhere.

Selecting Graphing window will bring up a window showing times each station was received, this can be useful for looking at propagation effects, as well as determining whether decodes(s) were likely legitimate or corrupted messages. Note that the graphing window will not update if the file is still being processed, you need to close and re-open it if you want to see additional information that has been decoded.

At the far right of each bar of decode times, the total number of decodes will be displayed.

At the top of the window, in the area that shows the time axis, there is also a red bar graph. This shows the relative number of messages per minute that were decoded. It can be used to roughly gauge how many message were being received at any time, and observe how propagation is changing.

Whether it is daytime or nighttime for your location, as well as each of the decodes, is also displayed. For your location, this is via the background color at the very top of the graphing window, it is yellow when it is daytime at your location. For the station decodes, they are plotted in yellow if it is daytime at the station location, and blue if it is nighttime. I believe I have the correct algorithm for determining daytime vs nighttime, let me know if you see any discrepancies.

(Click on the image to view full size)

At the top of the window, in the area that shows the time axis, there is also a red bar graph. This shows the relative number of messages per minute that were decoded. It can be used to roughly gauge how many message were being received at any time, and observe how propagation is changing.

Decoding from An Audio File

You can also decode from an audio file. The file must be in WAVE format, 44.1 kHz, 16 bits, mono. No other formats are supported. After you select a file, you need to specify some things.

Your radio should be in the USB mode when you record. The app can decode multiple DGPS channels at the same time, as many as will fit in the audio bandwidth.

First, the starting minute and second, this is used for the Z-count calculations (explained below). If you do not know the start time, or don't wish to have Z-count checks performed, then first go to the preferences for the app, and change the Max Z-count error to 9999.

Next, you need to specify the frequency the radio was tuned to, and the bandwidth of the audio. The app will then configure as many DGPS decoders as can fit in that bandwidth.

Decoding From Live Audio

Select Audio Input Decoding from the File menu. Select the audio input source from the popup menu. Next enter the frequency the radio is tuned to, as well as the audio bandwidth. Enter both in kHz, and make sure your radio is tuned using USB mode. Click the Start button. The app will start decoding the audio, looking for any stations on frequencies within the audio bandwidth (up to about 7 kHz or so). These decodes appear in the main window of the app. You may want to set your radio frequency to about 0.5 kHz below the first DGPS channel of interest.

I have noticed that the app sometimes stops displaying new decodes after a time period, clicking Stop and Start again fixes that. I am not sure yet what the problem is.

Decoding From Live SDR Data - Mac Beta Only

Note that this only works with the SDR-14, SDR-IQ (probably), netSDR, and AFEDRI (AFE822x, probably others). It also only works on the Mac, Windows support may occur in the future. If you have an SDR-14 or SDR-IQ you need to use the SDR-xx Server app to translate from a USB to IP interface.

Open the SDR Interface window from the File menu.

Enter in the correct IP address and port. Click Connect. Your SDR type should appear once the app connects to it. Select the desired sample rate from the popup menu (there is only one choice for the SDR-14 and SDR-IQ).

For the RF Space SDRs, RF Gain should normally be 0. Other values are -10, -20, -30 for that attenuation in dB. You may need to experiment to find the optimum value.

For the SDR-14 and SDR-IQ the IF Gain should normally be 24, for maximum gain. Other values are 0, 6, 12, 18. You may need to experiment to find the optimum value.

For the AFEDRI, the IF Gain is not used. The RF Gain can vary from 0 to 127. I believe negative numbers can also be used to attenuation, as with the RF Space SDRs. You may need to experiment to find the optimum value.

Click Run. If all goes well, you should start to see some decodes.

Station Map

Amalgamated DGPS can display a map, showing station as they are received. This map updates if you are decoding live, as well as from a recording. Select Station Map from the File menu to display it. By default it will only show stations received within the last second, this can be changed to all stations via a preferences option.

You can use Zoom In and Zoom Out from the Edit menu to adjust the zoom level, and you can pan around with your cursor, click on the map and move your mouse. You can also resize the window as needed.

You can click on one of these images to view it full sized:

UNID Stations

Select UNID Window from the Edit menu. This window will show a list of all stations that have been decoded that do not match a known ID/frequency/baud rate combination. Note that for this option to work, you must have preferences option “Just message types 6 and 9” turned off. This can be handy if you are looking for stations that are not in the app's database of known DGPS stations.

Monitor the I/Q file directory

Amalgamated DGPS can continuously monitor a directory. When a new I/Q recording file has been written to this directory, it will be automatically opened and processed.

Select Set I/Q File Directory from the File menu, and select the directory where your SDR program stores the I/Q recording files.

Before starting the recording feature in your SDR software, select Monitor I/Q file Directory from the File menu. You will be asked for the name of the file to save your decodes to. Then this menu item will be checked to show it is active.

Amalgamated DGPS will now make a list of all of the files in the specified directory, and ignore them. It will then look for a new file to appear. When this file appears, it will continuously check the size of the file. Once it is no longer growing, it is assumed that the SDR software has finished writing to the file. You can use the "File Wait time" setting in the preferences to indicate how many seconds must pass for the file to no longer be growing in size, for it to be considered finished. This can be useful if you are accessing a networked volume that might not quickly update file information.

When this amount of time has passed, Amalgamated DGPS will open the file, and process it, then mark it to be ignored, and start looking for the next file to process.

Please note that the file information for networked drives is often cached by the client computer's OS. I have noticed delays of around a minute with both Windows and macOS. So you need to set the wait time longer than this.
This also means that the wait time plus processing time must be less than the recorded file time, or the app will fall behind. I suggest not using a networked drive, but if you must, take this into account.

Preferences and Settings

Selecting Preferences from the Amalgamated DGPS menu lets you set several important things:

The Longitude and Latitude fields are used to set your location, in decimal, negative is west and south, positive is east and north.

Max z-count error is the maximum number of seconds the z-count of the received message can vary from the actual time. Smaller numbers are more restrictive and more likely to reject bad messages, but could also reject valid messages. I find a value of 6 works well, but you need to experiment. Note that it extremely important that your computer's clock is correct for the z-count error check to work correctly! Make sure it is accurate to a second. This field will default to a large number, which effectively disables checking the z-count. You can reduce this down to a lower number, but if you find you no longer get decodes, then double check that the clock is correct on the machine that you record your I/Q files.

Z-count offset is the offset between the transmitted z-count for all messages and UTC, it is used to compensate between GPS and UTC time. Currently a value of 24 works well.

Minimum Counts To Display sets how many messages must be received before a station will be displayed in the list. This can be used to prevent display of stations with a low number of messages, which could be all false decodes.

A checkbox allows you to also decode the 0.5 kHz offset channels used outside the USA. Note that this means it takes almost twice as long to decode a file.

There is also a checkbox to have the program check for updated versions at launch.

Another checkbox tells the app to look at just message types 6 and 9. Turning this off usually produces more decodes, at the expense of more false decodes.

If the auto save checkbox is checked, and the decodes have already been saved to a file, then after each I/Q file is processed, the decodes will automatically be saved to that same file. The process is as follows:

Make sure the auto save checkbox is checked,

Save your decodes to a file (even if there aren’t any, and the decode list is empty)

Start processing your files. After each is processed, the decodes will be saved.

If you clear the list of decodes, or select a new file to save decodes to and then cancel, the saved file name will be forgotten, and the app will stop automatically saving decodes.

There are preferences options to display all stations on the map, not just those recently received, as well as to display the number of counts after the station location text.

Step Minus Limit / Step Plus Limit / Step Size: Amalgamated DGPS can further torture I/Q data by demodulating on a series of frequencies, rather than just the nominal channel frequency. You specify three numbers here, the minus and plus values are the starting and ending frequencies, in Hz, as an offset, the step size is, as you might imagine, the spacing between frequencies. For example, I tend to use settings of -15 / 15 / 5, which means to step from - 15 Hz to +15 Hz below and above the nominal channel frequency, in 5 Hz steps. I find this can help get a few more decodes from very weak stations. It also significantly increases processing time. If you don’t want to use this feature, set the values to 0 / 0 / 1 Hz.

File Wait time: Used by the Monitor the I/Q file directory feature, how many seconds to wait until a file should be opened, after it is no longer growing in size.

User Defined Station List

There is a built in station list, but you may wish to use your own. You can do this by placing a text file named dgps_station_list.txt in the same directory as the application. If this file is found, it will be used and a message saying such will be displayed when the program is launched, as well as how many stations were loaded from the file. Otherwise, the built in list will be used.

There is a sample file (which contains the same stations as built in) named dgps_station_list.txt.bak that came with the download. You can use this file as a starter, just remove the .bak from the end of it. You might want to keep a copy of this file, in case you want to start over.

Each line of text in the file is a set of semicolon delimited fields, in this order:

Station ID

Reference ID 1

Reference ID 2

Frequency in kHz

Baud rate

Latitude (north is positive, south is negative, must be in decimal format)

Longitude (east is positive, west is negative, must be in decimal format)

Amalgamated DGPS is only $19.99,
which entitles you to all updates and new versions released over the next full year, free of charge, which of course you can continue
to use forever. Please be sure to download and test the program prior to purchase and verify it works with your setup and your SDR recording files.
Refunds are not available after purchase.

Free To Try!

Not sure you're ready to buy Amalgamated DGPS? You can download a fully featured copy to try out, before you buy it.