SB-13 – DME/DME Navigation for Aviation

Copyright: © 2026 by Steffen Beyer

Version: 1.1.1

License: GNU General Public License (GPL) or GNU Lesser General Public License (LGPL), version at your discretion (as usual).

Description:

Calculate an aircraft's current geographical latitude and longitude (sometimes also called a fix) from the known positions of two DME stations, and the slant range distance from both of them. Optionally, enter the height of the aircraft above each DME station, which allows to correct the slant range into horizontal distance, and which may improve the accuracy of the fix.

Disclaimer:

This program is designed for experimental navigation calculations over distances and at altitudes typical of general aviation (GA). It uses an approximate planar model of the Earth's surface, with corrections for the convergence of meridians towards the poles, rather than full spherical or ellipsoidal geometry.

This approximation introduces systematic position errors that can become substantial over long distances. The magnitude of these errors depends on the geographical configuration and generally increases with distance. Consequently, the program is not suitable for the extended navigation distances typical of high-altitude airline operations.

⚠️ For educational and flight-simulation use only. Not suitable as a primary or safety-critical navigation aid in real aircraft. ⚠️

Operating conditions:

Usage:

⚠️ BEWARE: ⚠️

Contrary to my other programs, in this program the actual calculations are NOT carried out by pressing E, but by pressing 2nd E'!

Subtle difference, huge consequence!

If you get a non-blinking zero in both X and T, you have probably pressed E instead of 2nd E'!

Press 2nd E' to calculate the positions. Then press D for the LEFT position or E for the RIGHT position.

Also BEWARE that in order to initialize the program, you need to press 2nd D', and NOT 2nd E', or you may get meaningless or confusing results.

To initialize for a new pair of DME stations, press 2nd D'; this also enforces 2nd Deg mode.

Enter the geographical coordinates of both DME stations, followed by the slant range distance for each of them.

Optionally, enter the height of the aircraft above each DME station with SBR (, SBR ) or SBR EE, which allows to correct the slant range into horizontal distance, and which may improve the accuracy of the fix.

KeyInput / OutputLocationFormat / Unit
2nd D' InitializeRegisters 1-28n/a
AInput/output DME 1 latitude Display (x) DDDMM.mmmmm
BInput/output DME 1 longitude Display (x) DDDMM.mmmmm
CInput slant range distance from DME 1 Display (x) nautical miles
2nd A' Input/output DME 2 latitudeDisplay (x)DDDMM.mmmmm
2nd B' Input/output DME 2 longitudeDisplay (x)DDDMM.mmmmm
2nd C' Input slant range distance from DME 2Display (x)nautical miles
2nd E' Calculate fixDisplay (x): intersection angle in degrees (0-90);
Register t: error margin amplification factor
DDD.ddddddd; n/a
DOutput position LEFT of DME 1 to DME 2 directed line Display (x): latitude;
Register t: longitude
DDDMM.mmmmm; DDDMM.mmmmm
EOutput position RIGHT of DME 1 to DME 2 directed line Display (x): latitude;
Register t: longitude
DDDMM.mmmmm; DDDMM.mmmmm
KeysExplanationLocationFormat / UnitComment
SBR (Store aircraft's height above DME 1Register 17feetmnemonic: '(' comes first
SBR )Store aircraft's height above DME 2Register 18feetmnemonic: ')' comes second
SBR EEStore aircraft's height above both DME 1 and 2, if both are the sameRegisters 17 and 18feetmnemonic: 'EE' is "double"

 

Press 2nd E' to calculate the aircraft's two possible positions. If the geometry is acceptable, you can then retrieve the two positions, either the one to the LEFT of the directed line from DME 1 to DME 2 with D; or the one to the RIGHT of the directed line from DME 1 to DME 2 with E.

After calculation, A, B, 2nd A' and 2nd B' retrieve their stored values instead of accepting new ones; C and 2nd C', as well as SBR (, SBR ) and SBR EE, always accept new entries (in order to allow for quick successive fixes).

