DGPS stations transmit the difference between positions indicated by GPS satellite systems and the known fixed position of the station. This allows higher accuracy. DGPS transmissions are 100 or 200 baud and are transmitted on frequencies from 285 kHz to 325 kHz in the longwave band. Hundreds of these stations are operated by the Coast Guard and other agencies around the world, and they can be interesting DX targets. Each station transmits a continuous stream of messages containing correction data for GPS. These messages also contain the station ID code, so they can be used to directly ID the station.
The usual way to DX these stations is to tune your receiver to a particular frequency, run your DGPS software (which I have for Android , iPad/iPhone and Mac OS X) set for one baud rate, and wait to see what station(s) are heard on that frequency. Then change baud rates, tune to the next frequency, and try again.
Since SDRs are capable of recording a chunk of the RF spectrum directly to a disk file, I realized that a decoder could be written to demodulate all of the DGPS channels at the same time, at both baud rates. They write this data as a I/Q file, storing the complex representation of a portion of the RF spectrum. A 50 kHz bandwidth is slightly more than enough to cover the entire DGPS band. I set my SDR software up to record overnight, then in the morning I can run the recordings through the software, and see what stations are present.
The software sets up 82 SSB demodulators, two for each of the DGPS channels, one is for decoding 100 baud and the other for 200 baud, that allows me to use a more narrow filter for the 100 baud case. The output of each demodulator goes to a DGPS decoder that looks for valid messages. A message is considered valid if it starts with the correct preamble byte, is of message type 6 or 9 (the most common sent), has a z-count (which is a time code offset from the hour) that is within a few seconds of what it should be, and passes the 6 bit parity word test. This eliminates the vast majority of bad message decodes, although every so often one will sneak through. This is because you can get multiple bit errors on a message that corrupt both the data and parity word in such a way that the parity check still passes. It is still necessary to visually inspect the decodes, and decide if a seemingly amazing DX catch is realistic, or more likely just a bad decode.
Below is a screenshot showing the output of approximately 24 hours of recordings of the DGPS band.
The columns containing the following information:
• Count: the number of decodes of this station.
• ID: 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.
• deg: The bearing to the station from your location.
Below is a text copy of the data:
Count ID ref1 ref2 kHz Baud City Country Lat Lon km Deg
22 918 310 311 286.0 200 Wiarton, ON Canada 44.75 -81.12 655 330
94810 804 8 9 286.0 200 Sandy Hook, NJ United States 40.47 -74.02 267 70
117 886 272 273 287.0 100 Fort Stevens, OR United States 46.21 -123.96 3772 296
17277 942 340 341 288.0 200 Cape Ray, NL Canada 47.64 -59.24 1667 52
680 809 18 19 289.0 100 Cape Canaveral, FL United States 28.47 -80.55 1288 195
43711 806 12 13 289.0 100 Driver, VA United States 36.96 -76.56 306 172
7955 869 168 169 290.0 200 Louisville, KY United States 38.02 -85.31 742 258
22384 799 44 45 290.0 200 Penobscot, ME United States 44.45 -68.78 858 49
318 836 112 113 292.0 200 Cheboygan, MI United States 45.66 -84.47 899 319
22854 778 192 193 292.0 100 Kensington, SC United States 33.49 -79.35 721 197
45542 803 6 7 293.0 100 Moriches, NY United States 40.79 -72.76 379 69
255 814 28 29 293.0 200 English Turn, LA United States 29.89 -89.95 1601 231
44167 771 196 197 294.0 100 New Bern, NC United States 35.18 -77.06 502 180
25472 929 312 313 296.0 200 St Jean Richelieu, QC Canada 45.32 -73.32 693 24
1519 830 100 101 296.0 100 Wisconsin, Point WI United States 46.71 -92.03 1438 307
50006 792 136 137 297.0 200 Bobo, MS United States 34.13 -90.70 1361 247
2018 937 330 331 298.0 200 Hartlen Point, NS Canada 44.58 -63.45 1237 59
9872 831 102 103 298.0 100 Upper Keweenaw, MI United States 47.23 -88.63 1252 315
22843 866 162 163 299.0 200 Sallisaw, OK United States 35.37 -94.82 1635 258
20580 926 318 319 300.0 200 Riviere du Loop, QC Canada 47.76 -69.61 1072 31
692 871 172 173 300.0 100 Appleton, WA United States 45.79 -121.33 3584 295
1 828 246 247 301.0 100 Angleton, TX United States 29.30 -95.48 2035 241
97637 847 58 59 301.0 200 Annapolis, MD United States 39.02 -76.61 82 156
42 972 901 902 302.0 200 Miraflores Panama 8.99 -79.58 3384 184
73 881 262 263 302.0 100 Point Loma, CA United States 32.68 -117.25 3613 270
10 816 32 33 304.0 100 Aransas Pass, TX United States 27.84 -97.07 2255 240
43885 777 218 219 304.0 200 Mequon, WI United States 43.20 -88.07 998 296
64 919 308 309 306.0 200 Cardinal, ON Canada 44.78 -75.42 579 12
85388 772 198 199 306.0 200 Acushnet, MA United States 41.75 -70.89 562 64
1196 934 336 337 307.0 200 Fox Island, NS Canada 45.36 -61.10 1440 58
568 971 903 904 307.0 200 Gatun Panama 9.26 -79.94 3358 185
899 927 316 317 309.0 200 Lauzon, QC Canada 46.82 -71.17 920 28
88266 870 170 171 309.0 200 Reedy Point, DE United States 39.57 -75.57 123 96
3939 944 342 343 310.0 200 Cape Norman, NL Canada 51.51 -55.83 2082 44
33700 863 156 157 311.0 200 Rock Island IL United States 42.02 -90.23 1139 287
3263 935 334 335 312.0 200 Western Head, NS Canada 43.99 -64.67 1123 60
18438 827 244 245 312.0 200 Tampa, FL United States 27.85 -82.54 1410 202
7487 925 320 321 313.0 200 Moise, QC Canada 50.20 -66.12 1440 32
269 764 210 211 314.0 200 Lincoln, CA United States 38.85 -121.36 3723 283
28554 808 16 17 314.0 200 Card Sound, FL United States 25.44 -80.45 1613 192
3502 940 338 339 315.0 200 Cape Race, NL Canada 46.66 -53.08 2068 60
14236 864 158 159 317.0 200 St Paul [Alma], MN United States 44.31 -91.91 1328 297
115 936 332 333 319.0 200 Point Escuminac, NB Canada 47.08 -64.80 1277 46
66589 838 116 117 319.0 200 Detroit, MI United States 42.31 -83.10 587 301
19514 865 160 161 320.0 200 Millers Ferry, AL United States 32.10 -87.40 1258 231
14448 862 154 155 322.0 200 St Louis, MO United States 38.62 -89.76 1104 267
9262 839 118 119 322.0 100 Youngstown, NY United States 43.24 -78.97 426 337
83262 844 94 95 324.0 200 Hudson Falls, NY United States 43.27 -73.54 490 34
Most likely the Wiarton and Angleton decodes are corrupted messages, as the frequencies they use are both dominated by strong semi local signals.
Another way to look at the decoded data is with this graph, that shows the times that messages were received from each station (click to view full sized):
You can see the various times stations were decoded. There are cases where a single decode was received (just a thin line), which was possibly a garbled message. But there are also cases for DX stations where several messages in a row were received (a thicker line). It is quite improbable that many messages were garbled in a row, with exactly the necessary bit errors to change the ID of the station, but also preserve the parity word check.
It is interesting to observe how two stations on a given frequency will alternate reception, as one fades out and the other fades in.
A very preliminary beta version of this program, Amalgamated DGPS, is available for download for those who wish to try it. It is only for Mac OS X, and requires I/Q recording files made in either the RF Space or Perseus format (and note that I have only tested with the former, the latter should work, but you never know). While there is no Windows version available at present, I may have one available shortly, so stay tuned!