ARDOP Latency Mitigation

ARDOP Latency Mitigation

An ARDOP link is very sensitive to timing and therefore it is possible that just a few tens of milliseconds of latency added to a transmission can exceed the default threshold in the specification.

A common problem in Linux systems is the different sound subsystems and the inherent latency issues that occur when handling virtual devices such as dsnoop, dmix and asymwine (documented here).

In the case of Winelink, the sound device is configured for use by one single TNC at a time, meaning ARDOP gets direct access to the device driver under the Wine system that provides the least latency.

Many systems now use BPQ32 to provide inter-connectivity, harmonizing control and linkage of all of the TNCs and online services such as Winlink CMS. This requires running multiple TNCs at the same time and on the same hardware device.

When provisioning a multi-purpose/multi-TNC system via a single sound interface for a single radio, it is no longer possible to have the TNCs share the hardware as the access to devices such as “plug:hw1,0” is limited to one dedicated application at a time.

On Linux, to work around the hardware driver limitation, we create a virtualized device that is happy to share its data streams to multiple applications at once. This comes at the slight expense of adding a tiny amount of latency into the audio chain.

In order to offset the latency, a parameter for ARDOP initialization needs to be sent to the TNC.

The default ARDOP LEADER parameter set in Winlink Express is 160, and this works well for single-user setups such as Winlink under Linux (Winelink).

With BPQ32-based multi-purpose/multi-TNC systems, the port declaration for ARDOP has a CONFIG subsection that takes ARDOP-specific parameters such as LEADER.

Adjusting the LEADER parameter for ARDOP between 300 and 320 provides the necessary compensation for the added latency, and links using this combination should see drastic improvements to link establishment and stability.

Example:

PORT
 PORTNUM=8
 INTERLOCK=1
 HIDE=0
 ID=G90 ARDOP500 +1500hz
 DRIVER=ARDOP
 CONFIG
 ADDR 127.0.0.1 8515 
 RADIO=2
 ARQBW 500MAX
 LEADER 300
 ENABLEPINGACK
 BUSYDET 5
 CONSOLELOG 3
 LOGLEVEL 3
 CWID TRUE
 GRIDSQUARE JO21LO
ENDPORT

Further reading:

If you find the articles, or content in general posted here useful, enjoyable or maybe even something else, please consider making a small contribution towards my hosting fund so that I may continue to provide my services for free to as many people as possible.