To change station coordinates, press 2nd D' and re-enter all data; initialization clears registers 01–28, including the stored heights, and sets 2nd Deg mode.

 

If you press D or E before a valid result has been obtained by 2nd E', or if the calculation has been rejected, then both D and E will display a zero in both the display and in t.

Note that not only does 2nd D' reset the flag for valid output and 2nd E' in case of a rejected calculation, but so do C and 2nd C', as well as SBR (, SBR ) and SBR EE, i.e.,

whenever you re-enter a new slant range distance or a new height of the aircraft above the corresponding DME station. This prevents muddled results while allowing repeated fixes in rapid succession.

Simply press 2nd E' again.

 

After pressing 2nd E', the program displays the acute intersection angle (0–90°) in x and the error margin amplification factor in t.

The error margin amplification factor indicates how sensitive the calculated position is to errors in the measured distances; it is not an absolute position-error estimate.

If 2nd E' has rejected the fix, the program stops and shows a blinking "9.9999999 99" in the display (x), and t is set to zero.

The function SBR = can be used anytime after calling 2nd E' to display the intersection angle and the error margin amplification factor again, also in the case of a rejected calculation, if available (if not, zero and plus infinity will be shown as defaults).

 

Function keys:

KeyInput / OutputLocationFormat / Unit
AInput/output DME 1 latitude Display (x) DDDMM.mmmmm
BInput/output DME 1 longitude Display (x) DDDMM.mmmmm
CInput slant range distance from DME 1 Display (x) nautical miles
DOutput position LEFT of DME 1 to DME 2 directed line Display (x): latitude;
Register t: longitude
DDDMM.mmmmm; DDDMM.mmmmm
EOutput position RIGHT of DME 1 to DME 2 directed line Display (x): latitude;
Register t: longitude
DDDMM.mmmmm; DDDMM.mmmmm
2nd A' Input/output DME 2 latitudeDisplay (x)DDDMM.mmmmm
2nd B' Input/output DME 2 longitudeDisplay (x)DDDMM.mmmmm
2nd C' Input slant range distance from DME 2Display (x)nautical miles
2nd D' InitializeRegisters 1-28n/a
2nd E' Calculate fixDisplay (x): intersection angle in degrees (0-90);
Register t: error margin amplification factor
DDD.ddddddd; n/a

Subroutines:

KeysExplanationLocationFormat / UnitComment
SBR (Store aircraft's height above DME 1Register 17feetmnemonic: '(' comes first
SBR )Store aircraft's height above DME 2Register 18feetmnemonic: ')' comes second
SBR EEStore aircraft's height above both DME 1 and 2, if both are the sameRegisters 17 and 18feetmnemonic: 'EE' is "double"
SBR =Display intersection geometry Display (x): angle in degrees (0-90);
Register t: error margin amplification factor
DDD.ddddddd; n/aonly after calculation with 2nd E'
SBR .Converts cockpit format DDDMM.mmmmm to decimal degrees DDD.dddddddDisplay (x) and Register 00DDD.ddddddd
SBR +/-Converts decimal degrees DDD.ddddddd to cockpit format DDDMM.mmmmmDisplay (x) and Register 00DDDMM.mmmmm

Output:

LocationValueFormat / Unit
Register 07:Result position L latitudeDDD.ddddddd
Register 08:Result position L longitudeDDD.ddddddd
Register 09:Result position R latitudeDDD.ddddddd
Register 10:Result position R longitudeDDD.ddddddd
Register 17:Height of aircraft above DME 1feet
Register 18:Height of aircraft above DME 2feet
Register 22:Baseline length L (= distance between DME 1 and DME 2)n/a
Register 23:Baseline offset a = ( ( r12 - r22 ) / L + L ) / 2n/a
Register 24:First q = r12 - a2, then h = sqrt( q )n/a
Register 25:First sin(intersection angle), then acute intersection angle (0-90)n/a
Register 26:Error margin amplification factorn/a

