Introduction
Recently I was approached by several different parties inquiring whether AIS and ADS-B contacts could be shown on the same chart. Over the past year, I posted on several different forums asking whether this could be done, so my interest was re-ignited. The immediate application for this is for an off shore oil/exploration rig, where knowledge of local ships is important (AIS), as well as incoming/outgoing helicopters that land on the platform (ADS-B). Over the past year I have worked with the RTL-SDR (Ref.1/2) and OpenCPN so I decided to see if I could implement this application. Also synchronously, there was a posting on the MULTIPSK (Ref.3) forum that decoded Lat/Long from ADS-B packets can be converted to NEMA format.
Hardware/Software Configuration
Figure 1 shows the hardware/software configuration diagram. Two RTL-SDRs are used, the first one usb0 to receive AIS transmissions on 161.975 & 162.025MHz and the second one usb1 to receive ADS-B signals on 1090MHz. The AIS signals can be decoded using either MULTIPSK or AISDECO2 and are visible on OpenCPN. The ADS-B signals are decoded by MULTIPSK and converted to a NEMA0183 format so that they can also be viewed on OpenCPN. In order to get the packets from MULTIPSK to OpenCPN, I installed com0com (Ref.4) a virtual serial port driver. I set MULTIPSK to Com3 and the NEMA0183 serial link on OpenCPN to Com4.
ADS-B Reception with MULTIPSK & Google Earth (Internet Required)
Figure 2 shows the MULTIPSK startup configuration screen. In order to use the RTL-SDR, engage the “Direct via Sound Card”, “+Speaker”, “RTLkey/DLL” buttons. Hovering over each button gives the context which is very helpful. Select the RTL (usb1) via the “RTL and mode selection” button.
When the main screen opens (Fig.3), select the ADS-B button, then locate the Transceiver button. Enter the Manual frequency of 1090000KHz for the ADS-B Rx frequency. If you are using an RTL with a ppm error, you can adjust this frequency in the Carrier frequency. For example in Figure 4, I am using the V1 RTL with +20ppm error. 20ppm = 20KHz in 1GHz, so I have adjusted the carrier down from 1090000KHz to 1089980KHz. I stored this setting in Memory Location M4, then forwarded to the RTL.
Figure 5 shows the RTL I/Q Interface screen with the forwarded carrier frequency. Decoded packets appear on the main screen. To display these packets on Google Earth, depress the “Display Rx Position” and “Google Earth” buttons. Figure 6 shows the display on Google Earth.
ADS-B Reception with MULTIPSK & OpenCPN
In order to display ADS-B on OpenCPN, first install com0com virtual serial port driver (Ref.4). Return to the MULTIPSK configuration screen, and select Com3 for the Serial Port for GPS. Then on OpenCPN, create a new serial connection of Com4. Restart MULTIPSK and depress the GPS button. This will send the ADS-B Lat/Long information on Com3 to Com4 on OpenCPN. Figure 8 shows the display. The GPS red boat symbol represents the ADS-B Lat/Long for a particular decode. All the decoded packets are shown on the DEBUG screen. The red boat moves randomly depending on how many aircraft are present. This is not an ideal display, but it’s a start. If you have a better way of showing AIS/ADS-B on the same chart without an internet connection, please let me know!
Please send your comments, questions and suggestions to:
contact:
References
#1. – “RTL-SDR for AIS”, Decoding AIS with MULTIPSK
https://jeremyclark.ca/wp/nav/rtl-sdr-for-ais/
#2. – “RTL-SDR for AIS”, Decoding AIS with AISDECO2
https://jeremyclark.ca/wp/nav/rtl-sdr-for-ais-2/
#3. “MULTIPSK Release 4.45.4”
http://f6cte.free.fr/index_anglais.htm
#4. – “com0com”, Virtual Serial Port Driver
https://sourceforge.net/projects/com0com/