Previous attempts to use the PSK modes for APRS using an add-on that the late Roger Barker G4IDE wrote for UI_View have been disappointing as no error checking or AFC was used in the original add-on. This resulted in incorrect callsigns and positions appearing on the UI-View map and APRS-IS.
I wanted to improve on this as the performance of HF 300 bd packet has been poor during the recent sunspot minimum.
So how does it work...
Let's say we want to send the following APRS packet:
G4HYG>APSK-63:=5332.76N/00225.91W&Testing APRS Messenger v2.26 on 10.1497 MHz
First the program calculates a checksum using the CRC-16 Modbus algorithm. For the above APRS packet it works out in hex as: 4B60 This is then added to the packet:
G4HYG>APSK-63:=5332.76N/00225.91W&Testing APRS Messenger v2.26 on 10.1497 MHz4B60
A start and end flag "~" character is added at the start and end of the packet. This is similar to what is used in a AX.25 packet frame. This gives:
~G4HYG>APSK-63:=5332.76N/00225.91W&Testing APRS Messenger v2.26 on 10.1497 MHz4B60~
To overcome any data corruption in the receiver due to the AFC locking on or AGC on a strong signal five dots are added at the start .....
We finally transmit the following packet:
.....~G4HYG>APSK-63:=5332.76N/00225.91W&Testing APRS Messenger v2.26 on 10.1497 MHz4B60~
When this is received at another station it could be corrupted by interference or noise.
A typical received signal follows:
...~G4HYG>APSK-63:=5332.76N/00225.91W&Testing APRS Messenger v2.26 on 10.1497 MHz4B60~ kt e h
Note that two of the dots at the start are missing and "kt e h" has been added at the end as the receiver PSK squelch was closing.
The receive side of the program now looks for the start and end "~" flags and extracts the text between them:
G4HYG>APSK-63:=5332.76N/00225.91W&Testing APRS Messenger v2.26 on 10.1497 MHz4B60
The last four characters are extracted and a CRC-16 Modbus checksum is calculated on what is left. This checksum is compared with the extracted four characters to confirm that the received packet is the same that sent by the sender. In this case it is:
4B60 is the same as 4B60 so the packet is confirmed as correct.
The packet is now displayed on the screen even if it has errors so that it can be manually read. If the packet has checked OK then it is sent to the APRS-IS:
G4HYG>APSK-63:=5332.76N/00225.91W&Testing APRS Messenger v2.26 on 10.1497 MHz