Good to know:

The program does not interrupt ongoing calculations. Its functions and subroutines do not use CLR or = internally, so ongoing arithmetic operations are not prematurely cleared or evaluated.

Registers used:

RegisterPurposeFormat / UnitComment
00Coordinate conversion resultDDDMM.mmmmm, DDD.ddddddd
01DME 1 latitude (cockpit format)DDDMM.mmmmm
02DME 1 longitude (cockpit format)DDDMM.mmmmm
03DME 1 slant range distancenautical miles
04DME 2 latitude (cockpit format)DDDMM.mmmmm
05DME 2 longitude (cockpit format)DDDMM.mmmmm
06DME 2 slant range distancenautical miles
07Result position L latitudeDDD.ddddddd
08Result position L longitudeDDD.ddddddd
09Result position R latitudeDDD.ddddddd
10Result position R longitudeDDD.ddddddd
11DME 1 latitude (decimal format)DDD.dddddddmnemonic: Register 01 + 10
12DME 1 longitude (decimal format)DDD.dddddddmnemonic: Register 02 + 10
13Horizontal distance d1 (corrected DME 1 slant range) / 60 = r1DDD.dddddddmnemonic: Register 03 + 10
14DME 2 latitude (decimal format)DDD.dddddddmnemonic: Register 04 + 10
15DME 2 longitude (decimal format)DDD.dddddddmnemonic: Register 05 + 10
16Horizontal distance d2 (corrected DME 2 slant range) / 60 = r2DDD.dddddddmnemonic: Register 06 + 10
17Height of aircraft above DME 1feetoptional, can improve accuracy
18Height of aircraft above DME 2feetoptional, can improve accuracy
19YY = (Y2 - Y1)n/alater normalized / L
20XX = (X2 - X1) * COS( (Y1+Y2)/2 )n/alater normalized / L
21COS( (Y1+Y2)/2 )n/a
22Baseline length L (= distance between DME 1 and DME 2)n/a
23Baseline offset a = ( ( r12 - r22 ) / L + L ) / 2n/a
24First q = r12 - a2, then h = sqrt( q )n/a
25First sin(intersection angle), then acute intersection angle (0-90)n/a
26Error margin amplification factorn/a
27Intermediate h * YYn/a
28Intermediate h * XXn/a
29Scratchpad for coordinate conversionsn/a
xAircraft latitude in cockpit format; folded intersection angle, internal useDDDMM.mmmmm, n/a
tAircraft longitude in cockpit format; error margin amplification factor, internal useDDDMM.mmmmm, n/a
Flag 0Controls input/output mode for DME 1 and DME 2 coordinates (latitude, longitude)0 = input, 1 = output
Flag 1Controls whether there is valid output from the most recent call to 2nd E'0 = invalid, 1 = valid

Glossary:

AbbreviationMeaningExplanation
ADFAutomatic Direction FinderA marine and aircraft radio-navigation instrument that automatically and continuously displays the relative bearing of the aircraft to a ground-based radio transmitter (such as a Non-Directional Beacon or NDB)
AGL, heightAbove Ground LevelThe vertical distance of an aircraft measured directly above a specific ground surface, airfield or VOR/DME station
AMAmplitude ModulationA method of broadcasting radio signals where the amplitude (strength) of the carrier wave is varied to embed audio information
AMSLAbove Mean Sea LevelRefers to the altitude of an aircraft or geographic feature measured relative to the average level of the ocean's surface
ATCAir Traffic ControlA ground-based service that manages aircraft on the ground and in the air to prevent collisions and keep traffic moving safely
BRGBearingDirection from one geographical point to another on a compass rose
CDICourse Deviation IndicatorA needle inside an OBI that shows a pilot whether an aircraft is to the left, right, or directly on the center of an intended magnetic course to or from a VOR station, selected with the OBS knob
DECLMagnetic DeclinationDifference between magnetic and true (geographic) north, same as magnetic variation
DMEDistance Measuring EquipmentA radio navigation system that measures the direct slant-range distance between an aircraft and a ground-based transponder station
DVORDoppler VHF Omnidirectional Range A ground-based radio navigation system that uses the Doppler effect to give pilots accurate bearing and direction information to or from the DVOR station
EHFExtremely High Frequency (30 - 300 GHz)Used in cutting-edge, high-resolution airport surface movement radars and advanced military satellite nets
FLFlight LevelRefers to an aircraft's altitude expressed in hundreds of feet above a standard atmospheric pressure setting of 1013.25 hPa (or 29.92 inHg)
FMFrequency ModulationA method where the frequency of the radio carrier wave is varied instead of its amplitude, offering clearer audio and greater resistance to static or electrical interference
GAGeneral AviationRefers to all civilian aircraft operations such as private flying, flight training, business jets, and aerial work, other than scheduled commercial airline or military flights
HFHigh Frequency (3 - 30 MHz)HF radio waves reflect off the Earth's ionosphere to provide ultra-long-range communication, making them essential for transoceanic and remote arctic flights
LFLow Frequency (30 - 300 kHz)Drives Non-Directional Beacons (NDBs) utilized for legacy automatic direction finding (ADF) navigation
MBMagnetic BearingBearing referenced to magnetic north
MFMedium Frequency (300 kHz - 3 MHz)Houses commercial AM broadcasting (which pilots can use for crude navigation) and some legacy maritime/aviation distress frequencies
MHMagnetic HeadingAircraft heading relative to magnetic north
MSLMean Sea LevelMeasures an aircraft's altitude above the average level of the ocean, providing a fixed and consistent reference point for navigation and air traffic control regardless of the terrain below
NDBNon-Directional BeaconA ground-based radio transmitter that broadcasts signals in all directions, allowing an aircraft's Automatic Direction Finder (ADF) to determine the bearing to the station for navigation
OBIOmni Bearing IndicatorA cockpit instrument that displays a pilot's aircraft position relative to a VOR (VHF Omnidirectional Range) navigation beacon
OBSOmni-Bearing Selector A rotatable cockpit control knob on an OBI that pilots use to select a specific magnetic course to or from a VOR station
RADRadialThe magnetic bearing FROM a VOR station
RBRelative BearingThe angle indicated by an ADF relative to the aircraft's nose
SHFSuper High Frequency (3 - 30 GHz)Crucial for modern weather radar, precision Microwave Landing Systems (MLS), and satellite data communications (SATCOM)
SRSlant RangeSlant range is the direct, diagonal line-of-sight distance between an aircraft and a ground station or radar, forming the hypotenuse of a right triangle created by the aircraft's altitude and its horizontal ground distance
TACANTactical Air NavigationA military radio navigation system that provides a pilot with both the direction (bearing) and distance (slant range) to a ground- or ship-based station
TBTrue BearingBearing referenced to true (geographic) north
THTrue HeadingAircraft heading relative to true (geographic) north
UHFUltra High Frequency (300 MHz - 3 GHz)UHF frequencies are primarily reserved for military aviation communications and advanced tactical systems due to their high data-carrying capacity and smaller antenna requirements
VARMagnetic VariationDifference between magnetic and true (geographic) north, same as magnetic declination
VHFVery High Frequency (30 - 300 MHz)VHF is the primary frequency band for civil aviation, utilizing line-of-sight propagation for crystal-clear short-to-medium-range voice communication with Air Traffic Control (ATC)
VLFVery Low Frequency (3 - 30 kHz)Historically used for backup global navigation (Omega system) and subterranean tracking
VORVHF Omnidirectional RangeA ground-based radio navigation system that sends out signals in all directions so pilots can find their exact magnetic bearing to or from a station
VOR/DMEVOR with DMECombined bearing and distance navigation facility
VORTACVOR+TACANPhysically combines a civilian VOR and a military TACAN transmitter into a single ground station that serves both civilian and military aircraft simultaneously
[TI-5x Emulator Screenshot]